diff options
author | James Prestwood <prestwoj@gmail.com> | 2022-07-22 13:27:47 -0700 |
---|---|---|
committer | Denis Kenzior <denkenz@gmail.com> | 2022-07-22 16:09:01 -0500 |
commit | b31079f829638c2e9128ed80729f9a3ca42e3319 (patch) | |
tree | b1001b5616dcc478ed4f5d6fdc532dd4e8b04c27 | |
parent | cad32b1fde3b5e6121a3aeb52b5060a0a6c5252b (diff) |
unit: add unit test for l_uintset_subtract
-rw-r--r-- | unit/test-uintset.c | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/unit/test-uintset.c b/unit/test-uintset.c index 6e3767b9..a097f0bd 100644 --- a/unit/test-uintset.c +++ b/unit/test-uintset.c @@ -388,6 +388,59 @@ static void test_uintset_size(const void *user_data) l_uintset_free(set); } +static void test_uintset_subtract(const void *data) +{ + struct l_uintset *set_a = l_uintset_new_from_range(0, 10); + struct l_uintset *set_b = l_uintset_new_from_range(1, 11); + struct l_uintset *sub; + + /* Some sanity checks */ + assert(l_uintset_subtract(NULL, NULL) == NULL); + assert(l_uintset_subtract(set_a, set_b) == NULL); + + l_uintset_free(set_a); + l_uintset_free(set_b); + + set_a = l_uintset_new_from_range(0, 128); + set_b = l_uintset_new_from_range(0, 128); + + /* (<empty>) - (<empty>) = (<empty>) */ + sub = l_uintset_subtract(set_a, set_b); + assert(l_uintset_isempty(sub)); + l_uintset_free(sub); + + /* Sanity check this works across word boundaries */ + l_uintset_put(set_b, 65); + l_uintset_put(set_b, 64); + l_uintset_put(set_b, 63); + + /* (<empty>) - (65, 64, 63) = (<empty>) */ + sub = l_uintset_subtract(set_a, set_b); + assert(!l_uintset_contains(sub, 64)); + l_uintset_free(sub); + + l_uintset_put(set_a, 64); + + /* (64) - (65, 64, 63) = (<empty>) */ + sub = l_uintset_subtract(set_a, set_b); + assert(!l_uintset_contains(sub, 64)); + l_uintset_free(sub); + + l_uintset_take(set_b, 64); + + /* (64) - (65, 63) = (64) */ + sub = l_uintset_subtract(set_a, set_b); + assert(l_uintset_contains(sub, 64)); + l_uintset_free(sub); + + /* (65, 63) - (64) = (65, 63) */ + sub = l_uintset_subtract(set_b, set_a); + assert(l_uintset_contains(sub, 65)); + assert(!l_uintset_contains(sub, 64)); + assert(l_uintset_contains(sub, 63)); + l_uintset_free(sub); +} + int main(int argc, char *argv[]) { l_test_init(&argc, &argv); @@ -407,6 +460,7 @@ int main(int argc, char *argv[]) &intersect_data_2); l_test_add("l_uintset isempty", test_uintset_isempty, NULL); l_test_add("l_uintset size", test_uintset_size, NULL); + l_test_add("l_uintset_subtract", test_uintset_subtract, NULL); return l_test_run(); } |