tests/test_hash_map.c

changeset 1439
8e7fe85febc0
parent 1429
6e0c3a8a914a
equal deleted inserted replaced
1438:2ca9e03ceeec 1439:8e7fe85febc0
493 CxMap *map = cxHashMapCreate(allocator, CX_STORE_POINTERS, 0); 493 CxMap *map = cxHashMapCreate(allocator, CX_STORE_POINTERS, 0);
494 map->collection.advanced_destructor = test_advanced_destructor; 494 map->collection.advanced_destructor = test_advanced_destructor;
495 CX_TEST_CALL_SUBROUTINE(verify_any_destructor, map); 495 CX_TEST_CALL_SUBROUTINE(verify_any_destructor, map);
496 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); 496 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
497 } 497 }
498 cx_testing_allocator_destroy(&talloc);
499 }
500
501 static void *test_hash_map_clone_func(void *dst, const void *src,
502 const CxAllocator *al, void *data) {
503 if (dst == NULL) {
504 dst = cxMalloc(al, sizeof(int));
505 }
506 *((int*)dst) = *((int*)src) + *((int*)data);
507 return dst;
508 }
509
510 CX_TEST(test_hash_map_clone) {
511 CxMap *dst = cxHashMapCreateSimple(sizeof(int));
512 CxMap *src = cxHashMapCreateSimple(sizeof(int));
513 const char *exist_keys[] = {"k1", "k2", "k3"};
514 int exists[] = {1, 3, 4};
515 const char *source_keys[] = {"k4", "k2", "k5"};
516 int source[] = {7, 9, 15};
517 for (unsigned int i = 0 ; i < 3 ; i++) {
518 cxMapPut(dst, exist_keys[i], &exists[i]);
519 cxMapPut(src, source_keys[i], &source[i]);
520 }
521 CX_TEST_DO {
522 int c = 4;
523 size_t cloned = cxMapClone(dst, src, test_hash_map_clone_func, NULL, &c);
524 CX_TEST_ASSERT(cloned == 3);
525 CX_TEST_ASSERT(cxMapSize(dst) == 5);
526 CX_TEST_ASSERT(*((int*)cxMapGet(dst, "k1")) == 1);
527 CX_TEST_ASSERT(*((int*)cxMapGet(dst, "k2")) == 13);
528 CX_TEST_ASSERT(*((int*)cxMapGet(dst, "k3")) == 4);
529 CX_TEST_ASSERT(*((int*)cxMapGet(dst, "k4")) == 11);
530 CX_TEST_ASSERT(*((int*)cxMapGet(dst, "k5")) == 19);
531 CX_TEST_ASSERT(cxMapSize(src) == 3);
532 CX_TEST_ASSERT(*((int*)cxMapGet(src, "k4")) == 7);
533 CX_TEST_ASSERT(*((int*)cxMapGet(src, "k2")) == 9);
534 CX_TEST_ASSERT(*((int*)cxMapGet(src, "k5")) == 15);
535 }
536 cxMapFree(dst);
537 cxMapFree(src);
538 }
539
540 CX_TEST(test_hash_map_clone_ptr) {
541 CxTestingAllocator talloc;
542 cx_testing_allocator_init(&talloc);
543 CxAllocator *allocator = &talloc.base;
544 CxMap *dst = cxHashMapCreateSimple(CX_STORE_POINTERS);
545 cxDefineAdvancedDestructor(dst, cxFree, allocator);
546 CxMap *src = cxHashMapCreateSimple(CX_STORE_POINTERS);
547 const char *exist_keys[] = {"k1", "k2", "k3"};
548 int exists[] = {1, 3, 4};
549 const char *source_keys[] = {"k4", "k2", "k5"};
550 int source[] = {7, 9, 15};
551 for (unsigned int i = 0 ; i < 3 ; i++) {
552 int *y = cxMalloc(allocator, sizeof(int));
553 *y = exists[i];
554 cxMapPut(dst, exist_keys[i], y);
555 cxMapPut(src, source_keys[i], &source[i]);
556 }
557 CX_TEST_DO {
558 int c = 4;
559 size_t cloned = cxMapClone(dst, src, test_hash_map_clone_func, allocator, &c);
560 CX_TEST_ASSERT(cloned == 3);
561 CX_TEST_ASSERT(cxMapSize(dst) == 5);
562 CX_TEST_ASSERT(*((int*)cxMapGet(dst, "k1")) == 1);
563 CX_TEST_ASSERT(*((int*)cxMapGet(dst, "k2")) == 13);
564 CX_TEST_ASSERT(*((int*)cxMapGet(dst, "k3")) == 4);
565 CX_TEST_ASSERT(*((int*)cxMapGet(dst, "k4")) == 11);
566 CX_TEST_ASSERT(*((int*)cxMapGet(dst, "k5")) == 19);
567 CX_TEST_ASSERT(cxMapSize(src) == 3);
568 CX_TEST_ASSERT(*((int*)cxMapGet(src, "k4")) == 7);
569 CX_TEST_ASSERT(*((int*)cxMapGet(src, "k2")) == 9);
570 CX_TEST_ASSERT(*((int*)cxMapGet(src, "k5")) == 15);
571
572 cxMapClear(dst);
573 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
574 }
575 cxMapFree(dst);
576 cxMapFree(src);
498 cx_testing_allocator_destroy(&talloc); 577 cx_testing_allocator_destroy(&talloc);
499 } 578 }
500 579
501 CX_TEST(test_empty_map_size) { 580 CX_TEST(test_empty_map_size) {
502 CX_TEST_DO { 581 CX_TEST_DO {
840 cx_test_register(suite, test_hash_map_remove_via_iterator); 919 cx_test_register(suite, test_hash_map_remove_via_iterator);
841 cx_test_register(suite, test_hash_map_simple_destructor_objects); 920 cx_test_register(suite, test_hash_map_simple_destructor_objects);
842 cx_test_register(suite, test_hash_map_advanced_destructor_objects); 921 cx_test_register(suite, test_hash_map_advanced_destructor_objects);
843 cx_test_register(suite, test_hash_map_simple_destructor_pointers); 922 cx_test_register(suite, test_hash_map_simple_destructor_pointers);
844 cx_test_register(suite, test_hash_map_advanced_destructor_pointers); 923 cx_test_register(suite, test_hash_map_advanced_destructor_pointers);
924 cx_test_register(suite, test_hash_map_clone);
925 cx_test_register(suite, test_hash_map_clone_ptr);
845 cx_test_register(suite, test_empty_map_no_ops); 926 cx_test_register(suite, test_empty_map_no_ops);
846 cx_test_register(suite, test_empty_map_size); 927 cx_test_register(suite, test_empty_map_size);
847 cx_test_register(suite, test_empty_map_get); 928 cx_test_register(suite, test_empty_map_get);
848 cx_test_register(suite, test_empty_map_iterator); 929 cx_test_register(suite, test_empty_map_iterator);
849 cx_test_register(suite, test_null_map_iterator); 930 cx_test_register(suite, test_null_map_iterator);

mercurial