@@ -444,15 +444,15 @@ func TestTrieGaps(t *testing.T) {
444
444
t .Run ("Gap in empty trie" , func (t * testing.T ) {
445
445
keys := []bitstr.Key {}
446
446
tr := initTrie (keys )
447
- require .Equal (t , []bitstr.Key {"" }, TrieGaps (tr ))
447
+ require .Equal (t , []bitstr.Key {"" }, TrieGaps (tr , "" , bit256 . ZeroKey () ))
448
448
})
449
449
t .Run ("No gaps in flat trie" , func (t * testing.T ) {
450
450
keys := []bitstr.Key {
451
451
"0" ,
452
452
"1" ,
453
453
}
454
454
tr := initTrie (keys )
455
- require .Empty (t , TrieGaps (tr ))
455
+ require .Empty (t , TrieGaps (tr , "" , bit256 . ZeroKey () ))
456
456
})
457
457
t .Run ("No gaps in unbalanced trie" , func (t * testing.T ) {
458
458
keys := []bitstr.Key {
@@ -462,35 +462,37 @@ func TestTrieGaps(t *testing.T) {
462
462
"111" ,
463
463
}
464
464
tr := initTrie (keys )
465
- require .Empty (t , TrieGaps (tr ))
465
+ require .Empty (t , TrieGaps (tr , "" , bit256 . ZeroKey () ))
466
466
})
467
467
t .Run ("No gaps in trie with empty key" , func (t * testing.T ) {
468
468
keys := []bitstr.Key {
469
469
"" ,
470
470
}
471
471
tr := initTrie (keys )
472
- require .Empty (t , TrieGaps (tr ))
472
+ require .Empty (t , TrieGaps (tr , "" , bit256 . ZeroKey () ))
473
473
})
474
474
t .Run ("Gap with single key - 0" , func (t * testing.T ) {
475
475
keys := []bitstr.Key {
476
476
"0" ,
477
477
}
478
478
tr := initTrie (keys )
479
- require .Equal (t , []bitstr.Key {"1" }, TrieGaps (tr ))
479
+ require .Equal (t , []bitstr.Key {"1" }, TrieGaps (tr , "" , bit256 . ZeroKey () ))
480
480
})
481
481
t .Run ("Gap with single key - 1" , func (t * testing.T ) {
482
482
keys := []bitstr.Key {
483
483
"1" ,
484
484
}
485
485
tr := initTrie (keys )
486
- require .Equal (t , []bitstr.Key {"0" }, TrieGaps (tr ))
486
+ require .Equal (t , []bitstr.Key {"0" }, TrieGaps (tr , "" , bit256 . ZeroKey () ))
487
487
})
488
488
t .Run ("Gap with single key - 11101101" , func (t * testing.T ) {
489
489
keys := []bitstr.Key {
490
490
"11101101" ,
491
491
}
492
492
tr := initTrie (keys )
493
- require .Equal (t , SiblingPrefixes (keys [0 ]), TrieGaps (tr ))
493
+ siblingPrefixes := SiblingPrefixes (keys [0 ])
494
+ sortBitstrKeysByOrder (siblingPrefixes , bit256 .ZeroKey ())
495
+ require .Equal (t , siblingPrefixes , TrieGaps (tr , "" , bit256 .ZeroKey ()))
494
496
})
495
497
t .Run ("Gap missing single key - 0" , func (t * testing.T ) {
496
498
keys := []bitstr.Key {
@@ -499,7 +501,7 @@ func TestTrieGaps(t *testing.T) {
499
501
"110" ,
500
502
}
501
503
tr := initTrie (keys )
502
- require .Equal (t , []bitstr.Key {"111" }, TrieGaps (tr ))
504
+ require .Equal (t , []bitstr.Key {"111" }, TrieGaps (tr , "" , bit256 . ZeroKey () ))
503
505
})
504
506
t .Run ("Gap missing single key - 1" , func (t * testing.T ) {
505
507
keys := []bitstr.Key {
@@ -509,7 +511,7 @@ func TestTrieGaps(t *testing.T) {
509
511
"1101" ,
510
512
}
511
513
tr := initTrie (keys )
512
- require .Equal (t , []bitstr.Key {"111" }, TrieGaps (tr ))
514
+ require .Equal (t , []bitstr.Key {"111" }, TrieGaps (tr , "" , bit256 . ZeroKey () ))
513
515
})
514
516
t .Run ("Gap missing single key - 2" , func (t * testing.T ) {
515
517
keys := []bitstr.Key {
@@ -521,7 +523,7 @@ func TestTrieGaps(t *testing.T) {
521
523
"1101" ,
522
524
}
523
525
tr := initTrie (keys )
524
- require .Equal (t , []bitstr.Key {"111" }, TrieGaps (tr ))
526
+ require .Equal (t , []bitstr.Key {"111" }, TrieGaps (tr , "" , bit256 . ZeroKey () ))
525
527
})
526
528
t .Run ("Gap missing multiple keys - 0" , func (t * testing.T ) {
527
529
keys := []bitstr.Key {
@@ -532,15 +534,133 @@ func TestTrieGaps(t *testing.T) {
532
534
"1101" ,
533
535
}
534
536
tr := initTrie (keys )
535
- require .Equal (t , []bitstr.Key {"001" , "111" }, TrieGaps (tr ))
537
+ require .Equal (t , []bitstr.Key {"001" , "111" }, TrieGaps (tr , "" , bit256 . ZeroKey () ))
536
538
})
537
539
t .Run ("Gap missing multiple keys - 1" , func (t * testing.T ) {
538
540
keys := []bitstr.Key {
539
541
"000" ,
540
542
"1101" ,
541
543
}
542
544
tr := initTrie (keys )
543
- require .Equal (t , []bitstr.Key {"01" , "001" , "10" , "111" , "1100" }, TrieGaps (tr ))
545
+ require .Equal (t , []bitstr.Key {"001" , "01" , "10" , "1100" , "111" }, TrieGaps (tr , "" , bit256 .ZeroKey ()))
546
+ })
547
+ t .Run ("Gap missing multiple keys - 2" , func (t * testing.T ) {
548
+ keys := []bitstr.Key {
549
+ "0000" ,
550
+ "1000" ,
551
+ }
552
+ tr := initTrie (keys )
553
+ require .Equal (t , []bitstr.Key {"0001" , "001" , "01" , "1001" , "101" , "11" }, TrieGaps (tr , "" , bit256 .ZeroKey ()))
554
+ })
555
+
556
+ t .Run ("Single key inside target" , func (t * testing.T ) {
557
+ keys := []bitstr.Key {
558
+ "0000" ,
559
+ }
560
+ tr := initTrie (keys )
561
+ require .Equal (t , []bitstr.Key {"0001" , "001" }, TrieGaps (tr , "00" , bit256 .ZeroKey ()))
562
+ })
563
+ t .Run ("Single key outside target" , func (t * testing.T ) {
564
+ keys := []bitstr.Key {
565
+ "0000" ,
566
+ }
567
+ tr := initTrie (keys )
568
+ require .Equal (t , []bitstr.Key {"11" }, TrieGaps (tr , "11" , bit256 .ZeroKey ()))
569
+ })
570
+
571
+ t .Run ("Target subset" , func (t * testing.T ) {
572
+ keys := []bitstr.Key {
573
+ "0000" ,
574
+ "0010" ,
575
+ "100" ,
576
+ "11" ,
577
+ }
578
+ tr := initTrie (keys )
579
+ require .Equal (t , []bitstr.Key {"0001" , "0011" , "01" }, TrieGaps (tr , "0" , bit256 .ZeroKey ()))
580
+ })
581
+
582
+ t .Run ("Target subset reverse order" , func (t * testing.T ) {
583
+ keys := []bitstr.Key {
584
+ "0000" ,
585
+ "0001" ,
586
+ "1000" ,
587
+ }
588
+ tr := initTrie (keys )
589
+ require .Equal (t , []bitstr.Key {"01" , "001" }, TrieGaps (tr , "0" , bitstr .Key ("1111" )))
590
+ })
591
+
592
+ t .Run ("Target longer than only key in trie" , func (t * testing.T ) {
593
+ keys := []bitstr.Key {
594
+ "00" ,
595
+ }
596
+ tr := initTrie (keys )
597
+ require .Empty (t , TrieGaps (tr , "000" , bit256 .ZeroKey ()))
598
+ })
599
+
600
+ t .Run ("Target is superstring of key in trie" , func (t * testing.T ) {
601
+ keys := []bitstr.Key {
602
+ "00" ,
603
+ "01" ,
604
+ "101" ,
605
+ }
606
+ tr := initTrie (keys )
607
+ require .Empty (t , TrieGaps (tr , "000" , bit256 .ZeroKey ()))
608
+ })
609
+ }
610
+
611
+ func TestSortBitstrKeysByOrder (t * testing.T ) {
612
+ t .Run ("Empty" , func (t * testing.T ) {
613
+ keys := []bitstr.Key {}
614
+ sortBitstrKeysByOrder (keys , bit256 .ZeroKey ())
615
+ require .Equal (t , []bitstr.Key {}, keys )
616
+ })
617
+
618
+ t .Run ("Single key" , func (t * testing.T ) {
619
+ keys := []bitstr.Key {"0" }
620
+ sortBitstrKeysByOrder (keys , bit256 .ZeroKey ())
621
+ require .Equal (t , []bitstr.Key {"0" }, keys )
622
+ })
623
+
624
+ t .Run ("Two sorted keys" , func (t * testing.T ) {
625
+ keys := []bitstr.Key {"0" , "1" }
626
+ sortBitstrKeysByOrder (keys , bit256 .ZeroKey ())
627
+ require .Equal (t , []bitstr.Key {"0" , "1" }, keys )
628
+ })
629
+
630
+ t .Run ("Two keys - zero order" , func (t * testing.T ) {
631
+ keys := []bitstr.Key {"1" , "0" }
632
+ sortBitstrKeysByOrder (keys , bit256 .ZeroKey ())
633
+ require .Equal (t , []bitstr.Key {"0" , "1" }, keys )
634
+ })
635
+
636
+ t .Run ("Two keys - reverse order" , func (t * testing.T ) {
637
+ keys := []bitstr.Key {"0" , "1" }
638
+ sortBitstrKeysByOrder (keys , bitstr .Key ("1" ))
639
+ require .Equal (t , []bitstr.Key {"1" , "0" }, keys )
640
+ })
641
+
642
+ t .Run ("Different key lengths" , func (t * testing.T ) {
643
+ keys := []bitstr.Key {"00" , "000" , "0" }
644
+ sortBitstrKeysByOrder (keys , bitstr .Key ("0000" ))
645
+ require .Equal (t , []bitstr.Key {"000" , "00" , "0" }, keys )
646
+ })
647
+
648
+ t .Run ("Different key lengths" , func (t * testing.T ) {
649
+ keys := []bitstr.Key {"01" , "1" }
650
+ sortBitstrKeysByOrder (keys , bitstr .Key ("11" ))
651
+ require .Equal (t , []bitstr.Key {"1" , "01" }, keys )
652
+ })
653
+
654
+ t .Run ("Short order" , func (t * testing.T ) {
655
+ keys := []bitstr.Key {"111" , "110" , "0" }
656
+ sortBitstrKeysByOrder (keys , bitstr .Key ("00" ))
657
+ require .Equal (t , []bitstr.Key {"0" , "111" , "110" }, keys )
658
+ })
659
+
660
+ t .Run ("Identical keys" , func (t * testing.T ) {
661
+ keys := []bitstr.Key {"0" , "0" }
662
+ sortBitstrKeysByOrder (keys , bitstr .Key ("00" ))
663
+ require .Equal (t , []bitstr.Key {"0" , "0" }, keys )
544
664
})
545
665
}
546
666
0 commit comments