github.com/klaytn/klaytn@v1.12.1/blockchain/asm/compiler_test.go (about)

     1  // Modifications Copyright 2020 The klaytn Authors
     2  // Copyright 2019 The go-ethereum Authors
     3  // This file is part of the go-ethereum library.
     4  //
     5  // The go-ethereum library is free software: you can redistribute it and/or modify
     6  // it under the terms of the GNU Lesser General Public License as published by
     7  // the Free Software Foundation, either version 3 of the License, or
     8  // (at your option) any later version.
     9  //
    10  // The go-ethereum library is distributed in the hope that it will be useful,
    11  // but WITHOUT ANY WARRANTY; without even the implied warranty of
    12  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    13  // GNU Lesser General Public License for more details.
    14  //
    15  // You should have received a copy of the GNU Lesser General Public License
    16  // along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
    17  //
    18  // This file is derived from core/asm/compiler_test.go (2020/11/25).
    19  // Modified and improved for the klaytn development.
    20  
    21  package asm
    22  
    23  import (
    24  	"testing"
    25  )
    26  
    27  func TestCompiler(t *testing.T) {
    28  	tests := []struct {
    29  		input, output string
    30  	}{
    31  		{
    32  			input: `
    33  	GAS
    34  	label:
    35  	PUSH @label
    36  `,
    37  			output: "5a5b6300000001",
    38  		},
    39  		{
    40  			input: `
    41  	PUSH @label
    42  	label:
    43  `,
    44  			output: "63000000055b",
    45  		},
    46  		{
    47  			input: `
    48  	PUSH @label
    49  	JUMP
    50  	label:
    51  `,
    52  			output: "6300000006565b",
    53  		},
    54  		{
    55  			input: `
    56  	JUMP @label
    57  	label:
    58  `,
    59  			output: "6300000006565b",
    60  		},
    61  	}
    62  	for _, test := range tests {
    63  		ch := Lex([]byte(test.input), false)
    64  		c := NewCompiler(false)
    65  		c.Feed(ch)
    66  		output, err := c.Compile()
    67  		if len(err) != 0 {
    68  			t.Errorf("compile error: %v\ninput: %s", err, test.input)
    69  			continue
    70  		}
    71  		if output != test.output {
    72  			t.Errorf("incorrect output\ninput: %sgot:  %s\nwant: %s\n", test.input, output, test.output)
    73  		}
    74  	}
    75  }