From c6436566dec99c0ed6794fa34b9b67a7e47918b0 Mon Sep 17 00:00:00 2001 From: Morgan Deters Date: Thu, 23 Oct 2014 03:11:18 -0400 Subject: Parsing and infrastructure support for SMT-LIBv2.5 input and output languages. * support for new commands meta-info, declare-const, echo, get-model, reset, and reset-assertions * support for set-option :global-declarations * support for set-option :produce-assertions * support for set-option :reproducible-resource-limit * support for get-info :assertion-stack-levels * support for set-info :smt-lib-version 2.5 * ascribe types for abstract values (the new 2.5 standard clarifies that this is required) * SMT-LIB v2.5 string literals (we still support 2.0 string literals when in 2.0 mode) What's still to do: * check-sat-assumptions/get-unsat-assumptions (still being hotly debated). Also set-option :produce-unsat-assumptions. * define-fun-rec doesn't allow mutual recursion * All options should be restored to defaults with (reset) command. (Currently :incremental and maybe others get "stuck" due to late driver integration.) --- test/regress/regress0/bug421.smt2 | 2 +- test/regress/regress0/bug421b.smt2 | 2 +- test/regress/regress0/bug590.smt2 | 1 + test/regress/regress0/crash_burn_locusts.smt2 | 29 +++++++++++++++++++++++++++ test/regress/regress0/parser/Makefile.am | 4 +++- test/regress/regress0/parser/strings20.smt2 | 15 ++++++++++++++ test/regress/regress0/parser/strings25.smt2 | 15 ++++++++++++++ test/regress/regress0/strings/Makefile.am | 1 + test/regress/regress0/strings/escchar.smt2 | 1 + test/regress/regress0/strings/escchar_25.smt2 | 12 +++++++++++ 10 files changed, 79 insertions(+), 3 deletions(-) create mode 100644 test/regress/regress0/crash_burn_locusts.smt2 create mode 100644 test/regress/regress0/parser/strings20.smt2 create mode 100644 test/regress/regress0/parser/strings25.smt2 create mode 100644 test/regress/regress0/strings/escchar_25.smt2 (limited to 'test/regress') diff --git a/test/regress/regress0/bug421.smt2 b/test/regress/regress0/bug421.smt2 index 5a5886940..fd7b4a7cc 100644 --- a/test/regress/regress0/bug421.smt2 +++ b/test/regress/regress0/bug421.smt2 @@ -1,6 +1,6 @@ ; COMMAND-LINE: --incremental --abstract-values ; EXPECT: sat -; EXPECT: ((a @1) (b @2)) +; EXPECT: ((a (as @1 (Array Int Int))) (b (as @2 (Array Int Int)))) (set-logic QF_AUFLIA) (set-option :produce-models true) (declare-fun a () (Array Int Int)) diff --git a/test/regress/regress0/bug421b.smt2 b/test/regress/regress0/bug421b.smt2 index 82f566a64..aed7f7c05 100644 --- a/test/regress/regress0/bug421b.smt2 +++ b/test/regress/regress0/bug421b.smt2 @@ -4,7 +4,7 @@ ; ; COMMAND-LINE: --incremental --abstract-values --check-models ; EXPECT: sat -; EXPECT: ((a @1) (b @2)) +; EXPECT: ((a (as @1 (Array Int Int))) (b (as @2 (Array Int Int)))) (set-logic QF_AUFLIA) (set-option :produce-models true) (declare-fun a () (Array Int Int)) diff --git a/test/regress/regress0/bug590.smt2 b/test/regress/regress0/bug590.smt2 index d5bd7fd56..06dc1fe58 100644 --- a/test/regress/regress0/bug590.smt2 +++ b/test/regress/regress0/bug590.smt2 @@ -1,6 +1,7 @@ (set-logic QF_ALL_SUPPORTED) (set-option :strings-exp true) (set-option :produce-models true) +(set-info :smt-lib-version 2.0) (set-info :status sat) (declare-fun text () String) diff --git a/test/regress/regress0/crash_burn_locusts.smt2 b/test/regress/regress0/crash_burn_locusts.smt2 new file mode 100644 index 000000000..313d6f79c --- /dev/null +++ b/test/regress/regress0/crash_burn_locusts.smt2 @@ -0,0 +1,29 @@ +;; This is a nasty parsing test for define-fun-rec + +(set-logic UFLIRA) +(set-info :smt-lib-version 2.5) +(define-fun-rec ( + (f ((x Int)) Int 5) ;; ok, f : Int -> Int + (g ((x Int)) Int (h 4)) ;; um, ok, so g : Int -> Int and h : Int -> Int? + (h ((x Real)) Int 4) ;; oops no we were wrong, **CRASH** +)) + +(reset) + +(set-logic UFLIRA) +(set-info :smt-lib-version 2.5) +(define-fun-rec ( + (f ((x Int)) Int (g (h 4) 5)) ;; ok, f : Int -> Int and g : Int -> X -> Int and h : Int -> X ??! What the F?! (pun intended) + (g ((x Int)) Int 5) ;; wait, now g has wrong arity?!! **BURN** + (h ((x Int)) Int 2) +)) + +(reset) + +(set-logic UFLIRA) +(set-info :smt-lib-version 2.5) +(declare-const g Int 2) +(define-fun-rec ( + (f () Int g) ;; wait, which g does this refer to?! **LOCUSTS** + (g () Int 5) +)) diff --git a/test/regress/regress0/parser/Makefile.am b/test/regress/regress0/parser/Makefile.am index 389c80e09..eb27e797b 100644 --- a/test/regress/regress0/parser/Makefile.am +++ b/test/regress/regress0/parser/Makefile.am @@ -19,7 +19,9 @@ MAKEFLAGS = -k # If a test shouldn't be run in e.g. competition mode, # put it below in "TESTS +=" TESTS = \ - declarefun-emptyset-uf.smt2 + declarefun-emptyset-uf.smt2 \ + strings20.smt2 \ + strings25.smt2 EXTRA_DIST = $(TESTS) diff --git a/test/regress/regress0/parser/strings20.smt2 b/test/regress/regress0/parser/strings20.smt2 new file mode 100644 index 000000000..6e9ea4434 --- /dev/null +++ b/test/regress/regress0/parser/strings20.smt2 @@ -0,0 +1,15 @@ +; EXPECT: sat +; EXPECT: (model +; EXPECT: (define-fun s () String "\"") +; EXPECT: ) + +(set-logic QF_S) +(set-info :smt-lib-version 2.0) +(set-option :produce-models true) + +(declare-fun s () String) + +(assert (= s "\"")) + +(check-sat) +(get-model) diff --git a/test/regress/regress0/parser/strings25.smt2 b/test/regress/regress0/parser/strings25.smt2 new file mode 100644 index 000000000..90602e67d --- /dev/null +++ b/test/regress/regress0/parser/strings25.smt2 @@ -0,0 +1,15 @@ +; EXPECT: sat +; EXPECT: (model +; EXPECT: (define-fun s () String """") +; EXPECT: ) + +(set-logic QF_S) +(set-info :smt-lib-version 2.5) +(set-option :produce-models true) + +(declare-fun s () String) + +(assert (= s """")) + +(check-sat) +(get-model) diff --git a/test/regress/regress0/strings/Makefile.am b/test/regress/regress0/strings/Makefile.am index 233962d72..bd8e9ea93 100644 --- a/test/regress/regress0/strings/Makefile.am +++ b/test/regress/regress0/strings/Makefile.am @@ -23,6 +23,7 @@ TESTS = \ bug001.smt2 \ cardinality.smt2 \ escchar.smt2 \ + escchar_25.smt2 \ str001.smt2 \ str002.smt2 \ str003.smt2 \ diff --git a/test/regress/regress0/strings/escchar.smt2 b/test/regress/regress0/strings/escchar.smt2 index 508d7f3c1..aa2afb7e4 100644 --- a/test/regress/regress0/strings/escchar.smt2 +++ b/test/regress/regress0/strings/escchar.smt2 @@ -1,5 +1,6 @@ (set-logic QF_S) (set-info :status sat) +(set-info :smt-lib-version 2.0) (declare-fun x () String) (declare-const I Int) diff --git a/test/regress/regress0/strings/escchar_25.smt2 b/test/regress/regress0/strings/escchar_25.smt2 new file mode 100644 index 000000000..f48995344 --- /dev/null +++ b/test/regress/regress0/strings/escchar_25.smt2 @@ -0,0 +1,12 @@ +(set-logic QF_S) +(set-info :status sat) +(set-info :smt-lib-version 2.5) + +(declare-fun x () String) +(declare-const I Int) + +(assert (= x "\0\1\2\3\04\005\x06\7\8\9ABC\\""\t\a\b")) +(assert (= I (str.len x))) + + +(check-sat) -- cgit v1.2.3