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}