summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/gobang.go124
-rw-r--r--tests/gobang.go128
2 files changed, 12 insertions, 240 deletions
diff --git a/src/gobang.go b/src/gobang.go
index c8ab0f3..73540d2 100644
--- a/src/gobang.go
+++ b/src/gobang.go
@@ -5,7 +5,6 @@ import (
"crypto/rand"
"crypto/sha256"
"encoding/binary"
- "encoding/hex"
"errors"
"fmt"
"hash"
@@ -21,7 +20,8 @@ import (
"strings"
"sync"
"syscall"
- "time"
+
+ "guuid"
)
@@ -36,15 +36,6 @@ const (
)
-const (
- uuidDashCount = 4
- uuidByteCount = 16
- uuidEncodedLength = (uuidByteCount * 2) + uuidDashCount
-)
-type UUID struct {
- bytes [uuidByteCount]byte
-}
-
type Gauge struct {
Inc func(...any)
Dec func(...any)
@@ -413,111 +404,6 @@ func Hash(password []byte, salt []byte) []byte{
return hash
}
-// getV7Time returns the time in milliseconds and nanoseconds / 256.
-// The returned (milli << (12 + seq)) is guaranteed to be greater than
-// (milli << (12 + seq)) returned by any previous call to getV7Time.
-// `seq` Sequence number is between 0 and 3906 (nanoPerMilli >> 8)
-func getV7Time(nano int64) (int64, int64) {
- const nanoPerMilli = 1000 * 1000
-
- milli := nano / nanoPerMilli
- seq := (nano - (milli * nanoPerMilli)) >> 8
- now := milli << (12 + seq)
-
- timeMutex.Lock()
- defer timeMutex.Unlock()
- if now <= lastV7Time {
- now = lastV7Time + 1
- milli = now >> 12
- seq = now & 0xfff
- }
- lastV7Time = now
- return milli, seq
-}
-
-func newUUIDFrom(randomBuffer [uuidByteCount]byte, now int64) UUID {
- randomBuffer[6] = (randomBuffer[6] & 0x0f) | 0x40 // Version 4
- randomBuffer[8] = (randomBuffer[8] & 0x3f) | 0x80 // Variant is 10
-
- t, s := getV7Time(now)
-
- randomBuffer[0] = byte(t >> 40)
- randomBuffer[1] = byte(t >> 32)
- randomBuffer[2] = byte(t >> 24)
- randomBuffer[3] = byte(t >> 16)
- randomBuffer[4] = byte(t >> 8)
- randomBuffer[5] = byte(t >> 0)
-
- randomBuffer[6] = 0x70 | (0x0f & byte(s >> 8))
- randomBuffer[7] = byte(s)
- return UUID { bytes: randomBuffer }
-}
-
-func NewUUID() UUID {
- var buffer [uuidByteCount]byte
- _, err := io.ReadFull(rand.Reader, buffer[7:])
- FatalIf(err)
-
- now := time.Now().UnixNano()
- return newUUIDFrom(buffer, now)
-}
-
-func (uuid UUID) String() string {
- dst := [uuidEncodedLength]byte {
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- '-',
- 0, 0, 0, 0,
- '-',
- 0, 0, 0, 0,
- '-',
- 0, 0, 0, 0,
- '-',
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- }
-
- hex.Encode(dst[ 0:8], uuid.bytes[0:4])
- hex.Encode(dst[ 9:13], uuid.bytes[4:6])
- hex.Encode(dst[14:18], uuid.bytes[6:8])
- hex.Encode(dst[19:23], uuid.bytes[8:10])
- hex.Encode(dst[24:36], uuid.bytes[10:])
-
- return string(dst[:])
-}
-
-var (
- dashIndexes = []int { 8, 13, 18, 23 }
- emptyUUID = UUID {}
- badUUIDLengthError = errors.New("str isn't of the correct length")
- badUUIDDashCountError = errors.New("Bad count of dashes in string")
- badUUIDDashPositionError = errors.New("Bad char in string")
-)
-func ParseUUID(str string) (UUID, error) {
- if len(str) != uuidEncodedLength {
- return emptyUUID, badUUIDLengthError
- }
-
- if strings.Count(str, "-") != uuidDashCount {
- return emptyUUID, badUUIDDashCountError
- }
-
- for _, idx := range dashIndexes {
- if str[idx] != '-' {
- return emptyUUID, badUUIDDashPositionError
- }
- }
-
- hexstr := strings.Join(strings.Split(str, "-"), "")
- data, err := hex.DecodeString(hexstr)
- if err != nil {
- return emptyUUID, err
- }
-
- return UUID { bytes: [uuidByteCount]byte(data) }, nil
-}
-
func sourceInfo(skip int) slog.Attr {
pc := make([]uintptr, 10)
n := runtime.Callers(skip, pc)
@@ -543,7 +429,7 @@ func sourceInfo(skip int) slog.Attr {
func logArgs(type_ string) []string {
return []string {
- "id", NewUUID().String(),
+ "id", guuid.New().String(),
"kind", "log",
"type", type_,
}
@@ -626,7 +512,7 @@ func metric(type_ string, label string, args ...any) {
"_",
slices.Concat(
[]any {
- "id", NewUUID().String(),
+ "id", guuid.New().String(),
"kind", "metric",
"type", type_,
"label", label,
@@ -763,7 +649,7 @@ func SetLoggerOutput(w io.Writer, args ...any) {
"info",
"pid", os.Getpid(),
"ppid", os.Getppid(),
- "puuid", NewUUID().String(),
+ "puuid", guuid.New().String(),
),
).With(args...))
}
diff --git a/tests/gobang.go b/tests/gobang.go
index b26fc7e..a22fc02 100644
--- a/tests/gobang.go
+++ b/tests/gobang.go
@@ -13,6 +13,8 @@ import (
"os"
"strings"
"time"
+
+ "guuid"
)
@@ -383,117 +385,6 @@ func test_Hash() {
})
}
-func test_getV7Time() {
- // FIXME
-}
-
-func test_newUUIDFrom() {
- TestStart("newUUIDFrom()")
-
- Testing("same UUID from same input", func() {
- for i := 0; i < 100; i++ {
- var b [uuidByteCount]byte
- buffer := Random(uuidByteCount)
- now := time.Now().UnixNano()
-
- lastV7Time = now + 1
- copy(b[:], buffer)
- uuid1 := newUUIDFrom(b, now)
-
- lastV7Time = now + 1
- copy(b[:], buffer)
- uuid2 := newUUIDFrom(b, now)
-
- AssertEqual(uuid1, uuid2)
- }
- })
-}
-
-func test_NewUUID() {
- TestStart("NewUUID()")
-
- Testing("we can generate UUID values", func() {
- var uuid UUID = NewUUID()
- AssertEqual(len(uuid.bytes), uuidByteCount)
- })
-}
-
-func test_UUIDString() {
- TestStart("UUID.String()")
-
- Testing("simple example values", func() {
- uuids := []UUID {
- UUID {
- bytes: [uuidByteCount]byte {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- },
- },
- UUID {
- bytes: [uuidByteCount]byte {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
- 10, 11, 12, 13, 14, 15,
- },
- },
- UUID {
- bytes: [uuidByteCount]byte {
- 222, 222, 222, 222, 222, 222, 222, 222,
- 222, 222, 222, 222, 222, 222, 222, 222,
- },
- },
- UUID {
- bytes: [uuidByteCount]byte {
- 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255,
- },
- },
- }
-
- strs := []string {
- "00000000-0000-0000-0000-000000000000",
- "00010203-0405-0607-0809-0a0b0c0d0e0f",
- "dededede-dede-dede-dede-dededededede",
- "ffffffff-ffff-ffff-ffff-ffffffffffff",
- }
-
- for i := range uuids {
- AssertEqual(uuids[i].String(), strs[i])
- }
- })
-}
-
-func test_ParseUUID() {
- TestStart("ParseUUID()")
-
- Testing("UUID -> string -> UUID round trip", func() {
- for i := 0; i < 100; i++ {
- uuid0 := NewUUID()
- uuid1, err := ParseUUID(uuid0.String())
- ErrorIf(err)
- AssertEqual(uuid1, uuid0)
- }
- })
-
- Testing("errors we detect", func() {
- var err error
-
- _, err = ParseUUID("")
- AssertEqual(err, badUUIDLengthError)
-
- _, err = ParseUUID("---000000000000000000000000000000000")
- AssertEqual(err, badUUIDDashCountError)
-
- _, err = ParseUUID("----00000000000000000000000000000000")
- AssertEqual(err, badUUIDDashPositionError)
-
- _, err = ParseUUID("00000000-0000-0000-0000-00000000000g")
- AssertEqual(err, hex.InvalidByteError('g'))
-
- _, err = ParseUUID("00000000-0000-0000-0000-000000000000")
- ErrorIf(err)
- })
-}
-
func test_sourceInfo() {
TestStart("sourceInfo()")
@@ -546,7 +437,7 @@ func test_logArgs() {
AssertEqual(len(args), 6)
AssertEqual(args[0], "id")
- _, err := ParseUUID(args[1])
+ _, err := guuid.FromString(args[1])
ErrorIf(err)
expected := []string { "kind", "log", "type", "the-type" }
@@ -745,7 +636,7 @@ func test_metric() {
AssertEqual(ok, true)
id, ok := idRaw.(string)
AssertEqual(ok, true)
- _, err = ParseUUID(id)
+ _, err = guuid.FromString(id)
ErrorIf(err)
kindRaw, ok := data["kind"]
@@ -1038,7 +929,7 @@ func test_SetLoggerOutput() {
AssertEqual(ok, true)
puuid, ok := puuidRaw.(string)
AssertEqual(ok, true)
- _, err = ParseUUID(puuid)
+ _, err = guuid.FromString(puuid)
ErrorIf(err)
})
@@ -1097,9 +988,9 @@ func test_SetLoggerOutput() {
puuid2 := puuidFromString(log2)
AssertEqual(puuid1, puuid2)
- uuid1, err := ParseUUID(puuid1)
+ uuid1, err := guuid.FromString(puuid1)
ErrorIf(err)
- uuid2, err := ParseUUID(puuid2)
+ uuid2, err := guuid.FromString(puuid2)
ErrorIf(err)
AssertEqual(uuid1, uuid2)
})
@@ -1272,11 +1163,6 @@ func t3() {
func t4() {
test_Random()
test_Salt()
- test_getV7Time()
- test_newUUIDFrom()
- test_NewUUID()
- test_UUIDString()
- test_ParseUUID()
test_sourceInfo()
test_logArgs()
test_anyArr()