message-size-increase #3

Open
sashakoshka wants to merge 80 commits from message-size-increase into main
2 changed files with 12 additions and 10 deletions
Showing only changes of commit 8d5ba2fa39 - Show all commits

View File

@ -3,6 +3,8 @@ package tape
import "fmt"
// encoding and decoding functions must not make any allocations
const dataMaxSize = 0xFFFF
const uint16Max = 0xFFFF
@ -119,12 +121,12 @@ func DecodeGBEU[T UInt](data []byte) (T, error) {
}
// EncodeGBEU encodes an 8 to 64 bit growing integer into a given buffer.
func EncodeGBEU[T UInt] (buffer []byte, value T) (error) {
func EncodeGBEU[T UInt] (buffer []byte, value T) (n int, err error) {
window := (GBEUSize(value) - 1) * 7
index := 0
for window >= 0 {
if index >= len(buffer) { return fmt.Errorf("encoding GBEU: %w", ErrWrongBufferLength) }
if index >= len(buffer) { return index, fmt.Errorf("encoding GBEU: %w", ErrWrongBufferLength) }
chunk := uint8(value >> window) & 0x7F
if window > 0 {
@ -135,7 +137,7 @@ func EncodeGBEU[T UInt] (buffer []byte, value T) (error) {
index += 1
window -= 7
}
return nil
return index, nil
}
// GBEUSize returns the size (in octets) of a GBEU integer.

View File

@ -107,17 +107,17 @@ func TestGBEU(test *testing.T) {
255, 255, 255, 255,
255, 255, 255, 255,
}
err := EncodeGBEU[uint64](buffer[:0], 5)
_, err := EncodeGBEU[uint64](buffer[:0], 5)
if err == nil { test.Fatal("no error") }
if err.Error() != "encoding GBEU: wrong buffer length" { test.Fatal(err) }
err = EncodeGBEU[uint64](buffer[:2], 5555555)
_, err = EncodeGBEU[uint64](buffer[:2], 5555555)
if err == nil { test.Fatal("no error") }
if err.Error() != "encoding GBEU: wrong buffer length" { test.Fatal(err) }
_, err = DecodeGBEU[uint64](buffer[:0])
if err == nil { test.Fatal("no error") }
if err.Error() != "decoding GBEU: GBEU not terminated" { test.Fatal(err) }
err = EncodeGBEU[uint64](buffer[:], 0x97)
_, err = EncodeGBEU[uint64](buffer[:], 0x97)
if err != nil { test.Fatal(err) }
if correct, got := []byte { 0x81, 0x17 }, buffer[:2]; !slices.Equal(correct, got) {
message := "not equal:"
@ -132,7 +132,7 @@ func TestGBEU(test *testing.T) {
test.Fatalf("not equal: %x", got)
}
err = EncodeGBEU[uint64](buffer[:], 0x123456)
_, err = EncodeGBEU[uint64](buffer[:], 0x123456)
if err != nil { test.Fatal(err) }
if correct, got := []byte { 0xc8, 0xe8, 0x56 }, buffer[:3]; !slices.Equal(correct, got) {
message := "not equal:"
@ -148,7 +148,7 @@ func TestGBEU(test *testing.T) {
}
maxGBEU64 := []byte { 0x81, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F }
err = EncodeGBEU[uint64](buffer[:], 0xFFFFFFFFFFFFFFFF)
_, err = EncodeGBEU[uint64](buffer[:], 0xFFFFFFFFFFFFFFFF)
if err != nil { test.Fatal(err) }
if correct, got := maxGBEU64, buffer[:10]; !slices.Equal(correct, got) {
message := "not equal:"
@ -163,7 +163,7 @@ func TestGBEU(test *testing.T) {
test.Fatalf("not equal: %x", got)
}
err = EncodeGBEU[uint64](buffer[:], 11)
_, err = EncodeGBEU[uint64](buffer[:], 11)
if err != nil { test.Fatal(err) }
if correct, got := byte(0xb), buffer[0]; correct != got {
test.Fatal("not equal:", got)
@ -177,7 +177,7 @@ func TestGBEU(test *testing.T) {
for _ = range largeNumberNTestRounds {
buffer = [16]byte { }
number := uint64(rand.Int())
err := EncodeGBEU[uint64](buffer[:], number)
_, err := EncodeGBEU[uint64](buffer[:], number)
if err != nil { test.Fatal(err) }
decoded, err := DecodeGBEU[uint64](buffer[:])
if err != nil { test.Fatal(err) }