Merge pull request #2525 from nspcc-dev/immutable-items

vm: implement immutable stackitems
This commit is contained in:
Roman Khimov 2022-05-31 10:36:56 +03:00 committed by GitHub
commit e1607e23c2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
11 changed files with 112 additions and 21 deletions

View file

@ -530,7 +530,10 @@ func TestDeepCopy(t *testing.T) {
}
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
actual := DeepCopy(tc.item)
actual := DeepCopy(tc.item, false)
if immut, ok := tc.item.(Immutable); ok {
immut.MarkAsReadOnly() // tiny hack for test to be able to compare object references.
}
require.Equal(t, tc.item, actual)
if tc.item.Type() != BooleanT {
require.False(t, actual == tc.item)
@ -539,7 +542,7 @@ func TestDeepCopy(t *testing.T) {
}
t.Run("Null", func(t *testing.T) {
require.Equal(t, Null{}, DeepCopy(Null{}))
require.Equal(t, Null{}, DeepCopy(Null{}, false))
})
t.Run("Array", func(t *testing.T) {
@ -547,7 +550,8 @@ func TestDeepCopy(t *testing.T) {
arr.value[0] = NewBool(true)
arr.value[1] = arr
actual := DeepCopy(arr)
actual := DeepCopy(arr, false)
arr.isReadOnly = true // tiny hack for test to be able to compare object references.
require.Equal(t, arr, actual)
require.False(t, arr == actual)
require.True(t, actual == actual.(*Array).value[1])
@ -558,7 +562,8 @@ func TestDeepCopy(t *testing.T) {
arr.value[0] = NewBool(true)
arr.value[1] = arr
actual := DeepCopy(arr)
actual := DeepCopy(arr, false)
arr.isReadOnly = true // tiny hack for test to be able to compare object references.
require.Equal(t, arr, actual)
require.False(t, arr == actual)
require.True(t, actual == actual.(*Struct).value[1])
@ -569,7 +574,8 @@ func TestDeepCopy(t *testing.T) {
m.value[0] = MapElement{Key: NewBool(true), Value: m}
m.value[1] = MapElement{Key: NewBigInteger(big.NewInt(1)), Value: NewByteArray([]byte{1, 2, 3})}
actual := DeepCopy(m)
actual := DeepCopy(m, false)
m.isReadOnly = true // tiny hack for test to be able to compare object references.
require.Equal(t, m, actual)
require.False(t, m == actual)
require.True(t, actual == actual.(*Map).value[0].Value)