Skip to content

Commit

Permalink
also test type equality
Browse files Browse the repository at this point in the history
  • Loading branch information
turbolent committed Apr 8, 2021
1 parent bb99473 commit 7c7dd55
Showing 1 changed file with 55 additions and 41 deletions.
96 changes: 55 additions & 41 deletions runtime/tests/interpreter/condition_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -973,48 +973,62 @@ func TestInterpretIsInstanceCheckInPreCondition(t *testing.T) {

t.Parallel()

inter := parseCheckAndInterpretWithOptions(t,
`
contract interface CI {
struct X {
fun use(_ x: X) {
pre {
x.isInstance(self.getType())
}
}
}
}
contract C1: CI {
struct X {
fun use(_ x: CI.X) {}
}
}
contract C2: CI {
struct X {
fun use(_ x: CI.X) {}
}
}
fun test1() {
C1.X().use(C1.X())
}
fun test2() {
C1.X().use(C2.X())
}
`,
ParseCheckAndInterpretOptions{
Options: []interpreter.Option{
makeContractValueHandler(nil, nil, nil),
test := func(condition string) {

inter := parseCheckAndInterpretWithOptions(t,
fmt.Sprintf(
`
contract interface CI {
struct X {
fun use(_ x: X) {
pre {
%s
}
}
}
}
contract C1: CI {
struct X {
fun use(_ x: CI.X) {}
}
}
contract C2: CI {
struct X {
fun use(_ x: CI.X) {}
}
}
fun test1() {
C1.X().use(C1.X())
}
fun test2() {
C1.X().use(C2.X())
}
`,
condition,
),
ParseCheckAndInterpretOptions{
Options: []interpreter.Option{
makeContractValueHandler(nil, nil, nil),
},
},
},
)
)

_, err := inter.Invoke("test1")
require.NoError(t, err)
_, err := inter.Invoke("test1")
require.NoError(t, err)

_, err = inter.Invoke("test2")
require.Error(t, err)
_, err = inter.Invoke("test2")
require.Error(t, err)
}

t.Run("isInstance", func(t *testing.T) {
test("x.isInstance(self.getType())")
})

t.Run("equality", func(t *testing.T) {
test("x.getType() == self.getType()")
})
}

0 comments on commit 7c7dd55

Please sign in to comment.