133 lines
2.9 KiB
Go
133 lines
2.9 KiB
Go
package langext
|
|
|
|
import (
|
|
"git.blackforestbytes.com/BlackForestBytes/goext/tst"
|
|
"regexp"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestNewUUIDLength(t *testing.T) {
|
|
u, err := NewUUID()
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
tst.AssertEqual(t, len(u), 16)
|
|
}
|
|
|
|
func TestNewUUIDVersionAndVariant(t *testing.T) {
|
|
u, err := NewUUID()
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
// Version 4 is in upper nibble of byte 6
|
|
tst.AssertEqual(t, u[6]&0xf0, byte(0x40))
|
|
// Variant 10 in top two bits of byte 8
|
|
tst.AssertEqual(t, u[8]&0xc0, byte(0x80))
|
|
}
|
|
|
|
func TestNewUUIDRandomness(t *testing.T) {
|
|
a, _ := NewUUID()
|
|
b, _ := NewUUID()
|
|
if a == b {
|
|
t.Errorf("two UUIDs should not be equal")
|
|
}
|
|
}
|
|
|
|
var hexUUIDRegex = regexp.MustCompile(`^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$`)
|
|
|
|
func TestNewHexUUIDFormat(t *testing.T) {
|
|
s, err := NewHexUUID()
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
tst.AssertEqual(t, len(s), 36)
|
|
if !hexUUIDRegex.MatchString(s) {
|
|
t.Errorf("not a valid hex UUID format: %q", s)
|
|
}
|
|
}
|
|
|
|
func TestMustHexUUID(t *testing.T) {
|
|
s := MustHexUUID()
|
|
tst.AssertEqual(t, len(s), 36)
|
|
if !hexUUIDRegex.MatchString(s) {
|
|
t.Errorf("not a valid hex UUID format: %q", s)
|
|
}
|
|
}
|
|
|
|
var upperHexRegex = regexp.MustCompile(`^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$`)
|
|
|
|
func TestNewUpperHexUUIDFormat(t *testing.T) {
|
|
s, err := NewUpperHexUUID()
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
tst.AssertEqual(t, len(s), 36)
|
|
tst.AssertEqual(t, s, strings.ToUpper(s))
|
|
if !upperHexRegex.MatchString(s) {
|
|
t.Errorf("not a valid upper-hex UUID format: %q", s)
|
|
}
|
|
}
|
|
|
|
func TestMustUpperHexUUID(t *testing.T) {
|
|
s := MustUpperHexUUID()
|
|
tst.AssertEqual(t, len(s), 36)
|
|
}
|
|
|
|
func TestNewRawHexUUIDFormat(t *testing.T) {
|
|
s, err := NewRawHexUUID()
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
tst.AssertEqual(t, len(s), 32)
|
|
if strings.Contains(s, "-") {
|
|
t.Errorf("raw hex should have no dashes: %q", s)
|
|
}
|
|
tst.AssertEqual(t, s, strings.ToUpper(s))
|
|
}
|
|
|
|
func TestMustRawHexUUID(t *testing.T) {
|
|
s := MustRawHexUUID()
|
|
tst.AssertEqual(t, len(s), 32)
|
|
}
|
|
|
|
func TestNewBracesUUID(t *testing.T) {
|
|
s, err := NewBracesUUID()
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
tst.AssertEqual(t, len(s), 38)
|
|
tst.AssertEqual(t, string(s[37]), "}")
|
|
}
|
|
|
|
func TestMustBracesUUID(t *testing.T) {
|
|
s := MustBracesUUID()
|
|
tst.AssertEqual(t, len(s), 38)
|
|
}
|
|
|
|
func TestNewParensUUID(t *testing.T) {
|
|
s, err := NewParensUUID()
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
tst.AssertEqual(t, len(s), 38)
|
|
tst.AssertEqual(t, string(s[37]), ")")
|
|
}
|
|
|
|
func TestMustParensUUID(t *testing.T) {
|
|
s := MustParensUUID()
|
|
tst.AssertEqual(t, len(s), 38)
|
|
}
|
|
|
|
func TestUUIDsAreUnique(t *testing.T) {
|
|
const count = 100
|
|
seen := make(map[string]bool, count)
|
|
for range count {
|
|
s := MustHexUUID()
|
|
if seen[s] {
|
|
t.Errorf("collision in UUID set: %q", s)
|
|
}
|
|
seen[s] = true
|
|
}
|
|
}
|