From 997a5dc37ac4003e24ef89bf962c8fa372b1db88 Mon Sep 17 00:00:00 2001 From: Charles Iliya Krempeaux Date: Sun, 7 Nov 2021 00:50:42 -0700 Subject: [PATCH] initial commits --- badvalue.go | 5 + serialize.go | 62 ++++++ serialize_test.go | 487 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 554 insertions(+) create mode 100644 badvalue.go create mode 100644 serialize.go create mode 100644 serialize_test.go diff --git a/badvalue.go b/badvalue.go new file mode 100644 index 0000000..91875bd --- /dev/null +++ b/badvalue.go @@ -0,0 +1,5 @@ +package iid + +const ( + badvalue = 0b0000000000000000000000000000000000000000000000000000000000000000 +) diff --git a/serialize.go b/serialize.go new file mode 100644 index 0000000..8bdfff4 --- /dev/null +++ b/serialize.go @@ -0,0 +1,62 @@ +package iid + +import ( + "bytes" + "encoding/base64" + "encoding/binary" + "io" +) + +var ( + base64encoding = base64.NewEncoding( + "-"+ + "0123456789"+ + "ABCDEFGHIJKLMNOPQRSTUVWXYZ"+ + "_"+ + "abcdefghijklmnopqrstuvwxyz", + ).WithPadding(base64.NoPadding) +) + +func serialize(value uint64) string { + + var storage bytes.Buffer + { + + err := binary.Write(&storage, binary.BigEndian, value) + if nil != err { + return "" + } + } + + var encoded string + { + encoded = base64encoding.EncodeToString(storage.Bytes()) + } + + return encoded +} + +func unserialize(value string) (uint64, bool) { + + var p []byte + { + var err error + + p, err = base64encoding.DecodeString(value) + if nil != err { + return badvalue, false + } + } + + var result uint64 + { + var reader io.Reader = bytes.NewReader(p) + + err := binary.Read(reader, binary.BigEndian, &result) + if nil != err { + return badvalue, false + } + } + + return result, true +} diff --git a/serialize_test.go b/serialize_test.go new file mode 100644 index 0000000..37f8a1a --- /dev/null +++ b/serialize_test.go @@ -0,0 +1,487 @@ +package iid + +import ( + "testing" +) + +func TestSerialize(t *testing.T) { + + tests := []struct{ + Value uint64 + Expected string + }{ + { + Value: 0b0000000000000000000000000000000000000000000000000000000000000000, + }, + + + + + + + + + + { + Value: 0b0000000000000000000000000000000000000000000000000000000000000001, + }, + { + Value: 0b0000000000000000000000000000000000000000000000000000000000000010, + }, + { + Value: 0b0000000000000000000000000000000000000000000000000000000000000100, + }, + { + Value: 0b0000000000000000000000000000000000000000000000000000000000001000, + }, + { + Value: 0b0000000000000000000000000000000000000000000000000000000000010000, + }, + { + Value: 0b0000000000000000000000000000000000000000000000000000000000100000, + }, + { + Value: 0b0000000000000000000000000000000000000000000000000000000001000000, + }, + { + Value: 0b0000000000000000000000000000000000000000000000000000000010000000, + }, + { + Value: 0b0000000000000000000000000000000000000000000000000000000100000000, + }, + { + Value: 0b0000000000000000000000000000000000000000000000000000001000000000, + }, + { + Value: 0b0000000000000000000000000000000000000000000000000000010000000000, + }, + { + Value: 0b0000000000000000000000000000000000000000000000000000100000000000, + }, + { + Value: 0b0000000000000000000000000000000000000000000000000001000000000000, + }, + { + Value: 0b0000000000000000000000000000000000000000000000000010000000000000, + }, + { + Value: 0b0000000000000000000000000000000000000000000000000100000000000000, + }, + { + Value: 0b0000000000000000000000000000000000000000000000001000000000000000, + }, + { + Value: 0b0000000000000000000000000000000000000000000000010000000000000000, + }, + { + Value: 0b0000000000000000000000000000000000000000000000100000000000000000, + }, + { + Value: 0b0000000000000000000000000000000000000000000001000000000000000000, + }, + { + Value: 0b0000000000000000000000000000000000000000000010000000000000000000, + }, + { + Value: 0b0000000000000000000000000000000000000000000100000000000000000000, + }, + { + Value: 0b0000000000000000000000000000000000000000001000000000000000000000, + }, + { + Value: 0b0000000000000000000000000000000000000000010000000000000000000000, + }, + { + Value: 0b0000000000000000000000000000000000000000100000000000000000000000, + }, + { + Value: 0b0000000000000000000000000000000000000001000000000000000000000000, + }, + { + Value: 0b0000000000000000000000000000000000000010000000000000000000000000, + }, + { + Value: 0b0000000000000000000000000000000000000100000000000000000000000000, + }, + { + Value: 0b0000000000000000000000000000000000001000000000000000000000000000, + }, + { + Value: 0b0000000000000000000000000000000000010000000000000000000000000000, + }, + { + Value: 0b0000000000000000000000000000000001000000000000000000000000000000, + }, + { + Value: 0b0000000000000000000000000000000010000000000000000000000000000000, + }, + { + Value: 0b0000000000000000000000000000000100000000000000000000000000000000, + }, + { + Value: 0b0000000000000000000000000000001000000000000000000000000000000000, + }, + { + Value: 0b0000000000000000000000000000010000000000000000000000000000000000, + }, + { + Value: 0b0000000000000000000000000000100000000000000000000000000000000000, + }, + { + Value: 0b0000000000000000000000000001000000000000000000000000000000000000, + }, + { + Value: 0b0000000000000000000000000010000000000000000000000000000000000000, + }, + { + Value: 0b0000000000000000000000000100000000000000000000000000000000000000, + }, + { + Value: 0b0000000000000000000000001000000000000000000000000000000000000000, + }, + { + Value: 0b0000000000000000000000010000000000000000000000000000000000000000, + }, + { + Value: 0b0000000000000000000000100000000000000000000000000000000000000000, + }, + { + Value: 0b0000000000000000000001000000000000000000000000000000000000000000, + }, + { + Value: 0b0000000000000000000010000000000000000000000000000000000000000000, + }, + { + Value: 0b0000000000000000000100000000000000000000000000000000000000000000, + }, + { + Value: 0b0000000000000000001000000000000000000000000000000000000000000000, + }, + { + Value: 0b0000000000000000010000000000000000000000000000000000000000000000, + }, + { + Value: 0b0000000000000000100000000000000000000000000000000000000000000000, + }, + { + Value: 0b0000000000000001000000000000000000000000000000000000000000000000, + }, + { + Value: 0b0000000000000010000000000000000000000000000000000000000000000000, + }, + { + Value: 0b0000000000000100000000000000000000000000000000000000000000000000, + }, + { + Value: 0b0000000000001000000000000000000000000000000000000000000000000000, + }, + { + Value: 0b0000000000010000000000000000000000000000000000000000000000000000, + }, + { + Value: 0b0000000000100000000000000000000000000000000000000000000000000000, + }, + { + Value: 0b0000000001000000000000000000000000000000000000000000000000000000, + }, + { + Value: 0b0000000010000000000000000000000000000000000000000000000000000000, + }, + { + Value: 0b0000000100000000000000000000000000000000000000000000000000000000, + }, + { + Value: 0b0000001000000000000000000000000000000000000000000000000000000000, + }, + { + Value: 0b0000010000000000000000000000000000000000000000000000000000000000, + }, + { + Value: 0b0000100000000000000000000000000000000000000000000000000000000000, + }, + { + Value: 0b0001000000000000000000000000000000000000000000000000000000000000, + }, + { + Value: 0b0010000000000000000000000000000000000000000000000000000000000000, + }, + { + Value: 0b0100000000000000000000000000000000000000000000000000000000000000, + }, + + + + + + + + + + { + Value: 0b0111111111111111111111111111111111111111111111111111111111111110, + }, + { + Value: 0b0111111111111111111111111111111111111111111111111111111111111101, + }, + { + Value: 0b0111111111111111111111111111111111111111111111111111111111111011, + }, + { + Value: 0b0111111111111111111111111111111111111111111111111111111111110111, + }, + { + Value: 0b0111111111111111111111111111111111111111111111111111111111101111, + }, + { + Value: 0b0111111111111111111111111111111111111111111111111111111111011111, + }, + { + Value: 0b0111111111111111111111111111111111111111111111111111111110111111, + }, + { + Value: 0b0111111111111111111111111111111111111111111111111111111101111111, + }, + { + Value: 0b0111111111111111111111111111111111111111111111111111111011111111, + }, + { + Value: 0b0111111111111111111111111111111111111111111111111111110111111111, + }, + { + Value: 0b0111111111111111111111111111111111111111111111111111101111111111, + }, + { + Value: 0b0111111111111111111111111111111111111111111111111111011111111111, + }, + { + Value: 0b0111111111111111111111111111111111111111111111111110111111111111, + }, + { + Value: 0b0111111111111111111111111111111111111111111111111101111111111111, + }, + { + Value: 0b0111111111111111111111111111111111111111111111111011111111111111, + }, + { + Value: 0b0111111111111111111111111111111111111111111111110111111111111111, + }, + { + Value: 0b0111111111111111111111111111111111111111111111101111111111111111, + }, + { + Value: 0b0111111111111111111111111111111111111111111111011111111111111111, + }, + { + Value: 0b0111111111111111111111111111111111111111111110111111111111111111, + }, + { + Value: 0b0111111111111111111111111111111111111111111101111111111111111111, + }, + { + Value: 0b0111111111111111111111111111111111111111111011111111111111111111, + }, + { + Value: 0b0111111111111111111111111111111111111111110111111111111111111111, + }, + { + Value: 0b0111111111111111111111111111111111111111101111111111111111111111, + }, + { + Value: 0b0111111111111111111111111111111111111111011111111111111111111111, + }, + { + Value: 0b0111111111111111111111111111111111111110111111111111111111111111, + }, + { + Value: 0b0111111111111111111111111111111111111101111111111111111111111111, + }, + { + Value: 0b0111111111111111111111111111111111111011111111111111111111111111, + }, + { + Value: 0b0111111111111111111111111111111111110111111111111111111111111111, + }, + { + Value: 0b0111111111111111111111111111111111101111111111111111111111111111, + }, + { + Value: 0b0111111111111111111111111111111111011111111111111111111111111111, + }, + { + Value: 0b0111111111111111111111111111111110111111111111111111111111111111, + }, + { + Value: 0b0111111111111111111111111111111101111111111111111111111111111111, + }, + { + Value: 0b0111111111111111111111111111111011111111111111111111111111111111, + }, + { + Value: 0b0111111111111111111111111111110111111111111111111111111111111111, + }, + { + Value: 0b0111111111111111111111111111101111111111111111111111111111111111, + }, + { + Value: 0b0111111111111111111111111111011111111111111111111111111111111111, + }, + { + Value: 0b0111111111111111111111111110111111111111111111111111111111111111, + }, + { + Value: 0b0111111111111111111111111101111111111111111111111111111111111111, + }, + { + Value: 0b0111111111111111111111111011111111111111111111111111111111111111, + }, + { + Value: 0b0111111111111111111111110111111111111111111111111111111111111111, + }, + { + Value: 0b0111111111111111111111101111111111111111111111111111111111111111, + }, + { + Value: 0b0111111111111111111111011111111111111111111111111111111111111111, + }, + { + Value: 0b0111111111111111111110111111111111111111111111111111111111111111, + }, + { + Value: 0b0111111111111111111101111111111111111111111111111111111111111111, + }, + { + Value: 0b0111111111111111111011111111111111111111111111111111111111111111, + }, + { + Value: 0b0111111111111111110111111111111111111111111111111111111111111111, + }, + { + Value: 0b0111111111111111101111111111111111111111111111111111111111111111, + }, + { + Value: 0b0111111111111111011111111111111111111111111111111111111111111111, + }, + { + Value: 0b0111111111111110111111111111111111111111111111111111111111111111, + }, + { + Value: 0b0111111111111101111111111111111111111111111111111111111111111111, + }, + { + Value: 0b0111111111111011111111111111111111111111111111111111111111111111, + }, + { + Value: 0b0111111111110111111111111111111111111111111111111111111111111111, + }, + { + Value: 0b0111111111101111111111111111111111111111111111111111111111111111, + }, + { + Value: 0b0111111111011111111111111111111111111111111111111111111111111111, + }, + { + Value: 0b0111111110111111111111111111111111111111111111111111111111111111, + }, + { + Value: 0b0111111101111111111111111111111111111111111111111111111111111111, + }, + { + Value: 0b0111111011111111111111111111111111111111111111111111111111111111, + }, + { + Value: 0b0111110111111111111111111111111111111111111111111111111111111111, + }, + { + Value: 0b0111101111111111111111111111111111111111111111111111111111111111, + }, + { + Value: 0b0111011111111111111111111111111111111111111111111111111111111111, + }, + { + Value: 0b0110111111111111111111111111111111111111111111111111111111111111, + }, + { + Value: 0b0101111111111111111111111111111111111111111111111111111111111111, + }, + { + Value: 0b0011111111111111111111111111111111111111111111111111111111111111, + }, + + + + + + + + + + { + Value: 0b0111111111111111111111111111111111111111111111111111111111111111, + }, + + + + + { + Value: 0b0000000000000000000000000000000000000000111111111111111111111111, + }, + { + Value: 0b0111111111111111111111111111111111111111000000000000000000000000, + }, + + + + { + Value: 0b0000000000000000000000000000000000000000100000000000000000000001, + }, + { + Value: 0b0100000000000000000000000000000000000001000000000000000000000000, + }, + + + + + + + + + + { + Value: 0b0000000001100001100001110110100111011001110000111111000101100100, + }, + { + Value: 0b0000000001100001100001110110101000001110110110001111101101100001, + }, + { + Value: 0b0000000001100001100001110110101000100000100100010111101000001110, + }, + { + Value: 0b0000000001100001100001110110101000111010100110110011110001010101, + }, + { + Value: 0b0000000001100001100001110110101001010010100011000011110001000100, + }, + } + + for testNumber, test := range tests { + + var serialized string = serialize(test.Value) + + actual, successful := unserialize(serialized) + if !successful { + t.Errorf("For test #%d, expected unserialization of serialized data to be successful but wasn't." , testNumber) + t.Logf("SUCCESSFUL: %t", successful) + t.Logf("VALUE: %064b", test.Value) + continue + } + + + if expected := test.Value; expected != actual { + t.Errorf("For test #%d, ", testNumber) + t.Logf("SUCCESSFUL: %t", successful) + t.Logf("EXPECTED: %064b", expected) + t.Logf("ACTUAL: %064b", actual) + continue + } + } +}