| 621 cxMapClear(dst); |
623 cxMapClear(dst); |
| 622 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); |
624 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); |
| 623 } |
625 } |
| 624 cxMapFree(dst); |
626 cxMapFree(dst); |
| 625 cxMapFree(src); |
627 cxMapFree(src); |
| |
628 cx_testing_allocator_destroy(&talloc); |
| |
629 } |
| |
630 |
| |
631 CX_TEST(test_hash_map_difference) { |
| |
632 CxMap *dst = cxHashMapCreateSimple(sizeof(int)); |
| |
633 |
| |
634 CxMap *s1 = cxHashMapCreateSimple(CX_STORE_POINTERS); |
| |
635 CxMap *s2 = cxHashMapCreateSimple(CX_STORE_POINTERS); |
| |
636 const char *s1_keys[] = {"k1", "k2", "k3"}; |
| |
637 int s1_values[] = {1, 3, 4}; |
| |
638 const char *s2_keys[] = {"k4", "k2", "k5"}; |
| |
639 int s2_values[] = {7, 9, 15}; |
| |
640 for (unsigned int i = 0 ; i < 3 ; i++) { |
| |
641 cxMapPut(s1, s1_keys[i], &s1_values[i]); |
| |
642 cxMapPut(s2, s2_keys[i], &s2_values[i]); |
| |
643 } |
| |
644 CX_TEST_DO { |
| |
645 int c = 4; |
| |
646 test_hash_map_clone_func_max_clones = 100; // no limit |
| |
647 CX_TEST_ASSERT(0 == cxMapDifference(dst, s1, s2, test_hash_map_clone_func, NULL, &c)); |
| |
648 CX_TEST_ASSERT(cxMapSize(dst) == 2); |
| |
649 CX_TEST_ASSERT(*((int*)cxMapGet(dst, "k1")) == 5); |
| |
650 CX_TEST_ASSERT(cxMapGet(dst, "k2") == NULL); |
| |
651 CX_TEST_ASSERT(*((int*)cxMapGet(dst, "k3")) == 8); |
| |
652 } |
| |
653 cxMapFree(dst); |
| |
654 cxMapFree(s1); |
| |
655 cxMapFree(s2); |
| |
656 } |
| |
657 |
| |
658 CX_TEST(test_hash_map_list_difference) { |
| |
659 CxMap *dst = cxHashMapCreateSimple(sizeof(int)); |
| |
660 CxMap *src = cxHashMapCreateSimple(sizeof(int)); |
| |
661 CxList *keys = cxArrayListCreate(NULL, cx_hash_key_cmp, sizeof(CxHashKey), 4); |
| |
662 |
| |
663 const char *src_keys[] = {"k1", "k2", "k3"}; |
| |
664 int src_values[] = {1, 3, 4}; |
| |
665 for (unsigned int i = 0 ; i < 3 ; i++) { |
| |
666 cxMapPut(src, src_keys[i], &src_values[i]); |
| |
667 } |
| |
668 const char *k[] = {"k4", "k2", "k5"}; |
| |
669 for (unsigned int i = 0 ; i < 3 ; i++) { |
| |
670 CxHashKey key = CX_HASH_KEY(k[i]); |
| |
671 cxListAdd(keys, &key); |
| |
672 } |
| |
673 CX_TEST_DO { |
| |
674 int c = 4; |
| |
675 test_hash_map_clone_func_max_clones = 100; // no limit |
| |
676 CX_TEST_ASSERT(0 == cxMapListDifference(dst, src, keys, test_hash_map_clone_func, NULL, &c)); |
| |
677 CX_TEST_ASSERT(cxMapSize(dst) == 2); |
| |
678 CX_TEST_ASSERT(*((int*)cxMapGet(dst, "k1")) == 5); |
| |
679 CX_TEST_ASSERT(cxMapGet(dst, "k2") == NULL); |
| |
680 CX_TEST_ASSERT(*((int*)cxMapGet(dst, "k3")) == 8); |
| |
681 } |
| |
682 cxMapFree(dst); |
| |
683 cxMapFree(src); |
| |
684 cxListFree(keys); |
| |
685 } |
| |
686 |
| |
687 CX_TEST(test_hash_map_difference_ptr) { |
| |
688 CxTestingAllocator talloc; |
| |
689 cx_testing_allocator_init(&talloc); |
| |
690 CxAllocator *allocator = &talloc.base; |
| |
691 CxMap *dst = cxHashMapCreateSimple(CX_STORE_POINTERS); |
| |
692 cxDefineAdvancedDestructor(dst, cxFree, allocator); |
| |
693 |
| |
694 CxMap *s1 = cxHashMapCreateSimple(CX_STORE_POINTERS); |
| |
695 CxMap *s2 = cxHashMapCreateSimple(CX_STORE_POINTERS); |
| |
696 const char *s1_keys[] = {"k1", "k2", "k3"}; |
| |
697 int s1_values[] = {1, 3, 4}; |
| |
698 const char *s2_keys[] = {"k4", "k2", "k5"}; |
| |
699 int s2_values[] = {7, 9, 15}; |
| |
700 for (unsigned int i = 0 ; i < 3 ; i++) { |
| |
701 cxMapPut(s1, s1_keys[i], &s1_values[i]); |
| |
702 cxMapPut(s2, s2_keys[i], &s2_values[i]); |
| |
703 } |
| |
704 CX_TEST_DO { |
| |
705 int c = 4; |
| |
706 test_hash_map_clone_func_max_clones = 100; // no limit |
| |
707 CX_TEST_ASSERT(0 == cxMapDifference(dst, s1, s2, test_hash_map_clone_func, allocator, &c)); |
| |
708 CX_TEST_ASSERT(cxMapSize(dst) == 2); |
| |
709 CX_TEST_ASSERT(*((int*)cxMapGet(dst, "k1")) == 5); |
| |
710 CX_TEST_ASSERT(cxMapGet(dst, "k2") == NULL); |
| |
711 CX_TEST_ASSERT(*((int*)cxMapGet(dst, "k3")) == 8); |
| |
712 |
| |
713 cxMapClear(dst); |
| |
714 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); |
| |
715 } |
| |
716 cxMapFree(dst); |
| |
717 cxMapFree(s1); |
| |
718 cxMapFree(s2); |
| 626 cx_testing_allocator_destroy(&talloc); |
719 cx_testing_allocator_destroy(&talloc); |
| 627 } |
720 } |
| 628 |
721 |
| 629 CX_TEST(test_empty_map_size) { |
722 CX_TEST(test_empty_map_size) { |
| 630 CX_TEST_DO { |
723 CX_TEST_DO { |
| 972 cx_test_register(suite, test_hash_map_simple_destructor_pointers); |
1065 cx_test_register(suite, test_hash_map_simple_destructor_pointers); |
| 973 cx_test_register(suite, test_hash_map_advanced_destructor_pointers); |
1066 cx_test_register(suite, test_hash_map_advanced_destructor_pointers); |
| 974 cx_test_register(suite, test_hash_map_clone); |
1067 cx_test_register(suite, test_hash_map_clone); |
| 975 cx_test_register(suite, test_hash_map_clone_alloc_fail); |
1068 cx_test_register(suite, test_hash_map_clone_alloc_fail); |
| 976 cx_test_register(suite, test_hash_map_clone_ptr); |
1069 cx_test_register(suite, test_hash_map_clone_ptr); |
| |
1070 cx_test_register(suite, test_hash_map_difference); |
| |
1071 cx_test_register(suite, test_hash_map_difference_ptr); |
| |
1072 cx_test_register(suite, test_hash_map_list_difference); |
| 977 cx_test_register(suite, test_empty_map_no_ops); |
1073 cx_test_register(suite, test_empty_map_no_ops); |
| 978 cx_test_register(suite, test_empty_map_size); |
1074 cx_test_register(suite, test_empty_map_size); |
| 979 cx_test_register(suite, test_empty_map_get); |
1075 cx_test_register(suite, test_empty_map_get); |
| 980 cx_test_register(suite, test_empty_map_iterator); |
1076 cx_test_register(suite, test_empty_map_iterator); |
| 981 cx_test_register(suite, test_null_map_iterator); |
1077 cx_test_register(suite, test_null_map_iterator); |