summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>2017-09-14 14:12:22 -0500
committerGitHub <noreply@github.com>2017-09-14 14:12:22 -0500
commitab2924e8a6cc34f29167b1ff50273d59dd7a6707 (patch)
treed9902a389ae70a21f2d5a3f7acde2ce658fb534d /test
parente4fc6c7b57668f18ce087c45e001c101375c20ea (diff)
Remove unhandled subtypes (#1098)
* Remove unhandled subtypes, which consequently makes typing rules uniformly stricter based on weakening the subtype relation. Ensure coercions in the smt2 and cvc parser for Real decimal constants whose type is Integer. Ensure type annotations are computed during preRewrite to ensure rewriting (which does not preserve types) does not impact term construction for parametric datatypes. This fixes issue #1048 (we now give an type exception). * Update unit test for parametric datatypes to reflect new subtyping relation. * Remove deprecated test. * Make array construction for lambdas work with new subtype relations to handle lambdas like (lambda ((x Int) (y Int)) (ite (= x 0) 0.5 0.0)).
Diffstat (limited to 'test')
-rw-r--r--test/regress/regress0/Makefile.am1
-rw-r--r--test/regress/regress0/datatypes/tuple-no-clash.cvc2
-rw-r--r--test/regress/regress0/issue1048-arrays-int-real.smt26
-rw-r--r--test/regress/regress0/quantifiers/Makefile.am8
-rw-r--r--test/regress/regress0/quantifiers/macro-subtype-param.smt28
-rw-r--r--test/regress/regress0/quantifiers/subtype-param-unk.smt28
-rw-r--r--test/regress/regress0/quantifiers/subtype-param.smt28
-rw-r--r--test/regress/regress0/sets/sets-tuple-poly.cvc2
-rw-r--r--test/unit/util/datatype_black.h63
9 files changed, 64 insertions, 42 deletions
diff --git a/test/regress/regress0/Makefile.am b/test/regress/regress0/Makefile.am
index 17a2ea2ef..1368dd067 100644
--- a/test/regress/regress0/Makefile.am
+++ b/test/regress/regress0/Makefile.am
@@ -189,6 +189,7 @@ TESTS = $(SMT_TESTS) $(SMT2_TESTS) $(CVC_TESTS) $(TPTP_TESTS) $(BUG_TESTS)
# we have a minimized version still getting tested
# bug639 -- still fails, reopened bug
# bug585 -- contains subrange type (not supported)
+# issue1048-arrays-int-real.smt2 -- different errors on debug and production
DISABLED_TESTS = \
bug512.smt2 \
bug585.cvc
diff --git a/test/regress/regress0/datatypes/tuple-no-clash.cvc b/test/regress/regress0/datatypes/tuple-no-clash.cvc
index 4d7345a54..ecdc8198f 100644
--- a/test/regress/regress0/datatypes/tuple-no-clash.cvc
+++ b/test/regress/regress0/datatypes/tuple-no-clash.cvc
@@ -6,6 +6,6 @@ y : REAL;
z : REAL;
ASSERT x = (y, z) OR x = (z, y);
-ASSERT x = (0,0) OR x = (1,1);
+ASSERT x = (0.0,0.0) OR x = (1.0,1.0);
CHECKSAT;
diff --git a/test/regress/regress0/issue1048-arrays-int-real.smt2 b/test/regress/regress0/issue1048-arrays-int-real.smt2
new file mode 100644
index 000000000..6bbfe4cb7
--- /dev/null
+++ b/test/regress/regress0/issue1048-arrays-int-real.smt2
@@ -0,0 +1,6 @@
+(set-logic QF_ALIRA)
+(declare-fun a () (Array Int Real))
+(declare-fun b () (Array Int Int))
+(assert (= a b))
+(assert (= (select a 0) 0.5))
+(check-sat)
diff --git a/test/regress/regress0/quantifiers/Makefile.am b/test/regress/regress0/quantifiers/Makefile.am
index c5a81c960..cdf2ec9bc 100644
--- a/test/regress/regress0/quantifiers/Makefile.am
+++ b/test/regress/regress0/quantifiers/Makefile.am
@@ -70,10 +70,7 @@ TESTS = \
agg-rew-test-cf.smt2 \
rew-to-0211-dd.smt2 \
rew-to-scala.smt2 \
- macro-subtype-param.smt2 \
macros-real-arg.smt2 \
- subtype-param-unk.smt2 \
- subtype-param.smt2 \
anti-sk-simp.smt2 \
pure_dt_cbqi.smt2 \
florian-case-ax.smt2 \
@@ -108,6 +105,11 @@ TESTS = \
# clock-10.smt2
#
+# FIXME: I've disabled these since they give different error messages on production and debug
+# macro-subtype-param.smt2
+# subtype-param-unk.smt2
+# subtype-param.smt2
+
EXTRA_DIST = $(TESTS) \
bug291.smt2.expect
diff --git a/test/regress/regress0/quantifiers/macro-subtype-param.smt2 b/test/regress/regress0/quantifiers/macro-subtype-param.smt2
index f44d75195..97ff827a7 100644
--- a/test/regress/regress0/quantifiers/macro-subtype-param.smt2
+++ b/test/regress/regress0/quantifiers/macro-subtype-param.smt2
@@ -1,5 +1,11 @@
; COMMAND-LINE: --macros-quant
-; EXPECT: unknown
+; EXPECT: (error "argument type is not a subtype of the function's argument type:
+; EXPECT: argument: x
+; EXPECT: has type: (List Int)
+; EXPECT: not subtype: (List Real)
+; EXPECT: in term : (R (as x (List Real)))")
+; EXIT: 1
+
(set-logic ALL_SUPPORTED)
(declare-datatypes ((List 1)) ((par (T) ((cons (hd T) (tl (List T))) (nil)))))
diff --git a/test/regress/regress0/quantifiers/subtype-param-unk.smt2 b/test/regress/regress0/quantifiers/subtype-param-unk.smt2
index e3008772d..f3ee6a86a 100644
--- a/test/regress/regress0/quantifiers/subtype-param-unk.smt2
+++ b/test/regress/regress0/quantifiers/subtype-param-unk.smt2
@@ -1,5 +1,11 @@
; COMMAND-LINE: --lang=smt2.5
-; EXPECT: unknown
+; EXPECT: (error "argument type is not a subtype of the function's argument type:
+; EXPECT: argument: x
+; EXPECT: has type: (List Int)
+; EXPECT: not subtype: (List Real)
+; EXPECT: in term : (R (as x (List Real)))")
+; EXIT: 1
+
; this will fail if type rule for APPLY_UF requires arguments to be subtypes
(set-logic ALL_SUPPORTED)
diff --git a/test/regress/regress0/quantifiers/subtype-param.smt2 b/test/regress/regress0/quantifiers/subtype-param.smt2
index 42d7a5b60..860c03b6f 100644
--- a/test/regress/regress0/quantifiers/subtype-param.smt2
+++ b/test/regress/regress0/quantifiers/subtype-param.smt2
@@ -1,5 +1,11 @@
; COMMAND-LINE: --lang=smt2.5
-; EXPECT: unsat
+; EXPECT: (error "argument type is not a subtype of the function's argument type:
+; EXPECT: argument: x
+; EXPECT: has type: (Array Int Int)
+; EXPECT: not subtype: (Array Int Real)
+; EXPECT: in term : (Q (as x (Array Int Real)))")
+; EXIT: 1
+
(set-logic ALL_SUPPORTED)
(set-info :status unsat)
diff --git a/test/regress/regress0/sets/sets-tuple-poly.cvc b/test/regress/regress0/sets/sets-tuple-poly.cvc
index 64fb310be..4cac9a24e 100644
--- a/test/regress/regress0/sets/sets-tuple-poly.cvc
+++ b/test/regress/regress0/sets/sets-tuple-poly.cvc
@@ -7,7 +7,7 @@ b : SET OF [INT, REAL];
x : [ REAL, REAL ];
-ASSERT NOT x = (0,0);
+ASSERT NOT x = (0.0,0.0);
ASSERT (x.0, FLOOR(x.1)) IS_IN a;
ASSERT (FLOOR(x.0), x.1) IS_IN b;
diff --git a/test/unit/util/datatype_black.h b/test/unit/util/datatype_black.h
index 9f26312dc..15c380c31 100644
--- a/test/unit/util/datatype_black.h
+++ b/test/unit/util/datatype_black.h
@@ -363,60 +363,55 @@ public:
TS_ASSERT_DIFFERS(pairIntInt, pairRealInt);
TS_ASSERT_DIFFERS(pairIntReal, pairRealInt);
- TS_ASSERT_EQUALS(pairRealReal.getBaseType(), pairRealReal);
- TS_ASSERT_EQUALS(pairRealInt.getBaseType(), pairRealReal);
- TS_ASSERT_EQUALS(pairIntReal.getBaseType(), pairRealReal);
- TS_ASSERT_EQUALS(pairIntInt.getBaseType(), pairRealReal);
-
TS_ASSERT(pairRealReal.isComparableTo(pairRealReal));
- TS_ASSERT(pairIntReal.isComparableTo(pairRealReal));
- TS_ASSERT(pairRealInt.isComparableTo(pairRealReal));
- TS_ASSERT(pairIntInt.isComparableTo(pairRealReal));
- TS_ASSERT(pairRealReal.isComparableTo(pairRealInt));
- TS_ASSERT(pairIntReal.isComparableTo(pairRealInt));
+ TS_ASSERT(!pairIntReal.isComparableTo(pairRealReal));
+ TS_ASSERT(!pairRealInt.isComparableTo(pairRealReal));
+ TS_ASSERT(!pairIntInt.isComparableTo(pairRealReal));
+ TS_ASSERT(!pairRealReal.isComparableTo(pairRealInt));
+ TS_ASSERT(!pairIntReal.isComparableTo(pairRealInt));
TS_ASSERT(pairRealInt.isComparableTo(pairRealInt));
- TS_ASSERT(pairIntInt.isComparableTo(pairRealInt));
- TS_ASSERT(pairRealReal.isComparableTo(pairIntReal));
+ TS_ASSERT(!pairIntInt.isComparableTo(pairRealInt));
+ TS_ASSERT(!pairRealReal.isComparableTo(pairIntReal));
TS_ASSERT(pairIntReal.isComparableTo(pairIntReal));
- TS_ASSERT(pairRealInt.isComparableTo(pairIntReal));
- TS_ASSERT(pairIntInt.isComparableTo(pairIntReal));
- TS_ASSERT(pairRealReal.isComparableTo(pairIntInt));
- TS_ASSERT(pairIntReal.isComparableTo(pairIntInt));
- TS_ASSERT(pairRealInt.isComparableTo(pairIntInt));
+ TS_ASSERT(!pairRealInt.isComparableTo(pairIntReal));
+ TS_ASSERT(!pairIntInt.isComparableTo(pairIntReal));
+ TS_ASSERT(!pairRealReal.isComparableTo(pairIntInt));
+ TS_ASSERT(!pairIntReal.isComparableTo(pairIntInt));
+ TS_ASSERT(!pairRealInt.isComparableTo(pairIntInt));
TS_ASSERT(pairIntInt.isComparableTo(pairIntInt));
TS_ASSERT(pairRealReal.isSubtypeOf(pairRealReal));
- TS_ASSERT(pairIntReal.isSubtypeOf(pairRealReal));
- TS_ASSERT(pairRealInt.isSubtypeOf(pairRealReal));
- TS_ASSERT(pairIntInt.isSubtypeOf(pairRealReal));
+ TS_ASSERT(!pairIntReal.isSubtypeOf(pairRealReal));
+ TS_ASSERT(!pairRealInt.isSubtypeOf(pairRealReal));
+ TS_ASSERT(!pairIntInt.isSubtypeOf(pairRealReal));
TS_ASSERT(!pairRealReal.isSubtypeOf(pairRealInt));
TS_ASSERT(!pairIntReal.isSubtypeOf(pairRealInt));
TS_ASSERT(pairRealInt.isSubtypeOf(pairRealInt));
- TS_ASSERT(pairIntInt.isSubtypeOf(pairRealInt));
+ TS_ASSERT(!pairIntInt.isSubtypeOf(pairRealInt));
TS_ASSERT(!pairRealReal.isSubtypeOf(pairIntReal));
TS_ASSERT(pairIntReal.isSubtypeOf(pairIntReal));
TS_ASSERT(!pairRealInt.isSubtypeOf(pairIntReal));
- TS_ASSERT(pairIntInt.isSubtypeOf(pairIntReal));
+ TS_ASSERT(!pairIntInt.isSubtypeOf(pairIntReal));
TS_ASSERT(!pairRealReal.isSubtypeOf(pairIntInt));
TS_ASSERT(!pairIntReal.isSubtypeOf(pairIntInt));
TS_ASSERT(!pairRealInt.isSubtypeOf(pairIntInt));
TS_ASSERT(pairIntInt.isSubtypeOf(pairIntInt));
TS_ASSERT_EQUALS(TypeNode::leastCommonTypeNode(TypeNode::fromType(pairRealReal), TypeNode::fromType(pairRealReal)).toType(), pairRealReal);
- TS_ASSERT_EQUALS(TypeNode::leastCommonTypeNode(TypeNode::fromType(pairIntReal), TypeNode::fromType(pairRealReal)).toType(), pairRealReal);
- TS_ASSERT_EQUALS(TypeNode::leastCommonTypeNode(TypeNode::fromType(pairRealInt), TypeNode::fromType(pairRealReal)).toType(), pairRealReal);
- TS_ASSERT_EQUALS(TypeNode::leastCommonTypeNode(TypeNode::fromType(pairIntInt), TypeNode::fromType(pairRealReal)).toType(), pairRealReal);
- TS_ASSERT_EQUALS(TypeNode::leastCommonTypeNode(TypeNode::fromType(pairRealReal), TypeNode::fromType(pairRealInt)).toType(), pairRealReal);
- TS_ASSERT_EQUALS(TypeNode::leastCommonTypeNode(TypeNode::fromType(pairIntReal), TypeNode::fromType(pairRealInt)).toType(), pairRealReal);
+ TS_ASSERT(TypeNode::leastCommonTypeNode(TypeNode::fromType(pairIntReal), TypeNode::fromType(pairRealReal)).isNull());
+ TS_ASSERT(TypeNode::leastCommonTypeNode(TypeNode::fromType(pairRealInt), TypeNode::fromType(pairRealReal)).isNull());
+ TS_ASSERT(TypeNode::leastCommonTypeNode(TypeNode::fromType(pairIntInt), TypeNode::fromType(pairRealReal)).isNull());
+ TS_ASSERT(TypeNode::leastCommonTypeNode(TypeNode::fromType(pairRealReal), TypeNode::fromType(pairRealInt)).isNull());
+ TS_ASSERT(TypeNode::leastCommonTypeNode(TypeNode::fromType(pairIntReal), TypeNode::fromType(pairRealInt)).isNull());
TS_ASSERT_EQUALS(TypeNode::leastCommonTypeNode(TypeNode::fromType(pairRealInt), TypeNode::fromType(pairRealInt)).toType(), pairRealInt);
- TS_ASSERT_EQUALS(TypeNode::leastCommonTypeNode(TypeNode::fromType(pairIntInt), TypeNode::fromType(pairRealInt)).toType(), pairRealInt);
- TS_ASSERT_EQUALS(TypeNode::leastCommonTypeNode(TypeNode::fromType(pairRealReal), TypeNode::fromType(pairIntReal)).toType(), pairRealReal);
+ TS_ASSERT(TypeNode::leastCommonTypeNode(TypeNode::fromType(pairIntInt), TypeNode::fromType(pairRealInt)).isNull());
+ TS_ASSERT(TypeNode::leastCommonTypeNode(TypeNode::fromType(pairRealReal), TypeNode::fromType(pairIntReal)).isNull());
TS_ASSERT_EQUALS(TypeNode::leastCommonTypeNode(TypeNode::fromType(pairIntReal), TypeNode::fromType(pairIntReal)).toType(), pairIntReal);
- TS_ASSERT_EQUALS(TypeNode::leastCommonTypeNode(TypeNode::fromType(pairRealInt), TypeNode::fromType(pairIntReal)).toType(), pairRealReal);
- TS_ASSERT_EQUALS(TypeNode::leastCommonTypeNode(TypeNode::fromType(pairIntInt), TypeNode::fromType(pairIntReal)).toType(), pairIntReal);
- TS_ASSERT_EQUALS(TypeNode::leastCommonTypeNode(TypeNode::fromType(pairRealReal), TypeNode::fromType(pairIntInt)).toType(), pairRealReal);
- TS_ASSERT_EQUALS(TypeNode::leastCommonTypeNode(TypeNode::fromType(pairIntReal), TypeNode::fromType(pairIntInt)).toType(), pairIntReal);
- TS_ASSERT_EQUALS(TypeNode::leastCommonTypeNode(TypeNode::fromType(pairRealInt), TypeNode::fromType(pairIntInt)).toType(), pairRealInt);
+ TS_ASSERT(TypeNode::leastCommonTypeNode(TypeNode::fromType(pairRealInt), TypeNode::fromType(pairIntReal)).isNull());
+ TS_ASSERT(TypeNode::leastCommonTypeNode(TypeNode::fromType(pairIntInt), TypeNode::fromType(pairIntReal)).isNull());
+ TS_ASSERT(TypeNode::leastCommonTypeNode(TypeNode::fromType(pairRealReal), TypeNode::fromType(pairIntInt)).isNull());
+ TS_ASSERT(TypeNode::leastCommonTypeNode(TypeNode::fromType(pairIntReal), TypeNode::fromType(pairIntInt)).isNull());
+ TS_ASSERT(TypeNode::leastCommonTypeNode(TypeNode::fromType(pairRealInt), TypeNode::fromType(pairIntInt)).isNull());
TS_ASSERT_EQUALS(TypeNode::leastCommonTypeNode(TypeNode::fromType(pairIntInt), TypeNode::fromType(pairIntInt)).toType(), pairIntInt);
}
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback