emit: refactor tests

Add structure and call Bytes() method on buffer once.
This commit is contained in:
Evgenii Stratonikov 2020-02-03 17:50:25 +03:00
parent 1400ecfdde
commit 698c647f07

View file

@ -10,25 +10,37 @@ import (
) )
func TestEmitInt(t *testing.T) { func TestEmitInt(t *testing.T) {
buf := new(bytes.Buffer) t.Run("1-byte int", func(t *testing.T) {
Int(buf, 10) buf := new(bytes.Buffer)
assert.Equal(t, opcode.Opcode(buf.Bytes()[0]), opcode.PUSH10) Int(buf, 10)
buf.Reset() result := buf.Bytes()
Int(buf, 100) assert.EqualValues(t, opcode.PUSH10, result[0])
assert.Equal(t, buf.Bytes()[0], uint8(1)) })
assert.Equal(t, buf.Bytes()[1], uint8(100))
buf.Reset() t.Run("2-byte int", func(t *testing.T) {
Int(buf, 1000) buf := new(bytes.Buffer)
assert.Equal(t, buf.Bytes()[0], uint8(2)) Int(buf, 100)
assert.Equal(t, buf.Bytes()[1:3], []byte{0xe8, 0x03}) result := buf.Bytes()
assert.EqualValues(t, opcode.PUSHBYTES1, result[0])
assert.EqualValues(t, 100, result[1])
})
t.Run("4-byte int", func(t *testing.T) {
buf := new(bytes.Buffer)
Int(buf, 1000)
result := buf.Bytes()
assert.EqualValues(t, opcode.PUSHBYTES2, result[0])
assert.EqualValues(t, 1000, binary.LittleEndian.Uint16(result[1:3]))
})
} }
func TestEmitBool(t *testing.T) { func TestEmitBool(t *testing.T) {
buf := new(bytes.Buffer) buf := new(bytes.Buffer)
Bool(buf, true) Bool(buf, true)
Bool(buf, false) Bool(buf, false)
assert.Equal(t, opcode.Opcode(buf.Bytes()[0]), opcode.PUSH1) result := buf.Bytes()
assert.Equal(t, opcode.Opcode(buf.Bytes()[1]), opcode.PUSH0) assert.Equal(t, opcode.Opcode(result[0]), opcode.PUSH1)
assert.Equal(t, opcode.Opcode(result[1]), opcode.PUSH0)
} }
func TestEmitString(t *testing.T) { func TestEmitString(t *testing.T) {
@ -49,9 +61,10 @@ func TestEmitSyscall(t *testing.T) {
buf := new(bytes.Buffer) buf := new(bytes.Buffer)
for _, syscall := range syscalls { for _, syscall := range syscalls {
Syscall(buf, syscall) Syscall(buf, syscall)
assert.Equal(t, opcode.Opcode(buf.Bytes()[0]), opcode.SYSCALL) result := buf.Bytes()
assert.Equal(t, buf.Bytes()[1], uint8(len(syscall))) assert.Equal(t, opcode.Opcode(result[0]), opcode.SYSCALL)
assert.Equal(t, buf.Bytes()[2:], []byte(syscall)) assert.Equal(t, result[1], uint8(len(syscall)))
assert.Equal(t, result[2:], []byte(syscall))
buf.Reset() buf.Reset()
} }
} }
@ -59,7 +72,8 @@ func TestEmitSyscall(t *testing.T) {
func TestEmitCall(t *testing.T) { func TestEmitCall(t *testing.T) {
buf := new(bytes.Buffer) buf := new(bytes.Buffer)
Call(buf, opcode.JMP, 100) Call(buf, opcode.JMP, 100)
assert.Equal(t, opcode.Opcode(buf.Bytes()[0]), opcode.JMP) result := buf.Bytes()
label := binary.LittleEndian.Uint16(buf.Bytes()[1:3]) assert.Equal(t, opcode.Opcode(result[0]), opcode.JMP)
label := binary.LittleEndian.Uint16(result[1:3])
assert.Equal(t, label, uint16(100)) assert.Equal(t, label, uint16(100))
} }