Skip to content

Commit

Permalink
Add test for circular resouces
Browse files Browse the repository at this point in the history
  • Loading branch information
SupunS committed Sep 20, 2024
1 parent 60aeec6 commit f64af6f
Showing 1 changed file with 68 additions and 0 deletions.
68 changes: 68 additions & 0 deletions runtime/tests/interpreter/reference_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3291,3 +3291,71 @@ func TestInterpretHostFunctionReferenceInvalidation(t *testing.T) {
AssertValuesEqual(t, inter, expectedResult, result)
})
}

func TestInterpretCreatingCircularDependentResource(t *testing.T) {

t.Parallel()

t.Run("container container field", func(t *testing.T) {
t.Parallel()

inter := parseCheckAndInterpret(t, `
access(all) resource R {
access(mapping Identity) var x: @[R2]
init() {
self.x <- []
}
}
access(all) resource R2 {
access(all) let y: @R
init(r: @R) {
self.y <- r
}
}
access(all) fun main() {
var r <- create R()
var r2 <- create R2(r: <-r)
let ref = &r2.y as auth(Mutate) &R
ref.x.append(<-r2)
}
`)

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

t.Run("resource field", func(t *testing.T) {
t.Parallel()

inter := parseCheckAndInterpret(t, `
access(all) resource A {
access(self) var b: @B?
init() {
self.b <- nil
}
access(all) fun setB(_ b: @B) {
self.b <-! b
}
}
access(all) resource B {
access(all) let a: @A
init(_ a: @A) {
self.a <- a
}
}
access(all) fun main() {
var a <- create A()
var b <- create B(<-a)
let aRef = &b.a as auth(Mutate) &A
aRef.setB(<-b)
}
`)

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

0 comments on commit f64af6f

Please sign in to comment.