Enable dump tester. (#7884)
authorAbdalrhman Mohamed <32971963+abdoo8080@users.noreply.github.com>
Mon, 24 Jan 2022 18:34:14 +0000 (12:34 -0600)
committerGitHub <noreply@github.com>
Mon, 24 Jan 2022 18:34:14 +0000 (18:34 +0000)
This PR enables the dump tester, a parse-print-parse test for cvc5, on CI. It also includes some changes that reduce the number of regressions that fail with this tester.

30 files changed:
.github/workflows/ci.yml
src/main/command_executor.cpp
src/main/driver_unified.cpp
src/parser/smt2/smt2.cpp
src/printer/smt2/smt2_printer.cpp
test/regress/regress0/bv/issue-4075.smt2
test/regress/regress0/bv/issue-4130.smt2
test/regress/regress0/datatypes/datatype-dump.cvc.smt2
test/regress/regress0/fp/issue-5524.smt2
test/regress/regress0/ho/issue4477.smt2
test/regress/regress0/issue1063-overloading-dt-cons.smt2
test/regress/regress0/options/didyoumean.smt2
test/regress/regress0/options/help.smt2
test/regress/regress0/options/named_muted.smt2
test/regress/regress0/parser/bv_nat.smt2
test/regress/regress0/parser/force_logic_set_logic.smt2
test/regress/regress0/parser/issue6908-get-value-uc.smt2
test/regress/regress0/parser/linear_arithmetic_err1.smt2
test/regress/regress0/parser/linear_arithmetic_err2.smt2
test/regress/regress0/parser/linear_arithmetic_err3.smt2
test/regress/regress0/parser/named-attr-error.smt2
test/regress/regress0/parser/shadow_fun_symbol_all.smt2
test/regress/regress0/parser/shadow_fun_symbol_nirat.smt2
test/regress/regress0/quantifiers/issue4437-unc-quant.smt2
test/regress/regress0/sygus/issue5512-vvv.sy
test/regress/regress0/sygus/pLTL-sygus-syntax-err.sy
test/regress/regress1/arrayinuf_error.smt2
test/regress/regress1/errorcrash.smt2
test/regress/regress1/quantifiers/fp-cegqi-unsat.smt2
test/regress/run_regression.py

index 59a26838e139a35b6480f2d5ab31107b49690ec6..f79085f82b4a8f62d498f33a3e7a76804832eb5a 100644 (file)
@@ -15,7 +15,7 @@ jobs:
             check-examples: true
             store-to-release: true
             exclude_regress: 3-4
-            run_regression_args: --tester base --tester model --tester synth --tester abduct
+            run_regression_args: --tester base --tester model --tester synth --tester abduct --tester dump
 
           - name: macos:production
             os: macos-11
@@ -25,7 +25,7 @@ jobs:
             check-examples: true
             store-to-release: true
             exclude_regress: 3-4
-            run_regression_args: --tester base --tester model --tester synth --tester abduct
+            run_regression_args: --tester base --tester model --tester synth --tester abduct --tester dump
 
           - name: ubuntu:production-clang
             os: ubuntu-18.04
@@ -34,14 +34,14 @@ jobs:
             cache-key: productionclang
             check-examples: true
             exclude_regress: 3-4
-            run_regression_args: --tester base --tester model --tester synth --tester abduct
+            run_regression_args: --tester base --tester model --tester synth --tester abduct --tester dump
 
           - name: ubuntu:production-dbg
             os: ubuntu-18.04
             config: production --auto-download --assertions --tracing --unit-testing --java-bindings --editline
             cache-key: dbg
             exclude_regress: 3-4
-            run_regression_args: --tester base --tester model --tester synth --tester abduct --tester proof
+            run_regression_args: --tester base --tester model --tester synth --tester abduct --tester proof --tester dump
 
           - name: ubuntu:production-dbg-clang
             os: ubuntu-latest
@@ -49,7 +49,7 @@ jobs:
             config: production --auto-download --assertions --tracing --cln --gpl
             cache-key: dbgclang
             exclude_regress: 3-4
-            run_regression_args: --tester base --tester model --tester synth --tester abduct --tester unsat-core
+            run_regression_args: --tester base --tester model --tester synth --tester abduct --tester unsat-core --tester dump
 
     name: ${{ matrix.name }}
     runs-on: ${{ matrix.os }}
index 218ab554d74bde28b1cdd006c6d5fb4b8eb04d1c..44629652ddff76dcc961a3d207305a4b055482e7 100644 (file)
@@ -207,6 +207,7 @@ bool solverInvoke(api::Solver* solver,
   // commands. We invoke define-fun commands because they add function names
   // to the symbol table.
   if (solver->getOptionInfo("parse-only").boolValue()
+      && dynamic_cast<SetBenchmarkLogicCommand*>(cmd) == nullptr
       && dynamic_cast<DefineFunctionCommand*>(cmd) == nullptr
       && dynamic_cast<ResetCommand*>(cmd) == nullptr)
   {
index e576f2e710042a1721dff950aa070a1b4bf02482..4188283820af4c4f05007fdc7274a22c08db2eb4 100644 (file)
@@ -162,9 +162,7 @@ int runCvc5(int argc, char* argv[], std::unique_ptr<api::Solver>& solver)
     {
       if (!solver->getOptionInfo("incremental").setByUser)
       {
-        cmd.reset(new SetOptionCommand("incremental", "true"));
-        cmd->setMuted(true);
-        pExecutor->doCommand(cmd);
+        solver->setOption("incremental", "true");
       }
       InteractiveShell shell(pExecutor->getSolver(),
                              pExecutor->getSymbolManager(),
@@ -202,9 +200,7 @@ int runCvc5(int argc, char* argv[], std::unique_ptr<api::Solver>& solver)
     {
       if (!solver->getOptionInfo("incremental").setByUser)
       {
-        cmd.reset(new SetOptionCommand("incremental", "false"));
-        cmd->setMuted(true);
-        pExecutor->doCommand(cmd);
+        solver->setOption("incremental", "false");
       }
 
       ParserBuilder parserBuilder(
index 634eb3655920ea3593682e105a3556f4e9ef7eb6..8eed51baac2dc2cd388b0acb4896dfc2e2a1ce45 100644 (file)
@@ -504,6 +504,11 @@ Command* Smt2::setLogic(std::string name, bool fromCommand)
     Parser::addOperator(api::APPLY_UF);
   }
 
+  if (d_logic.isHigherOrder())
+  {
+    addOperator(api::HO_APPLY, "@");
+  }
+
   if(d_logic.isTheoryEnabled(theory::THEORY_ARITH)) {
     if(d_logic.areIntegersUsed()) {
       defineType("Int", d_solver->getIntegerSort(), true, true);
index fd7825ac1d652fdf5ba4861297683e0d4679c3a9..067cf27fefb365824368c25a48179ad04974a0ac 100644 (file)
@@ -292,7 +292,12 @@ void Smt2Printer::toStream(std::ostream& out,
       ArrayStoreAll asa = n.getConst<ArrayStoreAll>();
       out << "((as const ";
       toStreamType(out, asa.getType());
-      out << ") " << asa.getValue() << ")";
+      out << ") ";
+      toStreamCastToType(out,
+                         asa.getValue(),
+                         toDepth < 0 ? toDepth : toDepth - 1,
+                         asa.getType().getArrayConstituentType());
+      out << ")";
       break;
     }
 
@@ -592,6 +597,7 @@ void Smt2Printer::toStream(std::ostream& out,
     case kind::HO_APPLY:
       if (!options::flattenHOChains())
       {
+        out << smtKindString(k, d_variant) << ' ';
         break;
       }
       // collapse "@" chains, i.e.
@@ -759,7 +765,7 @@ void Smt2Printer::toStream(std::ostream& out,
     if (op.getIndices().empty())
     {
       // e.g. (tuple_project tuple)
-      out << "project " << n[0] << ")";
+      out << "tuple_project " << n[0] << ")";
     }
     else
     {
@@ -863,7 +869,7 @@ void Smt2Printer::toStream(std::ostream& out,
         {
           out << "(! ";
           annot << ":no-pattern ";
-          toStream(annot, nc, toDepth, nullptr);
+          toStream(annot, nc[0], toDepth, nullptr);
           annot << ") ";
         }
       }
@@ -1226,6 +1232,9 @@ std::string Smt2Printer::smtKindString(Kind k, Variant v)
   case kind::FORALL: return "forall";
   case kind::EXISTS: return "exists";
 
+  // HO
+  case kind::HO_APPLY: return "@";
+
   default:
     ; /* fall through */
   }
@@ -1481,7 +1490,7 @@ void Smt2Printer::toStreamCmdDefineFunction(std::ostream& out,
                                             TypeNode range,
                                             Node formula) const
 {
-  out << "(define-fun " << id << " (";
+  out << "(define-fun " << cvc5::quoteSymbol(id) << " (";
   if (!formals.empty())
   {
     vector<Node>::const_iterator i = formals.cbegin();
index 083fbf897ee26b0463a59fcad5a096b465630c51..31066e3f8064dc804403e88a007d52665f6b6c76 100644 (file)
@@ -1,5 +1,6 @@
+; DISABLE-TESTER: dump
 ; REQUIRES: no-competition
-; EXPECT: (error "Parse Error: issue-4075.smt2:11.26: expecting number of repeats > 0
+; EXPECT: (error "Parse Error: issue-4075.smt2:12.26: expecting number of repeats > 0
 ; EXPECT:
 ; EXPECT:  (simplify ((_ repeat 0) b))
 ; EXPECT:                       ^
index 4c7daab5756cef9095a77ea9d49aa7d72088b25e..0f08945967cc58d51b82439a1088252119475c56 100644 (file)
@@ -1,5 +1,6 @@
+; DISABLE-TESTER: dump
 ; REQUIRES: no-competition
-; EXPECT: (error "Parse Error: issue-4130.smt2:10.39: expecting bit-width > 0
+; EXPECT: (error "Parse Error: issue-4130.smt2:11.39: expecting bit-width > 0
 ; EXPECT:
 ; EXPECT:   (assert (and (= a (bv2nat ((_ int2bv 0) a)))))
 ; EXPECT:                                        ^
index 7d5495fccba6e0906180f1856ebc3b67160e889c..6a20d7607692afa03e2ee3c30ad647b313e6aa35 100644 (file)
@@ -1,5 +1,4 @@
 ; COMMAND-LINE: -o raw-benchmark
-; EXPECT: (set-option :incremental false)
 ; EXPECT: (set-logic ALL)
 ; EXPECT: (declare-datatypes ((nat 0)) (((succ (pred nat)) (zero))))
 ; EXPECT: (declare-fun x () nat)
index 3902f9c370387c0061940711fc6a8d252da66109..3e9696871d65f00f0bd90307fc78a793778766ee 100644 (file)
@@ -1,6 +1,6 @@
 ; COMMAND-LINE: --bv-solver=bitblast
 ; EXPECT: unsat
-(set-logic QF_FP)
+(set-logic QF_FPLRA)
 (declare-fun fpv5 () Float32)
 (assert (fp.eq (fp.mul RTP fpv5 fpv5) ((_ to_fp 8 24) RTN 0.04)))
 (check-sat)
index 7162d260c7c54d0f28a93cc632a293661c3e5eee..2b0ff115e049e6d95c4257c3e0aeaeaeb60c9cf7 100644 (file)
@@ -1,3 +1,4 @@
+; DISABLE-TESTER: dump
 ; REQUIRES: no-competition
 ; SCRUBBER: grep -o "Symbol '->' not declared"
 ; EXPECT: Symbol '->' not declared 
index a77fcdd224687af0afe11e7e662695bfa12a0f16..82afaa3beb2cefba1dfb9577c9d9c29fc9ef4405 100644 (file)
@@ -1,3 +1,4 @@
+; DISABLE-TESTER: dump
 ; EXPECT: sat
 (set-logic ALL)
 (set-info :status sat)
index 100e1e6fb6fa37ca1e0f4267eb73e9ea567c8551..43c4d5903a45491911a83c0bac006a2c41344766 100644 (file)
@@ -1,3 +1,4 @@
+; DISABLE-TESTER: dump
 ; REQUIRES: no-competition
 ; COMMAND-LINE: --input-agnuage
 ; ERROR-SCRUBBER: grep -o "--[a-zA-Z-]+"
index 038619c5eb0ec95a05867e1d112c1789ed1500fb..3f0cd4a144d8918c1558ebedf309ca62308e9e9e 100644 (file)
@@ -1,3 +1,4 @@
+; DISABLE-TESTER: dump
 ; COMMAND-LINE: --help
 ; SCRUBBER: grep -o "usage: cvc5"
 ; EXPECT: usage: cvc5
index 7026298c693dca65280b7bdbd5a00e83df97eb6d..9105f79a1ee3cbe19cdd573982d577cf38bc8a98 100644 (file)
@@ -1,3 +1,4 @@
+; DISABLE-TESTER: dump
 ; COMMAND-LINE: --print-success
 ; EXPECT: success
 ; EXPECT: success
index 14a150b4f71a2076280c0be2e35864bb830e1e3f..c2954dfadd3b48008791c3ac5d016b59161d7a3d 100644 (file)
@@ -1,3 +1,4 @@
+; DISABLE-TESTER: dump
 ; REQUIRES: no-competition
 ; EXPECT: sat
 ; EXPECT: not declared
index 1bab02ef9a98a961d6df6c1c26df323fc9439bb5..9c931f5608da5d7ef6da8e39253fe9af33770f6d 100644 (file)
@@ -1,6 +1,7 @@
 ; This regression ensures that we detect repeated set-logic commands even when
 ; --force-logic is used.
 
+; DISABLE-TESTER: dump
 ; COMMAND-LINE: --force-logic="QF_BV"
 ; SCRUBBER: grep -o "Only one set-logic is allowed."
 ; EXPECT: Only one set-logic is allowed.
index ab7615809f766e71d03421a32666e906360c8fb8..722d4308efa334ecba1a49700860740a6e135eac 100644 (file)
@@ -1,3 +1,4 @@
+; DISABLE-TESTER: dump
 ; COMMAND-LINE: --produce-models
 ; EXPECT: sat
 ; EXPECT: (((f (as @a0 Foo)) 3))
index f031cded8505fd3dd5508945d6280d91de472dea..89e4f98f93700a35bdefce15dc03b50818942c5c 100644 (file)
@@ -1,3 +1,4 @@
+; DISABLE-TESTER: dump
 ; REQUIRES: no-competition
 ; COMMAND-LINE: --strict-parsing
 ; SCRUBBER: grep -o "Symbol 'div' not declared as a variable"
index adaa0aff4c5d96e088ec3eb1a4ca8a6bd65971df..17926f0c63edcf1cf2271342e4cbd5a4dd89c17d 100644 (file)
@@ -1,3 +1,4 @@
+; DISABLE-TESTER: dump
 ; REQUIRES: no-competition
 ; COMMAND-LINE: --strict-parsing
 ; SCRUBBER: grep -o "Symbol 'mod' not declared as a variable"
index d875e4cbe92e224af34886337597dd6ea844d9f6..811a162b505b39201f52fa579634d770d40aa2cd 100644 (file)
@@ -1,3 +1,4 @@
+; DISABLE-TESTER: dump
 ; REQUIRES: no-competition
 ; COMMAND-LINE: --strict-parsing
 ; SCRUBBER: grep -o "Symbol 'abs' not declared as a variable"
index 2b925b8ce71a527f629d8f49d98b6120f7569e60..86ba696385acbe2e09dcf8b34761648d8306a17a 100644 (file)
@@ -1,3 +1,4 @@
+; DISABLE-TESTER: dump
 ; REQUIRES: no-competition
 ; SCRUBBER: grep -o "Cannot name a term in a binder"
 ; EXPECT: Cannot name a term in a binder
index 7df6f5f127e3d32b7938a4c4e06e0699d1d27a0f..19aa2eb238b48016b919f2cecb27353d58f380bc 100644 (file)
@@ -1,3 +1,4 @@
+; DISABLE-TESTER: dump
 ; EXPECT: Symbol `sin' is shadowing a theory function symbol
 ; SCRUBBER: grep -o "Symbol \`sin' is shadowing a theory function symbol"
 ; EXIT: 1
index 1c83f3c5404e6c79d30b0179f25e63fd69e19f60..1f168053bfae49b25eda58163f0fa886bc9f37d1 100644 (file)
@@ -1,3 +1,4 @@
+; DISABLE-TESTER: dump
 ; EXPECT: Symbol `exp' is shadowing a theory function symbol
 ; SCRUBBER: grep -o "Symbol \`exp' is shadowing a theory function symbol"
 ; EXIT: 1
index 5dd51dc0c1ef01fd627d668a597423367fe4e466..5852266c216eb217b7b4ddd08eb78abd6b3a1e0d 100644 (file)
@@ -1,3 +1,4 @@
+; DISABLE-TESTER: dump
 ; REQUIRES: no-competition
 ; EXPECT: Quantifier used in non-quantified logic
 ; SCRUBBER: grep -o "Quantifier used in non-quantified logic"
index 333c0dd5ae24375c9f5577d5927e24df0fdd91a9..0fbcc6d0348e0cdc3005cc9ee6638e2b8d2841ce 100644 (file)
@@ -1,3 +1,4 @@
+; DISABLE-TESTER: dump
 ; COMMAND-LINE: -vvv --sygus-out=status --check-synth-sol --check-abducts
 ; ERROR-SCRUBBER: sed -e 's/.*//g'
 ; SCRUBBER: sed -e 's/.*//g'
index cf8e4da31656bd9238644bf41fc91c971cb25113..90eeb3e7454120223330bd1f054a879a7936b62b 100644 (file)
@@ -1,6 +1,7 @@
+; DISABLE-TESTER: dump
 ; REQUIRES: no-competition
 ; COMMAND-LINE: --sygus-out=status --sygus-rec-fun --lang=sygus2
-; EXPECT-ERROR: (error "Parse Error: pLTL-sygus-syntax-err.sy:78.19: number of arguments does not match the constructor type
+; EXPECT-ERROR: (error "Parse Error: pLTL-sygus-syntax-err.sy:79.19: number of arguments does not match the constructor type
 ; EXPECT-ERROR:
 ; EXPECT-ERROR: (Op2 <O2> <F>)
 ; EXPECT-ERROR: ^
index bc89dd0eb6a92556cd93d62629a7f33c42a21805..6ff64e9cc07a10688fec7e2f7d5cd4627005656f 100644 (file)
@@ -1,5 +1,6 @@
+; DISABLE-TESTER: dump
 ; REQUIRES: no-competition
-; EXPECT: (error "Parse Error: arrayinuf_error.smt2:8.21: Symbol 'Array' not declared as a type
+; EXPECT: (error "Parse Error: arrayinuf_error.smt2:9.21: Symbol 'Array' not declared as a type
 ; EXPECT: 
 ; EXPECT:   (declare-fun a (Array Bool Bool))
 ; EXPECT:                   ^
index 78df4324e3d55fc1addab54cd472df9ba7a94500..d42727f0d0e845079d822a315e63138a81e98a6e 100644 (file)
@@ -1,6 +1,7 @@
+; DISABLE-TESTER: dump
 ; REQUIRES: no-competition
 ; EXIT: 1
-; EXPECT: (error "Parse Error: errorcrash.smt2:6.29: Symbol 'Array' not declared as a type")
+; EXPECT: (error "Parse Error: errorcrash.smt2:7.29: Symbol 'Array' not declared as a type")
 (set-logic QF_UF)
 (declare-sort U 0)
 (declare-fun x () (Array U U))
index 3ab7495eacd20135a268c22e418215ed6f5d0d03..1fa6225c75c74b8b732aa6366038991c51694395 100644 (file)
@@ -1,5 +1,5 @@
 (set-info :smt-lib-version 2.6)
-(set-logic FP)
+(set-logic FPLRA)
 (set-info :status unsat)
 (declare-fun c_main_~E0~7 () (_ FloatingPoint 11 53))
 (declare-fun c_main_~S~7 () (_ FloatingPoint 11 53))
index 3c0c974e2acc5d0f37f1f79d1aa768c282b333f6..362af1730594946777565cb8caf9e6f77d72ef9e 100755 (executable)
@@ -50,7 +50,7 @@ class Tester:
         if exit_status == STATUS_TIMEOUT:
             exit_code = EXIT_SKIP if g_args.skip_timeout else EXIT_FAILURE
             print("Timeout - Flags: {}".format(benchmark_info.command_line_args))
-        elif output != benchmark_info.expected_output:
+        elif benchmark_info.compare_outputs and output != benchmark_info.expected_output:
             exit_code = EXIT_FAILURE
             print("not ok - Flags: {}".format(benchmark_info.command_line_args))
             print()
@@ -66,7 +66,7 @@ class Tester:
                 print_colored(Color.YELLOW, error)
                 print("=" * 80)
                 print()
-        elif error != benchmark_info.expected_error:
+        elif benchmark_info.compare_outputs and error != benchmark_info.expected_error:
             exit_code = EXIT_FAILURE
             print(
                 "not ok - Differences between expected and actual output on stderr - Flags: {}".format(
@@ -245,12 +245,11 @@ class AbductTester(Tester):
 
 class DumpTester(Tester):
     def applies(self, benchmark_info):
-        return benchmark_info.expected_exit_status == EXIT_OK
+        return benchmark_info.benchmark_ext != ".p"
 
     def run(self, benchmark_info):
         ext_to_lang = {
             ".smt2": "smt2",
-            ".p": "tptp",
             ".sy": "sygus",
         }
 
@@ -285,7 +284,8 @@ class DumpTester(Tester):
                     "--lang={}".format(ext_to_lang[benchmark_info.benchmark_ext]),
                 ],
                 benchmark_basename=tmpf.name,
-                expected_output="",
+                expected_exit_status=0,
+                compare_outputs=False,
             )
         )
         os.remove(tmpf.name)
@@ -329,6 +329,7 @@ BenchmarkInfo = collections.namedtuple(
         "expected_error",
         "expected_exit_status",
         "command_line_args",
+        "compare_outputs",
     ],
 )
 
@@ -624,6 +625,7 @@ def run_regression(
             expected_error=expected_error,
             expected_exit_status=expected_exit_status,
             command_line_args=all_args,
+            compare_outputs=True,
         )
         for tester_name, tester in g_testers.items():
             if tester_name in testers and tester.applies(benchmark_info):