OverviewFilesCommitsIssuesDocsReleasesPeers

opencog-atomspace-rocks commits / 081330c

iFix assorted off-by-one errors.
Also clarify that keys cannot be deleted!
081330cb77c1ef9bf4770d749124cadd140f6b53
by Linas Vepstas <linasvepstas@gmail.com> · 2025-12-09T02:14:22.000Z

Changed files (1) +50 -56

tests/persist/rocks/BasicDeleteUTest.cxxtest +50 -56
……@@ -129,9 +129,8 @@ void BasicDeleteUTest::test_duplicates(void)
129129 TS_ASSERT_EQUALS(as->get_size(), 3);
130130 store->open();
131131 store->load_atomspace();
132 Handle tvk(as->get_node(PREDICATE_NODE, "*-TruthValueKey-*"));
133 if (tvk) as->extract_atom(tvk);
134 TS_ASSERT_EQUALS(as->get_size(), 3);
132 // +1 for *-IsKeyFlag-*
133 TS_ASSERT_EQUALS(as->get_size(), 4);
135134
136135 store->erase();
137136 store->close();
……@@ -189,9 +188,8 @@ void BasicDeleteUTest::test_recursive(void)
189188 as->extract_atom(ha, true);
190189 store->open();
191190 store->load_atomspace();
192 Handle tvk(as->get_node(PREDICATE_NODE, "*-TruthValueKey-*"));
193 if (tvk) as->extract_atom(tvk);
194 TS_ASSERT_EQUALS(as->get_size(), 2);
191 // +1 for *-IsKeyFlag-*
192 TS_ASSERT_EQUALS(as->get_size(), 3);
195193
196194 // --------------------------------------
197195 // Do it again, but with a different order.
……@@ -204,18 +202,16 @@ void BasicDeleteUTest::test_recursive(void)
204202 store->close();
205203 store->open();
206204 store->load_atomspace();
207 tvk = as->get_node(PREDICATE_NODE, "*-TruthValueKey-*");
208 if (tvk) as->extract_atom(tvk);
209 TS_ASSERT_EQUALS(as->get_size(), 5);
205 // +1 for *-IsKeyFlag-*
206 TS_ASSERT_EQUALS(as->get_size(), 6);
210207
211208 store->remove_atom(as, ha, true);
212209 store->close();
213210 as->extract_atom(ha, true);
214211 store->open();
215212 store->load_atomspace();
216 tvk = as->get_node(PREDICATE_NODE, "*-TruthValueKey-*");
217 if (tvk) as->extract_atom(tvk);
218 TS_ASSERT_EQUALS(as->get_size(), 2);
213 // +1 for *-IsKeyFlag-*
214 TS_ASSERT_EQUALS(as->get_size(), 3);
219215
220216 // --------------------------------------
221217 // Do it again, but with a complex order.
……@@ -228,18 +224,16 @@ void BasicDeleteUTest::test_recursive(void)
228224 store->close();
229225 store->open();
230226 store->load_atomspace();
231 tvk = as->get_node(PREDICATE_NODE, "*-TruthValueKey-*");
232 if (tvk) as->extract_atom(tvk);
233 TS_ASSERT_EQUALS(as->get_size(), 5);
227 // +1 for *-IsKeyFlag-*
228 TS_ASSERT_EQUALS(as->get_size(), 6);
234229
235230 store->remove_atom(as, ha, true);
236231 store->close();
237232 as->extract_atom(ha, true);
238233 store->open();
239234 store->load_atomspace();
240 tvk = as->get_node(PREDICATE_NODE, "*-TruthValueKey-*");
241 if (tvk) as->extract_atom(tvk);
242 TS_ASSERT_EQUALS(as->get_size(), 2);
235 // +1 for *-IsKeyFlag-*
236 TS_ASSERT_EQUALS(as->get_size(), 3);
243237
244238 // --------------------------------------
245239 // Do it again, but more deeply.
……@@ -253,18 +247,16 @@ void BasicDeleteUTest::test_recursive(void)
253247 store->close();
254248 store->open();
255249 store->load_atomspace();
256 tvk = as->get_node(PREDICATE_NODE, "*-TruthValueKey-*");
257 if (tvk) as->extract_atom(tvk);
258 TS_ASSERT_EQUALS(as->get_size(), 6);
250 // +1 for *-IsKeyFlag-*
251 TS_ASSERT_EQUALS(as->get_size(), 7);
259252
260253 store->remove_atom(as, ha, true);
261254 store->close();
262255 as->extract_atom(ha, true);
263256 store->open();
264257 store->load_atomspace();
265 tvk = as->get_node(PREDICATE_NODE, "*-TruthValueKey-*");
266 if (tvk) as->extract_atom(tvk);
267 TS_ASSERT_EQUALS(as->get_size(), 2);
258 // +1 for *-IsKeyFlag-*
259 TS_ASSERT_EQUALS(as->get_size(), 3);
268260
269261 // --------------------------------------
270262 store->erase();
……@@ -305,8 +297,8 @@ void BasicDeleteUTest::test_key_deletion(void)
305297 store->store_atom(ha);
306298 store->barrier();
307299
308 // Verify the atomspace size
309 TS_ASSERT_EQUALS(as->get_size(), 5);
300 // Verify the atomspace size (+1 for *-IsKeyFlag-*)
301 TS_ASSERT_EQUALS(as->get_size(), 6);
310302
311303 // Verify that there are three keys
312304 HandleSet hs = ha->getKeys();
……@@ -314,12 +306,13 @@ void BasicDeleteUTest::test_key_deletion(void)
314306 printf("key=%s\n", k->get_name().c_str());
315307 TS_ASSERT_EQUALS(hs.size(), 3);
316308
317 // Remove one of the keys
309 // Attempt to remove one of the keys. Should fail.
318310 store->remove_atom(as, kb);
319311 as->extract_atom(kb);
320 TS_ASSERT_EQUALS(as->get_size(), 4);
312 // +1 for *-IsKeyFlag-*
313 TS_ASSERT_EQUALS(as->get_size(), 5);
321314
322 // Verify the key was deleted by loading only PredicateNodes.
315 // Verify the key was NOT deleted by loading only PredicateNodes.
323316 delete as;
324317 as = new AtomSpace();
325318 hsn = as->add_node(ROCKS_STORAGE_NODE, std::string(uri));
……@@ -327,8 +320,8 @@ void BasicDeleteUTest::test_key_deletion(void)
327320 store->open();
328321 store->fetch_all_atoms_of_type(PREDICATE_NODE);
329322
330 // key-b should be gone, key-a and key-c should be present
331 TS_ASSERT(nullptr == as->get_node(PREDICATE_NODE, "key-b"));
323 // All three keys need to still be here.
324 TS_ASSERT(nullptr != as->get_node(PREDICATE_NODE, "key-b"));
332325 TS_ASSERT(nullptr != as->get_node(PREDICATE_NODE, "key-a"));
333326 TS_ASSERT(nullptr != as->get_node(PREDICATE_NODE, "key-c"));
334327
……@@ -342,7 +335,7 @@ void BasicDeleteUTest::test_key_deletion(void)
342335
343336 // -------------------------------------------------------
344337 // Start again, with a fresh connection.
345 // Verify that the delete key is really deleted.
338 // Verify that in-use keys cannot be deleted.
346339
347340 as = new AtomSpace();
348341
……@@ -352,22 +345,22 @@ void BasicDeleteUTest::test_key_deletion(void)
352345 store->open();
353346 TS_ASSERT(store->connected())
354347
355 // We expect 5 keys, including the truth-value key.
348 // We expect 6 atoms (+1 for *-IsKeyFlag-*)
356349 printf("Loading the atomspace ...\n");
357350 store->load_atomspace();
358 TS_ASSERT_EQUALS(as->get_size(), 5);
351 TS_ASSERT_EQUALS(as->get_size(), 6);
359352
360 // Verify that there are only two keys
353 // Verify that there are only three keys
361354 ha = as->add_node(CONCEPT_NODE, "a");
362355 hs = ha->getKeys();
363356 for (const Handle& k : hs)
364357 printf("key=%s\n", k->get_name().c_str());
365 TS_ASSERT_EQUALS(hs.size(), 2);
358 TS_ASSERT_EQUALS(hs.size(), 3);
366359
367 // Verify that none of the keys are key-b
368 kb = as->add_node(PREDICATE_NODE, "key-b");
369 for (const Handle& k : hs)
370 TS_ASSERT(*k != *kb);
360 // All three keys need to still be here.
361 TS_ASSERT(nullptr != as->get_node(PREDICATE_NODE, "key-b"));
362 TS_ASSERT(nullptr != as->get_node(PREDICATE_NODE, "key-a"));
363 TS_ASSERT(nullptr != as->get_node(PREDICATE_NODE, "key-c"));
371364
372365 store->erase();
373366 store->close();
……@@ -406,13 +399,14 @@ void BasicDeleteUTest::test_key_corruption(void)
406399 store->store_atom(hb);
407400 store->barrier();
408401
409 // Verify the atomspace size
410 TS_ASSERT_EQUALS(as->get_size(), 4);
402 // Verify the atomspace size (+1 for *-IsKeyFlag-*)
403 TS_ASSERT_EQUALS(as->get_size(), 5);
411404
412405 // Remove the value
413406 store->remove_atom(as, hx);
414407 as->extract_atom(hx);
415 TS_ASSERT_EQUALS(as->get_size(), 3);
408 // +1 for *-IsKeyFlag-*
409 TS_ASSERT_EQUALS(as->get_size(), 4);
416410
417411 // FYI, we should call store->close() at this point, but we
418412 // don't, because ... most users forget to do this too.
……@@ -434,7 +428,7 @@ void BasicDeleteUTest::test_key_corruption(void)
434428 store->open();
435429 TS_ASSERT(store->connected())
436430
437 // We expect 5 keys, including the truth-value key.
431 // We expect 5 atoms: b, x, key-x, *-IsKeyFlag-*, StorageNode
438432 // That's because the (Concept "x") sitting in the Value
439433 // was never actually deleted; thus it is restored.
440434 printf("Loading the atomspace ...\n");
……@@ -445,10 +439,9 @@ void BasicDeleteUTest::test_key_corruption(void)
445439 for (const Handle& h: hset)
446440 printf("Atomspace contains h=%s\n", h->to_short_string().c_str());
447441
448 Handle tvk(as->get_node(PREDICATE_NODE, "*-TruthValueKey-*"));
449 if (tvk) as->extract_atom(tvk);
450 // Size stays at 4 because (Concept "x") cannot be deleted.
451 TS_ASSERT_EQUALS(as->get_size(), 4);
442 // Size is 6 because (Concept "x") cannot be deleted.
443 // +1 for *-IsKeyFlag-*
444 TS_ASSERT_EQUALS(as->get_size(), 6);
452445
453446 hb = as->add_node(CONCEPT_NODE, "b");
454447 hx = as->add_node(CONCEPT_NODE, "x");
……@@ -461,19 +454,20 @@ void BasicDeleteUTest::test_key_corruption(void)
461454 store->store_atom(hb);
462455 store->barrier();
463456
464 TS_ASSERT_EQUALS(as->get_size(), 6);
457 // +1 for *-IsKeyFlag-*
458 TS_ASSERT_EQUALS(as->get_size(), 8);
465459
466460 // Remove the value .. again
467461 store->remove_atom(as, hx);
468462 as->extract_atom(hx);
469 TS_ASSERT_EQUALS(as->get_size(), 5);
463 // +1 for *-IsKeyFlag-*
464 TS_ASSERT_EQUALS(as->get_size(), 7);
470465 store->close();
471466 store->open();
472467 store->load_atomspace();
473 tvk = as->get_node(PREDICATE_NODE, "*-TruthValueKey-*");
474 if (tvk) as->extract_atom(tvk);
475 // Size stays at 6 because (Concept "x") cannot be deleted.
476 TS_ASSERT_EQUALS(as->get_size(), 6);
468 // Size is 8 because (Concept "x") cannot be deleted.
469 // +1 for *-IsKeyFlag-*
470 TS_ASSERT_EQUALS(as->get_size(), 8);
477471
478472 // We are done.
479473 store->close();
……@@ -491,10 +485,10 @@ void BasicDeleteUTest::test_key_corruption(void)
491485 store->open();
492486 TS_ASSERT(store->connected())
493487
494 // We expect 7 keys, including the truth-value key.
488 // We expect 8 atoms (+1 for *-IsKeyFlag-*)
495489 printf("Loading the atomspace ...\n");
496490 store->load_atomspace();
497 TS_ASSERT_EQUALS(as->get_size(), 7);
491 TS_ASSERT_EQUALS(as->get_size(), 8);
498492
499493 // Verify that there are two keys
500494 hb = as->add_node(CONCEPT_NODE, "b");