static void test_chars() { CC_Class *cc[CC_BITS], *cc_input, *temp, *all; ATerm input, output; int i; input = ATparse("char-class([0,range(9,10),12,23,range(30,50),range(128,256)])"); cc_input = CC_ClassFromTerm(input); temp = CC_makeClassEmpty(); CC_addATermClass(temp, input); assert(CC_isEqual(temp, cc_input)); CC_free(temp); temp = CC_makeClassEmpty(); assert(CC_isEmpty(temp)); for (i=0; i<CC_BITS; i++) { cc[i] = CC_ClassFromInt(i); if (i == CC_EOF) { assert(CC_isEOF(cc[i])); } else { assert(!CC_isEOF(cc[i])); } CC_union(temp, cc[i], temp); assert(!CC_isEOF(temp)); } all = CC_makeClassAllChars(); assert(!CC_isEmpty(all)); assert(CC_isEqual(temp, all)); CC_difference(temp, all, temp); assert(CC_isEmpty(temp)); CC_copy(all, temp); CC_difference(temp, cc_input, temp); CC_complement(temp, temp); assert(CC_isEqual(temp, cc_input)); CC_copy(all, temp); CC_difference(temp, cc_input, temp); CC_union(temp, cc_input, temp); assert(CC_isEqual(temp, all)); CC_copy(all, temp); CC_intersection(temp, cc_input, temp); assert(CC_isEqual(temp, cc_input)); assert(CC_isSubset(cc_input, all)); output = CC_ClassToTerm(cc_input); /* ATwarning("input = %t\noutput = %t\n", input, output); assert(ATisEqual(output, input)); */ }
void destroy_first() { int i; for (i=0; i<max_first_sets; i++) { if (first_sets[i] != NULL) { CC_free(first_sets[i]); } } free(first_sets); first_sets = NULL; max_first_sets = 0; }