@@ -537,3 +537,141 @@ TEST(HandleTrieTest, multithread_limited_handle_set) {
537537 }
538538 }
539539}
540+
541+ TEST (HandleTrieTest, remove_basic) {
542+ HandleTrie trie (4 );
543+ TestValue* value;
544+
545+ unsigned int initial_size = trie.size ;
546+ EXPECT_EQ (initial_size, 0 );
547+
548+ // Insert some values
549+ trie.insert (" ABCD" , new TestValue (3 ));
550+ trie.insert (" ABCF" , new TestValue (4 ));
551+ trie.insert (" ABFD" , new TestValue (5 ));
552+ trie.insert (" FBCD" , new TestValue (6 ));
553+ trie.insert (" AFCD" , new TestValue (7 ));
554+
555+ EXPECT_EQ (trie.size , initial_size + 5 );
556+
557+ // Verify they exist
558+ value = (TestValue*) trie.lookup (" ABCD" );
559+ EXPECT_TRUE (value != NULL );
560+ EXPECT_TRUE (value->count == 3 );
561+ value = (TestValue*) trie.lookup (" ABCF" );
562+ EXPECT_TRUE (value != NULL );
563+ EXPECT_TRUE (value->count == 4 );
564+
565+ // Remove one
566+ bool removed = trie.remove (" ABCD" );
567+ EXPECT_TRUE (removed);
568+
569+ // Verify it's gone
570+ value = (TestValue*) trie.lookup (" ABCD" );
571+ EXPECT_TRUE (value == NULL );
572+
573+ EXPECT_EQ (trie.size , initial_size + 4 );
574+
575+ // Verify others still exist
576+ value = (TestValue*) trie.lookup (" ABCF" );
577+ EXPECT_TRUE (value != NULL );
578+ EXPECT_TRUE (value->count == 4 );
579+ value = (TestValue*) trie.lookup (" ABFD" );
580+ EXPECT_TRUE (value != NULL );
581+ EXPECT_TRUE (value->count == 5 );
582+ value = (TestValue*) trie.lookup (" FBCD" );
583+ EXPECT_TRUE (value != NULL );
584+ EXPECT_TRUE (value->count == 6 );
585+ value = (TestValue*) trie.lookup (" AFCD" );
586+ EXPECT_TRUE (value != NULL );
587+ EXPECT_TRUE (value->count == 7 );
588+
589+ // Try to remove non-existent key
590+ removed = trie.remove (" XXXX" );
591+ EXPECT_FALSE (removed);
592+
593+ EXPECT_EQ (trie.size , initial_size + 4 );
594+ }
595+
596+ TEST (HandleTrieTest, remove_and_reinsert) {
597+ HandleTrie trie (4 );
598+ TestValue* value;
599+
600+ // Insert
601+ trie.insert (" ABCD" , new TestValue (3 ));
602+ value = (TestValue*) trie.lookup (" ABCD" );
603+ EXPECT_TRUE (value != NULL );
604+ EXPECT_TRUE (value->count == 3 );
605+
606+ // Remove
607+ bool removed = trie.remove (" ABCD" );
608+ EXPECT_TRUE (removed);
609+ value = (TestValue*) trie.lookup (" ABCD" );
610+ EXPECT_TRUE (value == NULL );
611+
612+ // Re-insert
613+ trie.insert (" ABCD" , new TestValue (5 ));
614+ value = (TestValue*) trie.lookup (" ABCD" );
615+ EXPECT_TRUE (value != NULL );
616+ EXPECT_TRUE (value->count == 5 );
617+ }
618+
619+ TEST (HandleTrieTest, remove_multiple) {
620+ HandleTrie trie (4 );
621+
622+ // Insert multiple values
623+ trie.insert (" ABCD" , new TestValue (3 ));
624+ trie.insert (" ABCF" , new TestValue (4 ));
625+ trie.insert (" ABFD" , new TestValue (5 ));
626+ trie.insert (" FBCD" , new TestValue (6 ));
627+ trie.insert (" AFCD" , new TestValue (7 ));
628+
629+ // Remove all
630+ EXPECT_TRUE (trie.remove (" ABCD" ));
631+ EXPECT_TRUE (trie.remove (" ABCF" ));
632+ EXPECT_TRUE (trie.remove (" ABFD" ));
633+ EXPECT_TRUE (trie.remove (" FBCD" ));
634+ EXPECT_TRUE (trie.remove (" AFCD" ));
635+
636+ // Verify all are gone
637+ EXPECT_TRUE (trie.lookup (" ABCD" ) == NULL );
638+ EXPECT_TRUE (trie.lookup (" ABCF" ) == NULL );
639+ EXPECT_TRUE (trie.lookup (" ABFD" ) == NULL );
640+ EXPECT_TRUE (trie.lookup (" FBCD" ) == NULL );
641+ EXPECT_TRUE (trie.lookup (" AFCD" ) == NULL );
642+ }
643+
644+ TEST (HandleTrieTest, remove_already_removed) {
645+ HandleTrie trie (4 );
646+
647+ // Insert
648+ trie.insert (" ABCD" , new TestValue (3 ));
649+
650+ // Remove once
651+ bool removed = trie.remove (" ABCD" );
652+ EXPECT_TRUE (removed);
653+
654+ // Try to remove again
655+ removed = trie.remove (" ABCD" );
656+ EXPECT_FALSE (removed);
657+ }
658+
659+ TEST (HandleTrieTest, remove_after_merge) {
660+ HandleTrie trie (4 );
661+ AccumulatorValue* value;
662+
663+ // Insert and merge
664+ trie.insert (" ABCD" , new AccumulatorValue ());
665+ trie.insert (" ABCD" , new AccumulatorValue ());
666+ value = (AccumulatorValue*) trie.lookup (" ABCD" );
667+ EXPECT_TRUE (value != NULL );
668+ EXPECT_TRUE (value->count == 2 );
669+
670+ // Remove
671+ bool removed = trie.remove (" ABCD" );
672+ EXPECT_TRUE (removed);
673+
674+ // Verify it's gone
675+ value = (AccumulatorValue*) trie.lookup (" ABCD" );
676+ EXPECT_TRUE (value == NULL );
677+ }
0 commit comments