vm: fix INVERT behaviour for converted values

Tests added were failing before this change.
This commit is contained in:
Roman Khimov 2019-12-17 14:01:15 +03:00
parent 4b4e492954
commit c596a6b273
2 changed files with 17 additions and 2 deletions

View file

@ -677,8 +677,9 @@ func (v *VM) execute(ctx *Context, op opcode.Opcode, parameter []byte) (err erro
// Bit operations. // Bit operations.
case opcode.INVERT: case opcode.INVERT:
// inplace // inplace
a := v.estack.Peek(0).BigInt() e := v.estack.Peek(0)
a.Not(a) i := e.BigInt()
e.value = makeStackItem(i.Not(i))
case opcode.AND: case opcode.AND:
b := v.estack.Pop().BigInt() b := v.estack.Pop().BigInt()

View file

@ -1759,6 +1759,20 @@ func TestINVERTgood3(t *testing.T) {
assert.Equal(t, int64(-0x6A), vm.estack.Peek(0).BigInt().Int64()) assert.Equal(t, int64(-0x6A), vm.estack.Peek(0).BigInt().Int64())
} }
func TestINVERTWithConversion1(t *testing.T) {
prog := makeProgram(opcode.PUSHDATA2, 0, 0, opcode.INVERT)
vm := load(prog)
runVM(t, vm)
assert.Equal(t, int64(-1), vm.estack.Peek(0).BigInt().Int64())
}
func TestINVERTWithConversion2(t *testing.T) {
prog := makeProgram(opcode.PUSH0, opcode.PUSH1, opcode.NUMEQUAL, opcode.INVERT)
vm := load(prog)
runVM(t, vm)
assert.Equal(t, int64(-1), vm.estack.Peek(0).BigInt().Int64())
}
func TestCATBadNoArgs(t *testing.T) { func TestCATBadNoArgs(t *testing.T) {
prog := makeProgram(opcode.CAT) prog := makeProgram(opcode.CAT)
vm := load(prog) vm := load(prog)