initial commits
parent
429fa92d5b
commit
997a5dc37a
|
@ -0,0 +1,5 @@
|
||||||
|
package iid
|
||||||
|
|
||||||
|
const (
|
||||||
|
badvalue = 0b0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
)
|
|
@ -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
|
||||||
|
}
|
|
@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue