mirror of
https://github.com/hanzozt/dilithium.git
synced 2026-10-30 20:38:17 +00:00
123 lines
3.3 KiB
Go
123 lines
3.3 KiB
Go
package westworld3
|
|
|
|
import (
|
|
"encoding/hex"
|
|
"fmt"
|
|
"github.com/stretchr/testify/assert"
|
|
"math/rand"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
var sampleAcks []Ack
|
|
var benchmarkData []byte
|
|
|
|
func init() {
|
|
rand.Seed(time.Now().UnixNano())
|
|
for i := 0; i < 127; i++ {
|
|
flip := rand.Intn(2)
|
|
if flip == 1 {
|
|
sampleAcks = append(sampleAcks, Ack{rand.Int31(), rand.Int31()})
|
|
} else {
|
|
value := rand.Int31()
|
|
sampleAcks = append(sampleAcks, Ack{value, value})
|
|
}
|
|
}
|
|
benchmarkData = make([]byte, 1+(127*8))
|
|
}
|
|
|
|
func TestSingleEqualAck(t *testing.T) {
|
|
acksIn := []Ack{{99, 99}}
|
|
|
|
data := make([]byte, 4)
|
|
sz, err := EncodeAcks(acksIn, data)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, uint32(4), sz)
|
|
assert.Zero(t, data[0]&ackSeriesMarker)
|
|
|
|
fmt.Println(hex.Dump(data))
|
|
|
|
acksOut, _, err := DecodeAcks(data)
|
|
assert.NoError(t, err)
|
|
assert.EqualValues(t, acksIn, acksOut)
|
|
}
|
|
|
|
func TestSingleRangeAck(t *testing.T) {
|
|
acksIn := []Ack{{1, 112}}
|
|
|
|
data := make([]byte, 1+8)
|
|
sz, err := EncodeAcks(acksIn, data)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, uint32(1+8), sz)
|
|
assert.Equal(t, ackSeriesMarker, data[0]&ackSeriesMarker)
|
|
|
|
fmt.Println(hex.Dump(data))
|
|
|
|
acksOut, _, err := DecodeAcks(data)
|
|
assert.NoError(t, err)
|
|
assert.EqualValues(t, acksIn, acksOut)
|
|
}
|
|
|
|
func TestSingleRangeSingle(t *testing.T) {
|
|
acksIn := []Ack{{66, 66}, {69, 99}, {111, 111}}
|
|
|
|
data := make([]byte, 1+4+8+4)
|
|
sz, err := EncodeAcks(acksIn, data)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, uint32(1+4+8+4), sz)
|
|
assert.Equal(t, ackSeriesMarker, data[0]&ackSeriesMarker)
|
|
|
|
fmt.Println(hex.Dump(data))
|
|
|
|
acksOut, _, err := DecodeAcks(data)
|
|
assert.NoError(t, err)
|
|
assert.EqualValues(t, acksIn, acksOut)
|
|
}
|
|
|
|
func TestFull127(t *testing.T) {
|
|
data := make([]byte, 1+(127*8)) // max, if all 127 acks in series are ranges
|
|
_, err := EncodeAcks(sampleAcks, data)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, ackSeriesMarker, data[0]&ackSeriesMarker)
|
|
|
|
fmt.Println(hex.Dump(data))
|
|
|
|
acksOut, _, err := DecodeAcks(data)
|
|
assert.NoError(t, err)
|
|
assert.EqualValues(t, sampleAcks, acksOut)
|
|
}
|
|
|
|
func benchmarkAckEncoder(sz int, b *testing.B) {
|
|
for i := 0; i < b.N; i++ {
|
|
_, err := EncodeAcks(sampleAcks[0:sz], benchmarkData)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
}
|
|
func BenchmarkAckEncoder1(b *testing.B) { benchmarkAckEncoder(1, b) }
|
|
func BenchmarkAckEncoder2(b *testing.B) { benchmarkAckEncoder(2, b) }
|
|
func BenchmarkAckEncoder4(b *testing.B) { benchmarkAckEncoder(4, b) }
|
|
func BenchmarkAckEncoder16(b *testing.B) { benchmarkAckEncoder(16, b) }
|
|
func BenchmarkAckEncoder64(b *testing.B) { benchmarkAckEncoder(64, b) }
|
|
func BenchmarkAckEncoder127(b *testing.B) { benchmarkAckEncoder(127, b) }
|
|
|
|
func benchmarkAckEncoderDecoder(sz int, b *testing.B) {
|
|
for i := 0; i < b.N; i++ {
|
|
_, err := EncodeAcks(sampleAcks[0:sz], benchmarkData)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
_, _, err = DecodeAcks(benchmarkData)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
}
|
|
func BenchmarkAckEncoderDecoder1(b *testing.B) { benchmarkAckEncoderDecoder(1, b) }
|
|
func BenchmarkAckEncoderDecoder2(b *testing.B) { benchmarkAckEncoderDecoder(2, b) }
|
|
func BenchmarkAckEncoderDecoder4(b *testing.B) { benchmarkAckEncoderDecoder(4, b) }
|
|
func BenchmarkAckEncoderDecoder16(b *testing.B) { benchmarkAckEncoderDecoder(16, b) }
|
|
func BenchmarkAckEncoderDecoder64(b *testing.B) { benchmarkAckEncoderDecoder(64, b) }
|
|
func BenchmarkAckEncoderDecoder127(b *testing.B) { benchmarkAckEncoderDecoder(127, b) }
|