| … | … | @@ -133,6 +133,14 @@ void SimpleBasicDeleteUTest::test_duplicates(void) |
| 133 | 133 | // in it, this can cause trouble, depending on how the |
| 134 | 134 | // incoming set is managed. |
| 135 | 135 | store->remove_atom(as, li); |
| 136 | TS_ASSERT_EQUALS(as->get_size(), 4); |
| 137 | store->close(); |
| 138 | as->extract_atom(li); |
| 139 | TS_ASSERT_EQUALS(as->get_size(), 3); |
| 140 | store->open(); |
| 141 | store->load_atomspace(); |
| 142 | Handle tvk(as->get_node(PREDICATE_NODE, "*-TruthValueKey-*")); |
| 143 | if (tvk) as->extract_atom(tvk); |
| 136 | 144 | TS_ASSERT_EQUALS(as->get_size(), 3); |
| 137 | 145 | |
| 138 | 146 | store->erase(); |
| … | … | @@ -186,6 +194,12 @@ void SimpleBasicDeleteUTest::test_recursive(void) |
| 186 | 194 | for (const Handle& h : hset) |
| 187 | 195 | printf("Post delete: %s\n", h->to_short_string().c_str()); |
| 188 | 196 | |
| 197 | store->close(); |
| 198 | as->extract_atom(ha, true); |
| 199 | store->open(); |
| 200 | store->load_atomspace(); |
| 201 | Handle tvk(as->get_node(PREDICATE_NODE, "*-TruthValueKey-*")); |
| 202 | if (tvk) as->extract_atom(tvk); |
| 189 | 203 | TS_ASSERT_EQUALS(as->get_size(), 2); |
| 190 | 204 | |
| 191 | 205 | // -------------------------------------- |
| … | … | @@ -196,9 +210,20 @@ void SimpleBasicDeleteUTest::test_recursive(void) |
| 196 | 210 | |
| 197 | 211 | store->store_atom(lj); |
| 198 | 212 | store->barrier(); |
| 213 | store->close(); |
| 214 | store->open(); |
| 215 | store->load_atomspace(); |
| 216 | tvk = as->get_node(PREDICATE_NODE, "*-TruthValueKey-*"); |
| 217 | if (tvk) as->extract_atom(tvk); |
| 199 | 218 | TS_ASSERT_EQUALS(as->get_size(), 5); |
| 200 | 219 | |
| 201 | 220 | store->remove_atom(as, ha, true); |
| 221 | store->close(); |
| 222 | as->extract_atom(ha, true); |
| 223 | store->open(); |
| 224 | store->load_atomspace(); |
| 225 | tvk = as->get_node(PREDICATE_NODE, "*-TruthValueKey-*"); |
| 226 | if (tvk) as->extract_atom(tvk); |
| 202 | 227 | TS_ASSERT_EQUALS(as->get_size(), 2); |
| 203 | 228 | |
| 204 | 229 | // -------------------------------------- |
| … | … | @@ -209,9 +234,20 @@ void SimpleBasicDeleteUTest::test_recursive(void) |
| 209 | 234 | |
| 210 | 235 | store->store_atom(lj); |
| 211 | 236 | store->barrier(); |
| 237 | store->close(); |
| 238 | store->open(); |
| 239 | store->load_atomspace(); |
| 240 | tvk = as->get_node(PREDICATE_NODE, "*-TruthValueKey-*"); |
| 241 | if (tvk) as->extract_atom(tvk); |
| 212 | 242 | TS_ASSERT_EQUALS(as->get_size(), 5); |
| 213 | 243 | |
| 214 | 244 | store->remove_atom(as, ha, true); |
| 245 | store->close(); |
| 246 | as->extract_atom(ha, true); |
| 247 | store->open(); |
| 248 | store->load_atomspace(); |
| 249 | tvk = as->get_node(PREDICATE_NODE, "*-TruthValueKey-*"); |
| 250 | if (tvk) as->extract_atom(tvk); |
| 215 | 251 | TS_ASSERT_EQUALS(as->get_size(), 2); |
| 216 | 252 | |
| 217 | 253 | // -------------------------------------- |
| … | … | @@ -223,9 +259,20 @@ void SimpleBasicDeleteUTest::test_recursive(void) |
| 223 | 259 | |
| 224 | 260 | store->store_atom(lk); |
| 225 | 261 | store->barrier(); |
| 262 | store->close(); |
| 263 | store->open(); |
| 264 | store->load_atomspace(); |
| 265 | tvk = as->get_node(PREDICATE_NODE, "*-TruthValueKey-*"); |
| 266 | if (tvk) as->extract_atom(tvk); |
| 226 | 267 | TS_ASSERT_EQUALS(as->get_size(), 6); |
| 227 | 268 | |
| 228 | 269 | store->remove_atom(as, ha, true); |
| 270 | store->close(); |
| 271 | as->extract_atom(ha, true); |
| 272 | store->open(); |
| 273 | store->load_atomspace(); |
| 274 | tvk = as->get_node(PREDICATE_NODE, "*-TruthValueKey-*"); |
| 275 | if (tvk) as->extract_atom(tvk); |
| 229 | 276 | TS_ASSERT_EQUALS(as->get_size(), 2); |
| 230 | 277 | |
| 231 | 278 | // -------------------------------------- |
| … | … | @@ -277,7 +324,18 @@ void SimpleBasicDeleteUTest::test_key_deletion(void) |
| 277 | 324 | |
| 278 | 325 | // Remove one of the keys |
| 279 | 326 | store->remove_atom(as, kb); |
| 280 | | TS_ASSERT_EQUALS(as->get_size(), 4); |
| 327 | |
| 328 | // Verify the key was deleted by loading only PredicateNodes. |
| 329 | as = createAtomSpace(); |
| 330 | hsn = as->add_node(COG_SIMPLE_STORAGE_NODE, std::string(uri)); |
| 331 | store = StorageNodeCast(hsn); |
| 332 | store->open(); |
| 333 | store->fetch_all_atoms_of_type(PREDICATE_NODE); |
| 334 | |
| 335 | // key-b should be gone, key-a and key-c should be present |
| 336 | TS_ASSERT(nullptr == as->get_node(PREDICATE_NODE, "key-b")); |
| 337 | TS_ASSERT(nullptr != as->get_node(PREDICATE_NODE, "key-a")); |
| 338 | TS_ASSERT(nullptr != as->get_node(PREDICATE_NODE, "key-c")); |
| 281 | 339 | |
| 282 | 340 | // FYI, we should call store->close() at this point, but we |
| 283 | 341 | // don't, because ... most users forget to do this too. |
| … | … | @@ -359,6 +417,7 @@ void SimpleBasicDeleteUTest::test_key_corruption(void) |
| 359 | 417 | |
| 360 | 418 | // Remove the value |
| 361 | 419 | store->remove_atom(as, hx); |
| 420 | as->extract_atom(hx); |
| 362 | 421 | TS_ASSERT_EQUALS(as->get_size(), 3); |
| 363 | 422 | |
| 364 | 423 | // FYI, we should call store->close() at this point, but we |
| … | … | @@ -388,6 +447,10 @@ void SimpleBasicDeleteUTest::test_key_corruption(void) |
| 388 | 447 | as->get_root_set_by_type(hset, ATOM, true); |
| 389 | 448 | for (const Handle& h: hset) |
| 390 | 449 | printf("Atomspace contains h=%s\n", h->to_short_string().c_str()); |
| 450 | |
| 451 | Handle tvk(as->get_node(PREDICATE_NODE, "*-TruthValueKey-*")); |
| 452 | if (tvk) as->extract_atom(tvk); |
| 453 | // Size stays at 4 because (Concept "x") cannot be deleted. |
| 391 | 454 | TS_ASSERT_EQUALS(as->get_size(), 4); |
| 392 | 455 | |
| 393 | 456 | hb = as->add_node(CONCEPT_NODE, "b"); |
| … | … | @@ -403,9 +466,16 @@ void SimpleBasicDeleteUTest::test_key_corruption(void) |
| 403 | 466 | |
| 404 | 467 | TS_ASSERT_EQUALS(as->get_size(), 6); |
| 405 | 468 | |
| 406 | | // Remove the value .. again |
| 469 | // Remove the value .. again. It won't actually be deleted because |
| 470 | // (Concept "x") is still referenced in a Value on (Concept "b"). |
| 407 | 471 | store->remove_atom(as, hx); |
| 408 | | TS_ASSERT_EQUALS(as->get_size(), 5); |
| 472 | store->close(); |
| 473 | store->open(); |
| 474 | store->load_atomspace(); |
| 475 | tvk = as->get_node(PREDICATE_NODE, "*-TruthValueKey-*"); |
| 476 | if (tvk) as->extract_atom(tvk); |
| 477 | // Size stays at 6 because (Concept "x") cannot be deleted. |
| 478 | TS_ASSERT_EQUALS(as->get_size(), 6); |
| 409 | 479 | |
| 410 | 480 | // We are done. |
| 411 | 481 | store->close(); |