123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217 |
- #include "test.h"
- int test_keyset_stack()
- {
- LSUP_Keyset ks_s;
- LSUP_Keyset *ks = &ks_s;
- LSUP_keyset_init(ks, 10, .5);
- EXPECT_INT_EQ(ks->capacity, 10);
- LSUP_keyset_done(ks);
- return 0;
- }
- int test_keyset_heap()
- {
- LSUP_Keyset *ks = LSUP_keyset_new(10, .5);
- EXPECT_INT_EQ(ks->capacity, 10);
- LSUP_keyset_free(ks);
- return 0;
- }
- int test_keyset_add_remove()
- {
- LSUP_Keyset *ks = LSUP_keyset_new(10, .5);
- LSUP_TripleKey k1 = {1,1,1};
- LSUP_TripleKey k2 = {1,1,2};
- LSUP_TripleKey k3 = {1,1,3};
- LSUP_TripleKey k4 = {1,2,1};
- LSUP_TripleKey k5 = {1,2,1}; // Duplicate
- LSUP_keyset_add(ks, &k1, LSUP_KS_CHECK_DUP);
- LSUP_keyset_add(ks, &k2, LSUP_KS_CHECK_DUP);
- LSUP_keyset_add(ks, &k3, LSUP_KS_CHECK_DUP);
- LSUP_keyset_add(ks, &k4, LSUP_KS_CHECK_DUP);
- LSUP_keyset_add(ks, &k5, LSUP_KS_CHECK_DUP);
- EXPECT_INT_EQ(LSUP_keyset_size(ks), 4);
- EXPECT_INT_EQ(LSUP_keyset_tell(ks), 3);
- EXPECT_INT_EQ(LSUP_keyset_seek(ks, 1), true);
- ASSERT(
- memcmp(LSUP_keyset_peek(ks), &k2, sizeof(LSUP_TripleKey)) == 0,
- "Key not corresponding to index!");
- LSUP_TripleKey k6 = {1,1,2};
- LSUP_keyset_remove(ks, &k6);
- ASSERT(!LSUP_keyset_contains(ks, &k6), "Triple not removed!");
- ASSERT(!LSUP_keyset_contains(ks, &k2), "Triple not removed!");
- EXPECT_INT_EQ(ks->free_i, 4);
- LSUP_Keyset *ks2 = malloc(sizeof(LSUP_Keyset));
- LSUP_keyset_sparse_copy(ks, ks2);
- EXPECT_INT_EQ(ks2->free_i, 3);
- LSUP_keyset_free(ks);
- LSUP_keyset_free(ks2);
- return 0;
- }
- int test_keyset_lookup()
- {
- LSUP_Keyset *ks = LSUP_keyset_new(10, .5);
- LSUP_Keyset res_s;
- LSUP_Keyset *res = &res_s;
- LSUP_TripleKey k1 = {1,1,1};
- LSUP_TripleKey k2 = {1,1,2};
- LSUP_TripleKey k3 = {1,2,1};
- LSUP_TripleKey k4 = {2,1,3};
- LSUP_keyset_add(ks, &k1, 0);
- LSUP_keyset_add(ks, &k2, 0);
- LSUP_keyset_add(ks, &k3, 0);
- LSUP_keyset_add(ks, &k4, 0);
- LSUP_keyset_lookup(ks, res, 1, 1, 1);
- EXPECT_INT_EQ(LSUP_keyset_size(res), 1);
- LSUP_keyset_done(res);
- LSUP_keyset_lookup(ks, res, 1, 1, 0);
- EXPECT_INT_EQ(LSUP_keyset_size(res), 2);
- LSUP_keyset_done(res);
- LSUP_keyset_lookup(ks, res, 1, 2, 0);
- EXPECT_INT_EQ(LSUP_keyset_size(res), 1);
- LSUP_keyset_done(res);
- LSUP_keyset_lookup(ks, res, 1, 0, 0);
- EXPECT_INT_EQ(LSUP_keyset_size(res), 3);
- LSUP_keyset_done(res);
- LSUP_keyset_lookup(ks, res, 0, 1, 0);
- EXPECT_INT_EQ(LSUP_keyset_size(res), 3);
- LSUP_keyset_done(res);
- LSUP_keyset_lookup(ks, res, 0, 0, 0);
- EXPECT_INT_EQ(LSUP_keyset_size(res), 4);
- LSUP_keyset_done(res);
- LSUP_keyset_free(ks);
- return 0;
- }
- int test_keyset_bool_ops()
- {
- LSUP_Keyset res_s;
- LSUP_Keyset *res = &res_s;
- LSUP_TripleKey k1 = {1,1,1};
- LSUP_TripleKey k2 = {1,1,2};
- LSUP_TripleKey k3 = {1,2,1};
- LSUP_TripleKey k4 = {2,1,3};
- LSUP_TripleKey k5 = {3,1,1};
- LSUP_TripleKey k6 = {1,1,1};
- LSUP_TripleKey k7 = {1,1,2};
- LSUP_TripleKey k8 = {3,2,1};
- LSUP_TripleKey k9 = {4,1,3};
- LSUP_TripleKey k10 = {5,1,3};
- LSUP_Keyset *ks1 = LSUP_keyset_new(5, .5);
- LSUP_Keyset *ks2 = LSUP_keyset_new(5, .5);
- // Both sets empty.
- LSUP_keyset_join(ks1, ks2, res);
- EXPECT_INT_EQ(LSUP_keyset_size(res), 0);
- LSUP_keyset_done(res);
- LSUP_keyset_subtract(ks1, ks2, res);
- EXPECT_INT_EQ(LSUP_keyset_size(res), 0);
- LSUP_keyset_done(res);
- LSUP_keyset_intersect(ks1, ks2, res);
- EXPECT_INT_EQ(LSUP_keyset_size(res), 0);
- LSUP_keyset_done(res);
- LSUP_keyset_xor(ks1, ks2, res);
- EXPECT_INT_EQ(LSUP_keyset_size(res), 0);
- LSUP_keyset_done(res);
- LSUP_keyset_add(ks1, &k1, 0);
- LSUP_keyset_add(ks1, &k2, 0);
- LSUP_keyset_add(ks1, &k3, 0);
- LSUP_keyset_add(ks1, &k4, 0);
- LSUP_keyset_add(ks1, &k5, 0);
- // Set 2 empty.
- LSUP_keyset_join(ks1, ks2, res);
- EXPECT_INT_EQ(LSUP_keyset_size(res), 5);
- LSUP_keyset_done(res);
- LSUP_keyset_subtract(ks1, ks2, res);
- EXPECT_INT_EQ(LSUP_keyset_size(res), 5);
- LSUP_keyset_done(res);
- LSUP_keyset_intersect(ks1, ks2, res);
- EXPECT_INT_EQ(LSUP_keyset_size(res), 0);
- LSUP_keyset_done(res);
- LSUP_keyset_xor(ks1, ks2, res);
- EXPECT_INT_EQ(LSUP_keyset_size(res), 5);
- LSUP_keyset_done(res);
- LSUP_keyset_add(ks2, &k6, 0);
- LSUP_keyset_add(ks2, &k7, 0);
- LSUP_keyset_add(ks2, &k8, 0);
- LSUP_keyset_add(ks2, &k9, 0);
- LSUP_keyset_add(ks2, &k10, 0);
- // Both sets populated.
- LSUP_keyset_join(ks1, ks2, res);
- EXPECT_INT_EQ(LSUP_keyset_size(res), 8);
- LSUP_keyset_done(res);
- LSUP_keyset_subtract(ks1, ks2, res);
- EXPECT_INT_EQ(LSUP_keyset_size(res), 3);
- LSUP_keyset_done(res);
- LSUP_keyset_intersect(ks1, ks2, res);
- EXPECT_INT_EQ(LSUP_keyset_size(res), 2);
- LSUP_keyset_done(res);
- LSUP_keyset_xor(ks1, ks2, res);
- EXPECT_INT_EQ(LSUP_keyset_size(res), 6);
- LSUP_keyset_done(res);
- LSUP_keyset_free(ks1);
- LSUP_keyset_free(ks2);
- return 0;
- }
- int keyset_tests()
- {
- RUN(test_keyset_stack);
- RUN(test_keyset_heap);
- RUN(test_keyset_add_remove);
- RUN(test_keyset_lookup);
- RUN(test_keyset_bool_ops);
- return 0;
- }
|