[PATCH 2/2] unit: add unit test for l_uintset_subtract

James Prestwood <[email protected]>
Newsgroups dev.linux.lists.ell
Message-ID <[email protected]>
---
 unit/test-uintset.c | 54 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 54 insertions(+)

diff --git a/unit/test-uintset.c b/unit/test-uintset.c
index 6e3767b..a097f0b 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();
 }
-- 
2.34.1
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.