@@ -66,7 +66,7 @@ TEST(RecoveryTestSuite, RecoveryFailureCondition) {
6666 // inserted.clear();
6767 // remove all but the final few elements
6868 // TODO - figure out the right place to put sketch clearing
69- recovery.cleanup_sketch . reset_sample_state ();
69+ recovery.cleanup_sketch -> reset_sample_state ();
7070 for (vec_t i = 0 ; i < (1 << 14 ) - 1027 ; i++) {
7171 recovery.update (i);
7272 inserted.erase (i);
@@ -76,4 +76,66 @@ TEST(RecoveryTestSuite, RecoveryFailureCondition) {
7676 std::unordered_set<vec_t > recovered3 (result3.recovered_indices .begin (), result3.recovered_indices .end ());
7777 ASSERT_EQ (result3.result , SUCCESS);
7878 ASSERT_EQ (recovered3, inserted);
79+ }
80+
81+ TEST (RecoveryTestSuite, RecoveryForceSketchUse) {
82+ // TODO - IRON THIS OUT
83+ SparseRecovery recovery (1 << 20 , 1 << 4 , 1 , get_seed ());
84+ std::unordered_set<vec_t > inserted;
85+ for (vec_t i = 0 ; i < (1 << 4 ) * 2 ; i++) {
86+ recovery.update (i);
87+ inserted.insert (i);
88+ }
89+ auto result = recovery.recover ();
90+ ASSERT_EQ (result.result , SUCCESS);
91+ }
92+
93+ TEST (RecoveryTestSuite, RecoveryMerge) {
94+ // TODO - IRON THIS OUT
95+ auto seed = get_seed ();
96+ SparseRecovery recovery1 (1 << 20 , 1 << 10 , 1 , seed);
97+ SparseRecovery recovery2 (1 << 20 , 1 << 10 , 1 , seed);
98+ for (vec_t i = 0 ; i < (1 << 10 ) * 2 ; i++) {
99+ recovery1.update (i);
100+ }
101+ vec_t offset = 512 ;
102+ for (vec_t i = 0 ; i < (1 << 10 ) * 2 ; i++) {
103+ recovery1.update (i+512 );
104+ }
105+ recovery1.merge (recovery2);
106+ auto result = recovery1.recover ();
107+ ASSERT_EQ (result.result , SUCCESS);
108+ ASSERT_EQ (result.recovered_indices .size (), 1 << 10 );
109+ for (auto idx: result.recovered_indices ) {
110+ ASSERT_TRUE (idx < 512 || idx >= 1024 );
111+ }
112+ }
113+
114+ TEST (RecoveryTestSuite, RecoveryManyFailureProbability) {
115+ // TODO - IRON THIS OUT
116+ auto vector_size = 1 << 20 ;
117+ auto recovery_size = 1 << 10 ;
118+ auto num_sketches = 1 << 15 ;
119+ double recovery_size_adjustment = 1 ;
120+ auto seed = get_seed ();
121+ std::vector<SparseRecovery> recoveries;
122+ for (vec_t i = 0 ; i < num_sketches; i++) {
123+ recoveries.push_back (SparseRecovery (
124+ vector_size, ceill (recovery_size * recovery_size_adjustment), 1 ,
125+ seed));
126+ }
127+ for (size_t i = 0 ; i < num_sketches; i++) {
128+ for (vec_t j = recovery_size * i; j < recovery_size * (i+1 ); j++) {
129+ recoveries[i].update (j);
130+ }
131+ }
132+ for (size_t i = 0 ; i < num_sketches; i++) {
133+ auto result = recoveries[i].recover ();
134+ ASSERT_EQ (result.result , SUCCESS);
135+ ASSERT_EQ (result.recovered_indices .size (), recovery_size);
136+ for (auto idx: result.recovered_indices ) {
137+ ASSERT_TRUE (idx >= recovery_size * i && idx < recovery_size * (i+1 ));
138+ }
139+ }
140+
79141}
0 commit comments