END_TEST START_TEST(test_bdd_assignment_cut_1) { ipset_assignment_t *a1; ipset_assignment_t *a2; a1 = ipset_assignment_new(); ipset_assignment_set(a1, 0, IPSET_TRUE); ipset_assignment_set(a1, 1, IPSET_FALSE); a2 = ipset_assignment_new(); ipset_assignment_set(a2, 0, IPSET_TRUE); ipset_assignment_set(a2, 1, IPSET_FALSE); ipset_assignment_set(a2, 2, IPSET_TRUE); ipset_assignment_set(a2, 3, IPSET_TRUE); ipset_assignment_set(a2, 4, IPSET_FALSE); ipset_assignment_cut(a2, 2); fail_unless(ipset_assignment_equal(a1, a2), "Assignments should be equal"); ipset_assignment_free(a1); ipset_assignment_free(a2); }
struct ipset_bdd_iterator * ipset_node_iterate(struct ipset_node_cache *cache, ipset_node_id root) { /* First allocate the iterator itself, and all of its contained * fields. */ struct ipset_bdd_iterator *iterator = cork_new(struct ipset_bdd_iterator); iterator->finished = false; iterator->cache = cache; cork_array_init(&iterator->stack); iterator->assignment = ipset_assignment_new(); /* Then add the root node to the iterator, tracing down until we * find the first terminal node. */ add_node(iterator, root); return iterator; }
END_TEST START_TEST(test_bdd_assignment_expand_3) { ipset_assignment_t *a; a = ipset_assignment_new(); ipset_assignment_set(a, 0, TRUE); ipset_assignment_set(a, 2, FALSE); ipset_expanded_assignment_t *it; it = ipset_assignment_expand(a, 3); GByteArray *ea = g_byte_array_sized_new(1); memset(ea->data, 0, 1); fail_if(it->finished, "Expanded assignment shouldn't be empty"); IPSET_BIT_SET(ea->data, 0, TRUE); IPSET_BIT_SET(ea->data, 1, FALSE); IPSET_BIT_SET(ea->data, 2, FALSE); fail_unless(memcmp(ea->data, it->values->data, 1) == 0, "Expanded assignment 1 doesn't match"); ipset_expanded_assignment_advance(it); fail_if(it->finished, "Expanded assignment should have at least 1 element"); IPSET_BIT_SET(ea->data, 0, TRUE); IPSET_BIT_SET(ea->data, 1, TRUE); IPSET_BIT_SET(ea->data, 2, FALSE); fail_unless(memcmp(ea->data, it->values->data, 1) == 0, "Expanded assignment 2 doesn't match"); ipset_expanded_assignment_advance(it); fail_unless(it->finished, "Expanded assignment should have 2 elements"); g_byte_array_free(ea, TRUE); ipset_expanded_assignment_free(it); ipset_assignment_free(a); }