From 7a0746bcdd82f65eb8df5380e0a8800b0537b16c Mon Sep 17 00:00:00 2001 From: siyul-park Date: Mon, 25 May 2026 12:03:32 +0900 Subject: [PATCH] test: cover recent interp marshaling regressions --- interp/interp_test.go | 50 +++++++++++++++++++++++++++++++++++++------ 1 file changed, 44 insertions(+), 6 deletions(-) diff --git a/interp/interp_test.go b/interp/interp_test.go index ce932c0..82a61c4 100644 --- a/interp/interp_test.go +++ b/interp/interp_test.go @@ -2204,14 +2204,34 @@ func TestInterpreter_Len(t *testing.T) { } func TestInterpreter_Alloc(t *testing.T) { - i := New(program.New(nil)) - defer i.Close() + t.Run("basic", func(t *testing.T) { + i := New(program.New(nil)) + defer i.Close() + + for _, v := range []types.Value{types.I32(7), types.BoxI32(3)} { + addr, err := i.Alloc(v) + require.NoError(t, err) + require.Greater(t, addr, 0) + } + }) + + t.Run("interns strings", func(t *testing.T) { + i := New(program.New(nil)) + defer i.Close() - for _, v := range []types.Value{types.I32(7), types.BoxI32(3)} { - addr, err := i.Alloc(v) + first, err := i.Alloc(types.String("same")) require.NoError(t, err) - require.Greater(t, addr, 0) - } + second, err := i.Alloc(types.String("same")) + require.NoError(t, err) + require.Equal(t, first, second) + require.Equal(t, 2, i.rc[first]) + + require.NoError(t, i.Release(first)) + require.Contains(t, i.interned, "same") + + require.NoError(t, i.Release(second)) + require.NotContains(t, i.interned, "same") + }) } func TestInterpreter_Load(t *testing.T) { @@ -3831,6 +3851,24 @@ func TestInterpreter_Unmarshal(t *testing.T) { require.Equal(t, int32(4), *out) }) + t.Run("host object pointer target", func(t *testing.T) { + i := New(program.New(nil)) + defer i.Close() + + id := hostUserID(41) + got, err := i.Marshal(&id) + require.NoError(t, err) + + ho, ok := got.(*HostObject) + require.True(t, ok) + ho.SetField(0, types.BoxI64(99)) + + var out *hostUserID + require.NoError(t, i.Unmarshal(got, &out)) + require.NotNil(t, out) + require.Equal(t, hostUserID(99), *out) + }) + t.Run("value target", func(t *testing.T) { i := New(program.New(nil)) defer i.Close()