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))
}

func TestByteArrConversion(t *testing.T) {

	var num int64 = 100000

	a := testMakeStackInt(t, num)
	ba, err := a.ByteArray()
	assert.Nil(t, err)

	have, err := ba.Integer()
	assert.Nil(t, err)

	assert.Equal(t, num, have.val.Int64())

}