arnaucube
arnaucube/keccak256-circomPublic Self-hosted repository
keccak256-circom/go-keccak256-bits-impl/utils_test.go
go-keccak256-bits-impl/utils_test.goRaw
  1package keccak
  2
  3import (
  4	"encoding/binary"
  5	"testing"
  6
  7	qt "github.com/frankban/quicktest"
  8)
  9
 10func TestUtilsBytesToBool(t *testing.T) {
 11	b := []byte{0, 1, 2, 3, 255, 254, 253}
 12	bits := bytesToBits(b)
 13	// for i := 0; i < len(b); i++ {
 14	//         fmt.Println(i*8, i*8+8, b[i], bits[i*8:i*8+8])
 15	// }
 16	qt.Assert(t, bits[0:8], qt.DeepEquals,
 17		[]bool{false, false, false, false, false, false, false, false})
 18	qt.Assert(t, bits[8:16], qt.DeepEquals,
 19		[]bool{true, false, false, false, false, false, false, false})
 20	qt.Assert(t, bits[16:24], qt.DeepEquals,
 21		[]bool{false, true, false, false, false, false, false, false})
 22	qt.Assert(t, bits[24:32], qt.DeepEquals,
 23		[]bool{true, true, false, false, false, false, false, false})
 24	qt.Assert(t, bits[32:40], qt.DeepEquals,
 25		[]bool{true, true, true, true, true, true, true, true})
 26	qt.Assert(t, bits[40:48], qt.DeepEquals,
 27		[]bool{false, true, true, true, true, true, true, true})
 28	qt.Assert(t, bits[48:56], qt.DeepEquals,
 29		[]bool{true, false, true, true, true, true, true, true})
 30}
 31
 32func TestUtilsBitsToBytes(t *testing.T) {
 33	b := []byte{0, 1, 2, 3, 255, 254, 253}
 34	bits := bytesToBits(b)
 35	b2 := bitsToBytes(bits)
 36	qt.Assert(t, b2, qt.DeepEquals, b)
 37}
 38
 39func TestUtilsU64(t *testing.T) {
 40	u := uint64(100)
 41	b := make([]byte, 8)
 42	binary.LittleEndian.PutUint64(b, u)
 43
 44	// toUint64
 45	// with bytes
 46	uRes := bytesToU64(b)
 47	qt.Assert(t, uRes, qt.Equals, u)
 48
 49	// with bits
 50	uRes = bitsToU64(bytesToBits(b))
 51	qt.Assert(t, uRes, qt.Equals, u)
 52
 53	// fromUint64
 54	// with bytes
 55	bRes := u64ToBytes(u)
 56	qt.Assert(t, bRes, qt.DeepEquals, b)
 57
 58	// with bits
 59	bResBits := u64ToBits(u)
 60	qt.Assert(t, bResBits, qt.DeepEquals, bytesToBits(b))
 61}
 62
 63func TestUtilsLeftShift(t *testing.T) {
 64	u := uint64(2)
 65	bits := u64ToBits(u)
 66	r := leftShift(bits, 1)
 67	qt.Assert(t, bitsToU64(r), qt.Equals, u<<1)
 68
 69	u = uint64(9)
 70	bits = u64ToBits(u)
 71	r = leftShift(bits, 1)
 72	qt.Assert(t, bitsToU64(r), qt.Equals, u<<1)
 73
 74	u = uint64(14)
 75	bits = u64ToBits(u)
 76	r = leftShift(bits, 63)
 77	qt.Assert(t, bitsToU64(r), qt.Equals, u<<63)
 78
 79	u = uint64(123456)
 80	bits = u64ToBits(u)
 81	r = leftShift(bits, 1)
 82	qt.Assert(t, bitsToU64(r), qt.Equals, u<<1)
 83}
 84func TestUtilsRightShift(t *testing.T) {
 85	u := uint64(2)
 86	bits := u64ToBits(u)
 87	r := rightShift(bits, 1)
 88	qt.Assert(t, bitsToU64(r), qt.Equals, u>>1)
 89
 90	u = uint64(9)
 91	bits = u64ToBits(u)
 92	r = rightShift(bits, 1)
 93	qt.Assert(t, bitsToU64(r), qt.Equals, u>>1)
 94
 95	u = uint64(14)
 96	bits = u64ToBits(u)
 97	r = rightShift(bits, 63)
 98	qt.Assert(t, bitsToU64(r), qt.Equals, u>>63)
 99
100	u = uint64(123456)
101	bits = u64ToBits(u)
102	r = rightShift(bits, 1)
103	qt.Assert(t, bitsToU64(r), qt.Equals, u>>1)
104}