@@ -92,6 +92,53 @@ SUITE(compactCells) {
9292 free (children );
9393 }
9494
95+ TEST (res0childrenExceptOne ) {
96+ H3Index parent ;
97+ setH3Index (& parent , 0 , 0 , 0 );
98+
99+ int64_t arrSize ;
100+ t_assertSuccess (H3_EXPORT (cellToChildrenSize )(parent , 1 , & arrSize ));
101+
102+ H3Index * children = calloc (arrSize , sizeof (H3Index ));
103+ t_assertSuccess (H3_EXPORT (cellToChildren )(parent , 1 , children ));
104+ H3Index removed = 0x81007ffffffffff ;
105+ for (int idx = 0 ; idx < arrSize ; idx ++ ) {
106+ if (children [idx ] == removed ) {
107+ children [idx ] = 0 ;
108+ break ;
109+ }
110+ }
111+
112+ H3Index * compressed = calloc (arrSize , sizeof (H3Index ));
113+ t_assertSuccess (H3_EXPORT (compactCells (children , compressed , arrSize )));
114+ int presentCount = 0 ;
115+ H3Index expected [] = {
116+ 0x81003ffffffffff , 0 /* removed: 0x81007ffffffffff*/ ,
117+ 0x8100bffffffffff , 0x8100fffffffffff ,
118+ 0x81013ffffffffff , 0x81017ffffffffff ,
119+ 0x8101bffffffffff };
120+ for (int idx = 0 ; idx < arrSize ; idx ++ ) {
121+ if (compressed [idx ]) {
122+ bool found = false;
123+ for (int idx2 = 0 ; !found && idx2 < arrSize ; idx2 ++ ) {
124+ if (expected [idx2 ] == compressed [idx ]) {
125+ expected [idx2 ] =
126+ 0 ; // Don't allow this cell more than once
127+ found = true;
128+ }
129+ }
130+ t_assert (found , "should be in expected set exactly once" );
131+ t_assert (compressed [idx ] != parent , "should not get parent" );
132+ t_assert (compressed [idx ] != removed ,
133+ "should not get removed cell" );
134+ presentCount ++ ;
135+ }
136+ }
137+ t_assert (presentCount == 6 , "expected number of cells returned" );
138+ free (compressed );
139+ free (children );
140+ }
141+
95142 TEST (allRes1 ) {
96143 const int64_t numRes0 = 122 ;
97144 const int64_t numRes1 = 842 ;
0 commit comments