int main(int argc, char *argv[]) { ATerm bottomOfStack; ATerm t1 = NULL, t2 = NULL; int i; int result = 0; ATinit(argc, argv, &bottomOfStack); PT_initMEPTApi(); if (argc < 3 || argc > 7) { usage(argv[0]); } for (i=1; i < argc; i++) { if (strcmp(argv[i], "-h") == 0) { usage(argv[0]); } else if (strcmp(argv[i], "-V") == 0) { fprintf(stderr, "%s v%s\n", argv[0], version); } else if (strcmp(argv[i], "-l") == 0) { modLayout = !modLayout; } else { if (t1 == NULL) { t1 = ATreadFromNamedFile(argv[i]); if (t1 == NULL) { ATerror("Failed to read from %s\n", argv[i]); } } else if (t2 == NULL) { t2 = ATreadFromNamedFile(argv[i]); if (t2 == NULL) { ATerror("Failed to read from %s\n", argv[i]); } } else { usage(argv[0]); } } } result = PT_compareTree(PT_getParseTreeTop(PT_ParseTreeFromTerm(t1)), PT_getParseTreeTop(PT_ParseTreeFromTerm(t2)), modLayout); if (result < 0) { return -1; } if (result > 0) { return 1; } return 0; }
void testCompare() { test_assert("true > false", PT_compareTree(PT_getParseTreeTree(PT_ParseTreeFromTerm(True)), PT_getParseTreeTree(PT_ParseTreeFromTerm(False))) > 0); test_assert("false < true", PT_compareTree(PT_getParseTreeTree(PT_ParseTreeFromTerm(False)), PT_getParseTreeTree(PT_ParseTreeFromTerm(True))) < 0); test_assert("whitespace difference", PT_compareTree(PT_getParseTreeTree(PT_ParseTreeFromTerm( TrueAndFalse)), PT_getParseTreeTree(PT_ParseTreeFromTerm( OtherTrueAndFalse))) == 0); test_assert("annotations difference", PT_compareTree(PT_getParseTreeTree(PT_ParseTreeFromTerm( TrueAndFalse)), PT_getParseTreeTree(PT_ParseTreeFromTerm( AnnotatedTrueAndFalse))) == 0); test_assert("begin declare a : natural end < begin declare b : natural end", PT_compareTree(PT_getParseTreeTree(PT_ParseTreeFromTerm(DeclareA) ), PT_getParseTreeTree(PT_ParseTreeFromTerm(DeclareB) )) < 0); test_assert("2 > 10", PT_compareTree(PT_getParseTreeTree(PT_ParseTreeFromTerm(Two)), PT_getParseTreeTree(PT_ParseTreeFromTerm(Ten))) > 0); test_assert("20 > 10", PT_compareTree(PT_getParseTreeTree(PT_ParseTreeFromTerm(Twenty)), PT_getParseTreeTree(PT_ParseTreeFromTerm(Ten))) > 0); }