package text_test import ( "jinx/pkg/lang/vm/text" "strings" "testing" "github.com/stretchr/testify/require" ) func TestDecompileSimple(t *testing.T) { src := ` push_int 1 push_int 2 add ` expected := ` push_int 1 push_int 2 add ` test(t, src, expected) } func TestDecompileValues(t *testing.T) { src := ` push_int 1 push_string "foo" push_float 3.14 push_function @foo halt @foo: push_int 1 ret ` // No label names yet. expected := ` push_int 1 push_string "foo" push_float 3.14 push_function @33 halt push_int 1 ret ` test(t, src, expected) } func test(t *testing.T, code string, expected string) { expectedLines := strings.Split(expected, "\n") trimmedExpectedLines := make([]string, 0, len(expectedLines)) for _, line := range expectedLines { trimmedLine := strings.TrimSpace(line) if trimmedLine == "" { continue } trimmedExpectedLines = append(trimmedExpectedLines, trimmedLine) } trimmedExpected := strings.Join(trimmedExpectedLines, "\n") comp := text.NewCompiler(strings.NewReader(code)) resCompiled, err := comp.Compile() require.NoError(t, err) decomp := text.NewDecompiler(resCompiled, false) resDecompiled := decomp.Decompile() require.Equal(t, trimmedExpected, resDecompiled) }