#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; }