From 9fbcdd86cc70d1572a800abddd5ceccaef7671ca Mon Sep 17 00:00:00 2001 From: PhatPhuckDave Date: Tue, 30 Jul 2024 22:14:19 +0200 Subject: [PATCH] Add encode benchmarks --- encoding/gsm7.go | 21 ++++++++++----------- encoding/gsm7_test.go | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 11 deletions(-) diff --git a/encoding/gsm7.go b/encoding/gsm7.go index acdd28d..50894cb 100644 --- a/encoding/gsm7.go +++ b/encoding/gsm7.go @@ -3,7 +3,6 @@ package encoding import ( "bytes" "fmt" - "log" ) type GSM7Coder struct{} @@ -82,11 +81,11 @@ func (c *GSM7Coder) Decode(buf *bytes.Buffer) (string, error) { if bitshift == 7 { leap = true } - log.Printf("Index:%-3d Offset:%-3d Bitshift:%-3d CurrentByte:%08b (%-3d) OffsetByte(%-3d):%08b (%-3d) Leap:%5v", index, offset, bitshift, gsm7[index], gsm7[index], index+offset, gsm7[index+offset], gsm7[index+offset], leap) + // log.Printf("Index:%-3d Offset:%-3d Bitshift:%-3d CurrentByte:%08b (%-3d) OffsetByte(%-3d):%08b (%-3d) Leap:%5v", index, offset, bitshift, gsm7[index], gsm7[index], index+offset, gsm7[index+offset], gsm7[index+offset], leap) mask := byte(255 << (8 - bitshift)) masked := (mask & octet) >> (8 - bitshift) - log.Printf("Index:%-3d Offset:%-3d Bitshift:%-3d Mask:%08b Masked:%08b", index, offset, bitshift, mask, masked) + // log.Printf("Index:%-3d Offset:%-3d Bitshift:%-3d Mask:%08b Masked:%08b", index, offset, bitshift, mask, masked) if leap { InsertAt(&gsm7, index+offset, masked) } else { @@ -97,7 +96,7 @@ func (c *GSM7Coder) Decode(buf *bytes.Buffer) (string, error) { // Move the remaining bit once to the right to form septet instead of octet gsm7[index] >>= 1 - log.Printf("Index:%-3d Offset:%-3d Bitshift:%-3d CurrentByte:%08b (%-3d) OffsetByte(%-3d):%08b (%-3d) Leap:%5v", index, offset, bitshift, gsm7[index], gsm7[index], index+offset, gsm7[index+offset], gsm7[index+offset], leap) + // log.Printf("Index:%-3d Offset:%-3d Bitshift:%-3d CurrentByte:%08b (%-3d) OffsetByte(%-3d):%08b (%-3d) Leap:%5v", index, offset, bitshift, gsm7[index], gsm7[index], index+offset, gsm7[index+offset], gsm7[index+offset], leap) leap = false continue @@ -107,17 +106,17 @@ func (c *GSM7Coder) Decode(buf *bytes.Buffer) (string, error) { if index == len(gsm7)-1 && gsm7[index] > 0 { buf.WriteByte(gsm7[index]) } - log.Printf("Index:%-3d Offset:%-3d Bitshift:%-3d CurrentByte:%08b (%-3d) OffsetByte:%08b (%-3d) Leap:%5v", index, offset, bitshift, gsm7[index], gsm7[index], gsm7[index-offset], gsm7[index-offset], leap) + // log.Printf("Index:%-3d Offset:%-3d Bitshift:%-3d CurrentByte:%08b (%-3d) OffsetByte:%08b (%-3d) Leap:%5v", index, offset, bitshift, gsm7[index], gsm7[index], gsm7[index-offset], gsm7[index-offset], leap) if bitshift >= 7 { if leap { - log.Printf("Shift at Index:%-3d Offset:%-3d Bitshift:%-3d", index, offset, bitshift) + // log.Printf("Shift at Index:%-3d Offset:%-3d Bitshift:%-3d", index, offset, bitshift) leap = false bitshift = 0 offset++ shift = true continue } - log.Printf("Leap at Index:%-3d Offset:%-3d Bitshift:%-3d", index, offset, bitshift) + // log.Printf("Leap at Index:%-3d Offset:%-3d Bitshift:%-3d", index, offset, bitshift) leap = true bitshift = 6 } @@ -125,10 +124,10 @@ func (c *GSM7Coder) Decode(buf *bytes.Buffer) (string, error) { offset = 1 } } - log.Printf("Result: %+v", gsm7) - for _, v := range gsm7 { - log.Printf("%08b", v) - } + // log.Printf("Result: %+v", gsm7) + // for _, v := range gsm7 { + // log.Printf("%08b", v) + // } return string(gsm7), nil } diff --git a/encoding/gsm7_test.go b/encoding/gsm7_test.go index 8a0e471..2781079 100644 --- a/encoding/gsm7_test.go +++ b/encoding/gsm7_test.go @@ -217,4 +217,38 @@ func TestDeletesLastValue(t *testing.T) { if !bytes.Equal(data, expected) { t.Errorf("expected %v, got %v", expected, data) } +} + +// benchmark +func BenchmarkGSM7EncodeSimpleASCIIString(b *testing.B) { + coder := &GSM7Coder{} + var buf bytes.Buffer + input := "Sunshine" + b.ResetTimer() + + for i := 0; i < b.N; i++ { + coder.Encode(input, &buf) + } +} + +func BenchmarkGSM7EncodeComplexASCIIString(b *testing.B) { + coder := &GSM7Coder{} + var buf bytes.Buffer + input := "Golden rays play, Chasing night away." + b.ResetTimer() + + for i := 0; i < b.N; i++ { + coder.Encode(input, &buf) + } +} + +func BenchmarkGSM7EncodeComplex8nASCIIString(b *testing.B) { + coder := &GSM7Coder{} + var buf bytes.Buffer + input := "Ducks are fucking great, they quacks, O quackers, what the fuck." + b.ResetTimer() + + for i := 0; i < b.N; i++ { + coder.Encode(input, &buf) + } } \ No newline at end of file