diff --git a/src/cmc/treemap.h b/src/cmc/treemap.h index 0ce0bff..08bd869 100644 --- a/src/cmc/treemap.h +++ b/src/cmc/treemap.h @@ -415,7 +415,10 @@ static const char *cmc_string_fmt_treemap = "struct %s<%s, %s> " else if (_map_->f_key->cmp(scan->key, key) < 0) \ scan = scan->right; \ else \ + { \ + _map_->flag = cmc_flags.DUPLICATE; \ return false; \ + } \ } \ \ struct SNAME##_node *node; \ diff --git a/src/cmc/treeset.h b/src/cmc/treeset.h index a9ac785..796a050 100644 --- a/src/cmc/treeset.h +++ b/src/cmc/treeset.h @@ -397,7 +397,10 @@ static const char *cmc_string_fmt_treeset = "struct %s<%s> " else if (_set_->f_val->cmp(scan->value, element) < 0) \ scan = scan->right; \ else \ + { \ + _set_->flag = cmc_flags.DUPLICATE; \ return false; \ + } \ } \ \ struct SNAME##_node *node; \ diff --git a/tests/main/src/treemap.c b/tests/main/src/treemap.c index c7e6c3d..6034d58 100644 --- a/tests/main/src/treemap.c +++ b/tests/main/src/treemap.c @@ -237,7 +237,10 @@ _Bool tm_insert(struct treemap *_map_, size_t key, size_t value) else if (_map_->f_key->cmp(scan->key, key) < 0) scan = scan->right; else + { + _map_->flag = cmc_flags.DUPLICATE; return 0; + } } struct treemap_node *node; if (_map_->f_key->cmp(parent->key, key) > 0) diff --git a/tests/main/src/treeset.c b/tests/main/src/treeset.c index 8aa44f9..b21489c 100644 --- a/tests/main/src/treeset.c +++ b/tests/main/src/treeset.c @@ -229,7 +229,10 @@ _Bool ts_insert(struct treeset *_set_, size_t element) else if (_set_->f_val->cmp(scan->value, element) < 0) scan = scan->right; else + { + _set_->flag = cmc_flags.DUPLICATE; return 0; + } } struct treeset_node *node; if (_set_->f_val->cmp(parent->value, element) > 0) diff --git a/tests/main/unt/treemap.c b/tests/main/unt/treemap.c index 519c955..313872d 100644 --- a/tests/main/unt/treemap.c +++ b/tests/main/unt/treemap.c @@ -64,6 +64,9 @@ CMC_CREATE_UNIT(treemap_test, true, { cmc_assert(tm_insert(map, 1, 1)); cmc_assert_equals(int32_t, cmc_flags.OK, tm_flag(map)); + cmc_assert(!tm_insert(map, 1, 2)); + cmc_assert_equals(int32_t, cmc_flags.DUPLICATE, tm_flag(map)); + // update cmc_assert(!tm_update(map, 2, 2, NULL)); cmc_assert_equals(int32_t, cmc_flags.NOT_FOUND, tm_flag(map)); diff --git a/tests/main/unt/treeset.c b/tests/main/unt/treeset.c index 62a61ff..93a98ed 100644 --- a/tests/main/unt/treeset.c +++ b/tests/main/unt/treeset.c @@ -56,6 +56,9 @@ CMC_CREATE_UNIT(treeset_test, true, { cmc_assert(ts_insert(set, 1)); cmc_assert_equals(int32_t, cmc_flags.OK, ts_flag(set)); + cmc_assert(!ts_insert(set, 1)); + cmc_assert_equals(int32_t, cmc_flags.DUPLICATE, ts_flag(set)); + // remove cmc_assert(!ts_remove(set, 2)); cmc_assert_equals(int32_t, cmc_flags.NOT_FOUND, ts_flag(set));