Files
swift-mirror/test/Interpreter/writeback.swift
Joe Groff 50312c847f Add interpreter test for writeback behavior.
I broke writeback of byref arguments to functions with my RValue refactor, but assignment writeback (including destructuring assignments like (a, b) = (b, a)) should work. Add a test for it.

Swift SVN r4731
2013-04-13 22:35:36 +00:00

86 lines
1.2 KiB
Swift

// RUN: %swift %s -i | FileCheck %s
struct Foo {
var _x : (Int, Char, String)
var x : (Int, String, Char) {
get:
var (a, b, c) = _x
return (a, c, b)
set:
var (a, b, c) = value
_x = (a, c, b)
}
constructor(a:Int, b:String, c:Char) {
_x = (a, c, b)
}
}
var foo = Foo(1, "two", '3')
foo.x.0 = 4
foo.x.1 = "five"
foo.x.2 = '6'
// CHECK: 4
// CHECK: five
// CHECK: 6
println(foo.x.0)
println(foo.x.1)
println(foo.x.2)
struct Bar {
var _foo : Foo
var foo : Foo {
get:
return _foo
set:
_foo = value
}
}
var bar = Bar(Foo(1, "two", '3'))
bar.foo.x.0 = 7
bar.foo.x.1 = "eight"
bar.foo.x.2 = '9'
// CHECK: 7
// CHECK: eight
// CHECK: 9
println(bar.foo.x.0)
println(bar.foo.x.1)
println(bar.foo.x.2)
(foo, bar.foo) = (bar.foo, foo)
// CHECK: 4
// CHECK: five
// CHECK: 6
println(bar.foo.x.0)
println(bar.foo.x.1)
println(bar.foo.x.2)
(foo.x, bar.foo.x) = (bar.foo.x, foo.x)
// CHECK: 7
// CHECK: eight
// CHECK: 9
println(bar.foo.x.0)
println(bar.foo.x.1)
println(bar.foo.x.2)
(foo.x.0, bar.foo.x.0) = (bar.foo.x.0, foo.x.0)
// CHECK: 4
// CHECK: eight
// CHECK: 9
println(bar.foo.x.0)
println(bar.foo.x.1)
println(bar.foo.x.2)