@@ -326,11 +326,6 @@ describe('processSchema', function () {
326326 const result = processSchema ( schema ) ;
327327
328328 expect ( result ) . to . deep . equal ( {
329- 'items[]' : {
330- type : 'Document' ,
331- sample_values : [ ] , // no sample values for Documents
332- probability : 1.0 ,
333- } ,
334329 'items[].id' : {
335330 type : 'Number' ,
336331 sample_values : [ 1 , 2 ] ,
@@ -479,11 +474,6 @@ describe('processSchema', function () {
479474 const result = processSchema ( schema ) ;
480475
481476 expect ( result ) . to . deep . equal ( {
482- 'matrix[][]' : {
483- type : 'Document' ,
484- sample_values : [ ] ,
485- probability : 1.0 ,
486- } ,
487477 'matrix[][].x' : {
488478 type : 'Number' ,
489479 sample_values : [ 1 , 3 ] ,
@@ -582,11 +572,6 @@ describe('processSchema', function () {
582572 const result = processSchema ( schema ) ;
583573
584574 expect ( result ) . to . deep . equal ( {
585- 'deepMatrix[][][]' : {
586- type : 'Document' ,
587- sample_values : [ ] ,
588- probability : 1.0 ,
589- } ,
590575 'deepMatrix[][][].value' : {
591576 type : 'Number' ,
592577 sample_values : [ 42 ] ,
@@ -714,4 +699,226 @@ describe('processSchema', function () {
714699 } ,
715700 } ) ;
716701 } ) ;
702+
703+ it ( 'handles array of documents with nested arrays' , function ( ) {
704+ // teams: [{ name: "Team A", members: ["Alice", "Bob"] }, { name: "Team B", members: ["Charlie"] }]
705+ const schema : Schema = {
706+ fields : [
707+ {
708+ name : 'teams' ,
709+ path : [ 'teams' ] ,
710+ count : 1 ,
711+ type : [ 'Array' ] ,
712+ probability : 1.0 ,
713+ hasDuplicates : false ,
714+ types : [
715+ {
716+ name : 'Array' ,
717+ bsonType : 'Array' ,
718+ path : [ 'teams' ] ,
719+ count : 1 ,
720+ probability : 1.0 ,
721+ lengths : [ 2 ] ,
722+ averageLength : 2 ,
723+ totalCount : 2 ,
724+ values : [
725+ [
726+ { name : 'Team A' , members : [ 'Alice' , 'Bob' ] } ,
727+ { name : 'Team B' , members : [ 'Charlie' ] } ,
728+ ] ,
729+ ] ,
730+ types : [
731+ {
732+ name : 'Document' ,
733+ bsonType : 'Document' ,
734+ path : [ 'teams' ] ,
735+ count : 2 ,
736+ probability : 1.0 ,
737+ fields : [
738+ {
739+ name : 'name' ,
740+ path : [ 'teams' , 'name' ] ,
741+ count : 2 ,
742+ type : [ 'String' ] ,
743+ probability : 1.0 ,
744+ hasDuplicates : false ,
745+ types : [
746+ {
747+ name : 'String' ,
748+ bsonType : 'String' ,
749+ path : [ 'teams' , 'name' ] ,
750+ count : 2 ,
751+ probability : 1.0 ,
752+ values : [ 'Team A' , 'Team B' ] ,
753+ } as SchemaType ,
754+ ] ,
755+ } as SchemaField ,
756+ {
757+ name : 'members' ,
758+ path : [ 'teams' , 'members' ] ,
759+ count : 2 ,
760+ type : [ 'Array' ] ,
761+ probability : 1.0 ,
762+ hasDuplicates : false ,
763+ types : [
764+ {
765+ name : 'Array' ,
766+ bsonType : 'Array' ,
767+ path : [ 'teams' , 'members' ] ,
768+ count : 2 ,
769+ probability : 1.0 ,
770+ lengths : [ 2 , 1 ] ,
771+ averageLength : 1.5 ,
772+ totalCount : 3 ,
773+ values : [ [ 'Alice' , 'Bob' ] , [ 'Charlie' ] ] ,
774+ types : [
775+ {
776+ name : 'String' ,
777+ bsonType : 'String' ,
778+ path : [ 'teams' , 'members' ] ,
779+ count : 3 ,
780+ probability : 1.0 ,
781+ values : [ 'Alice' , 'Bob' , 'Charlie' ] ,
782+ } as SchemaType ,
783+ ] ,
784+ } as ArraySchemaType ,
785+ ] ,
786+ } as SchemaField ,
787+ ] ,
788+ } as DocumentSchemaType ,
789+ ] ,
790+ } as ArraySchemaType ,
791+ ] ,
792+ } as SchemaField ,
793+ ] ,
794+ count : 1 ,
795+ } ;
796+
797+ const result = processSchema ( schema ) ;
798+
799+ expect ( result ) . to . deep . equal ( {
800+ 'teams[].name' : {
801+ type : 'String' ,
802+ sample_values : [ 'Team A' , 'Team B' ] ,
803+ probability : 1.0 ,
804+ } ,
805+ 'teams[].members[]' : {
806+ type : 'String' ,
807+ sample_values : [ [ 'Alice' , 'Bob' ] , [ 'Charlie' ] ] ,
808+ probability : 1.0 ,
809+ } ,
810+ } ) ;
811+ } ) ;
812+
813+ it ( 'handles triple nested arrays (3D matrix)' , function ( ) {
814+ // cube: [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]
815+ const schema : Schema = {
816+ fields : [
817+ {
818+ name : 'cube' ,
819+ path : [ 'cube' ] ,
820+ count : 1 ,
821+ type : [ 'Array' ] ,
822+ probability : 1.0 ,
823+ hasDuplicates : false ,
824+ types : [
825+ {
826+ name : 'Array' ,
827+ bsonType : 'Array' ,
828+ path : [ 'cube' ] ,
829+ count : 1 ,
830+ probability : 1.0 ,
831+ lengths : [ 2 ] ,
832+ averageLength : 2 ,
833+ totalCount : 2 ,
834+ values : [
835+ [
836+ [
837+ [ 1 , 2 ] ,
838+ [ 3 , 4 ] ,
839+ ] ,
840+ [
841+ [ 5 , 6 ] ,
842+ [ 7 , 8 ] ,
843+ ] ,
844+ ] ,
845+ ] ,
846+ types : [
847+ {
848+ name : 'Array' ,
849+ bsonType : 'Array' ,
850+ path : [ 'cube' ] ,
851+ count : 2 ,
852+ probability : 1.0 ,
853+ lengths : [ 2 ] ,
854+ averageLength : 2 ,
855+ totalCount : 4 ,
856+ values : [
857+ [
858+ [ 1 , 2 ] ,
859+ [ 3 , 4 ] ,
860+ ] ,
861+ [
862+ [ 5 , 6 ] ,
863+ [ 7 , 8 ] ,
864+ ] ,
865+ ] ,
866+ types : [
867+ {
868+ name : 'Array' ,
869+ bsonType : 'Array' ,
870+ path : [ 'cube' ] ,
871+ count : 4 ,
872+ probability : 1.0 ,
873+ lengths : [ 2 ] ,
874+ averageLength : 2 ,
875+ totalCount : 8 ,
876+ values : [
877+ [ 1 , 2 ] ,
878+ [ 3 , 4 ] ,
879+ [ 5 , 6 ] ,
880+ [ 7 , 8 ] ,
881+ ] ,
882+ types : [
883+ {
884+ name : 'Number' ,
885+ bsonType : 'Number' ,
886+ path : [ 'cube' ] ,
887+ count : 8 ,
888+ probability : 1.0 ,
889+ values : [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ] ,
890+ } as SchemaType ,
891+ ] ,
892+ } as ArraySchemaType ,
893+ ] ,
894+ } as ArraySchemaType ,
895+ ] ,
896+ } as ArraySchemaType ,
897+ ] ,
898+ } as SchemaField ,
899+ ] ,
900+ count : 1 ,
901+ } ;
902+
903+ const result = processSchema ( schema ) ;
904+
905+ expect ( result ) . to . deep . equal ( {
906+ 'cube[][][]' : {
907+ type : 'Number' ,
908+ sample_values : [
909+ [
910+ [
911+ [ 1 , 2 ] ,
912+ [ 3 , 4 ] ,
913+ ] ,
914+ [
915+ [ 5 , 6 ] ,
916+ [ 7 , 8 ] ,
917+ ] ,
918+ ] ,
919+ ] ,
920+ probability : 1.0 ,
921+ } ,
922+ } ) ;
923+ } ) ;
717924} ) ;
0 commit comments