VM: Add Sub, Mul, Mod LSH, RSH
This commit is contained in:
parent
c163ae2019
commit
64491a4d83
2 changed files with 92 additions and 0 deletions
|
@ -27,11 +27,46 @@ func (i *Int) Equal(s *Int) bool {
|
|||
|
||||
// Add will add two stackIntegers together
|
||||
func (i *Int) Add(s *Int) (*Int, error) {
|
||||
return &Int{
|
||||
val: new(big.Int).Add(i.val, s.val),
|
||||
}, nil
|
||||
}
|
||||
|
||||
// Sub will subtract two stackIntegers together
|
||||
func (i *Int) Sub(s *Int) (*Int, error) {
|
||||
return &Int{
|
||||
val: new(big.Int).Sub(i.val, s.val),
|
||||
}, nil
|
||||
}
|
||||
|
||||
// Mul will multiply two stackIntegers together
|
||||
func (i *Int) Mul(s *Int) (*Int, error) {
|
||||
return &Int{
|
||||
val: new(big.Int).Mul(i.val, s.val),
|
||||
}, nil
|
||||
}
|
||||
|
||||
// Mod will take the mod of two stackIntegers together
|
||||
func (i *Int) Mod(s *Int) (*Int, error) {
|
||||
return &Int{
|
||||
val: new(big.Int).Mod(i.val, s.val),
|
||||
}, nil
|
||||
}
|
||||
|
||||
// Rsh will shift the integer b to the right by `n` bits
|
||||
func (i *Int) Rsh(n *Int) (*Int, error) {
|
||||
return &Int{
|
||||
val: new(big.Int).Rsh(i.val, uint(n.val.Int64())),
|
||||
}, nil
|
||||
}
|
||||
|
||||
// Lsh will shift the integer b to the left by `n` bits
|
||||
func (i *Int) Lsh(n *Int) (*Int, error) {
|
||||
return &Int{
|
||||
val: new(big.Int).Lsh(i.val, uint(n.val.Int64())),
|
||||
}, nil
|
||||
}
|
||||
|
||||
// Integer will overwrite the default implementation
|
||||
// to allow go to cast this item as an integer.
|
||||
func (i *Int) Integer() (*Int, error) {
|
||||
|
|
57
pkg/vm/stack/int_test.go
Normal file
57
pkg/vm/stack/int_test.go
Normal file
|
@ -0,0 +1,57 @@
|
|||
package stack
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestAdd(t *testing.T) {
|
||||
a := testMakeStackInt(t, 10)
|
||||
b := testMakeStackInt(t, 20)
|
||||
expected := testMakeStackInt(t, 30)
|
||||
c, err := a.Add(b)
|
||||
assert.Nil(t, err)
|
||||
assert.Equal(t, true, expected.Equal(c))
|
||||
}
|
||||
func TestSub(t *testing.T) {
|
||||
a := testMakeStackInt(t, 30)
|
||||
b := testMakeStackInt(t, 200)
|
||||
expected := testMakeStackInt(t, 170)
|
||||
c, err := b.Sub(a)
|
||||
assert.Nil(t, err)
|
||||
assert.Equal(t, true, expected.Equal(c))
|
||||
}
|
||||
func TestMul(t *testing.T) {
|
||||
a := testMakeStackInt(t, 10)
|
||||
b := testMakeStackInt(t, 20)
|
||||
expected := testMakeStackInt(t, 200)
|
||||
c, err := a.Mul(b)
|
||||
assert.Nil(t, err)
|
||||
assert.Equal(t, true, expected.Equal(c))
|
||||
}
|
||||
func TestMod(t *testing.T) {
|
||||
a := testMakeStackInt(t, 10)
|
||||
b := testMakeStackInt(t, 20)
|
||||
expected := testMakeStackInt(t, 10)
|
||||
c, err := a.Mod(b)
|
||||
assert.Nil(t, err)
|
||||
assert.Equal(t, true, expected.Equal(c))
|
||||
}
|
||||
func TestLsh(t *testing.T) {
|
||||
a := testMakeStackInt(t, 23)
|
||||
b := testMakeStackInt(t, 8)
|
||||
expected := testMakeStackInt(t, 5888)
|
||||
c, err := a.Lsh(b)
|
||||
assert.Nil(t, err)
|
||||
assert.Equal(t, true, expected.Equal(c))
|
||||
}
|
||||
|
||||
func TestRsh(t *testing.T) {
|
||||
a := testMakeStackInt(t, 128)
|
||||
b := testMakeStackInt(t, 3)
|
||||
expected := testMakeStackInt(t, 16)
|
||||
c, err := a.Rsh(b)
|
||||
assert.Nil(t, err)
|
||||
assert.Equal(t, true, expected.Equal(c))
|
||||
}
|
Loading…
Reference in a new issue