open-axiom repository from github
++ Contributed by Stephen Wilson.
)abbrev domain CWMMT CompWithMappingModeTest
CompWithMappingModeTest() : Exports == Implementation where
Exports == with
runTests : () -> Boolean
Implementation == add
REC ==> Record(field1 : Integer, field2 : String)
UN ==> Union(rec : REC, str : String)
-- The following function accepts a map as argument to test
-- compWithMappingMode.
mapper(fn : Integer -> Boolean, n: Integer) : Boolean == fn n
-- We use the following as a target for currying and to pass to
-- mapper above.
pred(x: Integer, y: Integer) : Boolean ==
x < y => true
true
test1(x : Integer) : Boolean ==
r : REC := [1, ""]
mapper(pred(r.field1, #1), 1)
test2(x : Integer) : Boolean ==
r : REC := [1, ""]
i : Integer := 1
mapper(pred(r.field1 + x, #1), 1)
test3(x : Integer) : Boolean ==
r : REC := [1, ""]
i : Integer := 1
mapper(pred(r.field1 + i, #1), 1)
test4(x : Integer) : Boolean ==
r : REC := [1, ""]
i : Integer := 1
mapper(pred((r.field1 + min(#(r.field2), i)), #1), 1)
test5(x : Integer) : Boolean ==
r : REC := [1, ""]
i : Integer := 1
mapper(pred((r.field1 + min(#(r.field2), i + x)), #1), 1)
test6(x : Integer) : Boolean ==
u : UN := [[1, ""]$REC]
mapper(pred(u.rec.field1, #1), 1)
test7(x : Integer) : Boolean ==
u : UN := [[1, ""]$REC]
i : Integer := 1
mapper(pred(u.rec.field1 + x, #1), 1)
test8(x : Integer) : Boolean ==
u : UN := [[1, ""]$REC]
i : Integer := 1
mapper(pred(u.rec.field1 + i, #1), 1)
test9(x : Integer) : Boolean ==
u : UN := [[1, ""]$REC]
i : Integer := 1
mapper(pred((u.rec.field1 + min(#(u.rec.field2), i)), #1), 1)
test10(x : Integer) : Boolean ==
u : UN := [[1, ""]$REC]
i : Integer := 1
mapper(pred((u.rec.field1 + min(#(u.rec.field2), i + x)), #1), 1)
runTests() : Boolean ==
test1(1) and test2(1) and test3(1) _
and test4(1) and test5(1) _
and test6(1) and test7(1) _
and test8(1) and test9(1) _
and test10(1)