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 }