(self)
| 585 | |
| 586 | @support.requires_resource('cpu') |
| 587 | def test_hamt_stress(self): |
| 588 | COLLECTION_SIZE = 7000 |
| 589 | TEST_ITERS_EVERY = 647 |
| 590 | CRASH_HASH_EVERY = 97 |
| 591 | CRASH_EQ_EVERY = 11 |
| 592 | RUN_XTIMES = 3 |
| 593 | |
| 594 | for _ in range(RUN_XTIMES): |
| 595 | h = hamt() |
| 596 | d = dict() |
| 597 | |
| 598 | for i in range(COLLECTION_SIZE): |
| 599 | key = KeyStr(i) |
| 600 | |
| 601 | if not (i % CRASH_HASH_EVERY): |
| 602 | with HaskKeyCrasher(error_on_hash=True): |
| 603 | with self.assertRaises(HashingError): |
| 604 | h.set(key, i) |
| 605 | |
| 606 | h = h.set(key, i) |
| 607 | |
| 608 | if not (i % CRASH_EQ_EVERY): |
| 609 | with HaskKeyCrasher(error_on_eq=True): |
| 610 | with self.assertRaises(EqError): |
| 611 | h.get(KeyStr(i)) # really trigger __eq__ |
| 612 | |
| 613 | d[key] = i |
| 614 | self.assertEqual(len(d), len(h)) |
| 615 | |
| 616 | if not (i % TEST_ITERS_EVERY): |
| 617 | self.assertEqual(set(h.items()), set(d.items())) |
| 618 | self.assertEqual(len(h.items()), len(d.items())) |
| 619 | |
| 620 | self.assertEqual(len(h), COLLECTION_SIZE) |
| 621 | |
| 622 | for key in range(COLLECTION_SIZE): |
| 623 | self.assertEqual(h.get(KeyStr(key), 'not found'), key) |
| 624 | |
| 625 | keys_to_delete = list(range(COLLECTION_SIZE)) |
| 626 | random.shuffle(keys_to_delete) |
| 627 | for iter_i, i in enumerate(keys_to_delete): |
| 628 | key = KeyStr(i) |
| 629 | |
| 630 | if not (iter_i % CRASH_HASH_EVERY): |
| 631 | with HaskKeyCrasher(error_on_hash=True): |
| 632 | with self.assertRaises(HashingError): |
| 633 | h.delete(key) |
| 634 | |
| 635 | if not (iter_i % CRASH_EQ_EVERY): |
| 636 | with HaskKeyCrasher(error_on_eq=True): |
| 637 | with self.assertRaises(EqError): |
| 638 | h.delete(KeyStr(i)) |
| 639 | |
| 640 | h = h.delete(key) |
| 641 | self.assertEqual(h.get(key, 'not found'), 'not found') |
| 642 | del d[key] |
| 643 | self.assertEqual(len(d), len(h)) |
| 644 |
nothing calls this directly
no test coverage detected