github.com/jimmyx0x/go-ethereum@v1.10.28/core/asm/lex_test.go (about) 1 // Copyright 2017 The go-ethereum Authors 2 // This file is part of the go-ethereum library. 3 // 4 // The go-ethereum library is free software: you can redistribute it and/or modify 5 // it under the terms of the GNU Lesser General Public License as published by 6 // the Free Software Foundation, either version 3 of the License, or 7 // (at your option) any later version. 8 // 9 // The go-ethereum library is distributed in the hope that it will be useful, 10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 // GNU Lesser General Public License for more details. 13 // 14 // You should have received a copy of the GNU Lesser General Public License 15 // along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>. 16 17 package asm 18 19 import ( 20 "reflect" 21 "testing" 22 ) 23 24 func lexAll(src string) []token { 25 ch := Lex([]byte(src), false) 26 27 var tokens []token 28 for i := range ch { 29 tokens = append(tokens, i) 30 } 31 return tokens 32 } 33 34 func TestLexer(t *testing.T) { 35 tests := []struct { 36 input string 37 tokens []token 38 }{ 39 { 40 input: ";; this is a comment", 41 tokens: []token{{typ: lineStart}, {typ: eof}}, 42 }, 43 { 44 input: "0x12345678", 45 tokens: []token{{typ: lineStart}, {typ: number, text: "0x12345678"}, {typ: eof}}, 46 }, 47 { 48 input: "0x123ggg", 49 tokens: []token{{typ: lineStart}, {typ: number, text: "0x123"}, {typ: element, text: "ggg"}, {typ: eof}}, 50 }, 51 { 52 input: "12345678", 53 tokens: []token{{typ: lineStart}, {typ: number, text: "12345678"}, {typ: eof}}, 54 }, 55 { 56 input: "123abc", 57 tokens: []token{{typ: lineStart}, {typ: number, text: "123"}, {typ: element, text: "abc"}, {typ: eof}}, 58 }, 59 { 60 input: "0123abc", 61 tokens: []token{{typ: lineStart}, {typ: number, text: "0123"}, {typ: element, text: "abc"}, {typ: eof}}, 62 }, 63 { 64 input: "00123abc", 65 tokens: []token{{typ: lineStart}, {typ: number, text: "00123"}, {typ: element, text: "abc"}, {typ: eof}}, 66 }, 67 { 68 input: "@foo", 69 tokens: []token{{typ: lineStart}, {typ: label, text: "foo"}, {typ: eof}}, 70 }, 71 { 72 input: "@label123", 73 tokens: []token{{typ: lineStart}, {typ: label, text: "label123"}, {typ: eof}}, 74 }, 75 } 76 77 for _, test := range tests { 78 tokens := lexAll(test.input) 79 if !reflect.DeepEqual(tokens, test.tokens) { 80 t.Errorf("input %q\ngot: %+v\nwant: %+v", test.input, tokens, test.tokens) 81 } 82 } 83 }