forked from mirror/go.uuid
implemented UUID.Variant() method
This commit is contained in:
parent
6f0b1e4b83
commit
7e5faa5783
21
uuid.go
21
uuid.go
|
@ -5,6 +5,14 @@ import (
|
|||
"crypto/rand"
|
||||
)
|
||||
|
||||
// UUID layout variants.
|
||||
const (
|
||||
VariantNCS = iota
|
||||
VariantRFC4122
|
||||
VariantMicrosoft
|
||||
VariantFuture
|
||||
)
|
||||
|
||||
type UUID [16]byte
|
||||
|
||||
// Returns algorithm version used to generate UUID
|
||||
|
@ -13,6 +21,19 @@ func (u *UUID) Version() uint {
|
|||
return uint(u[6] >> 4)
|
||||
}
|
||||
|
||||
// Returns UUID layout variant.
|
||||
func (u *UUID) Variant() uint {
|
||||
switch {
|
||||
case (u[8] & 0x80) == 0x00:
|
||||
return VariantNCS
|
||||
case (u[8] & 0xc0) | 0x80 == 0x80:
|
||||
return VariantRFC4122
|
||||
case (u[8] & 0xe0) | 0xc0 == 0xc0:
|
||||
return VariantMicrosoft
|
||||
}
|
||||
return VariantFuture
|
||||
}
|
||||
|
||||
// Returns canonical string representation of UUID:
|
||||
// xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
|
||||
func (u *UUID) String() string {
|
||||
|
|
35
uuid_test.go
35
uuid_test.go
|
@ -22,14 +22,38 @@ func TestSetVersion(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestVariant(t *testing.T) {
|
||||
//u := new(UUID)
|
||||
// TODO: implement u.Variant()
|
||||
u1 := UUID{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
|
||||
|
||||
if u1.Variant() != VariantNCS {
|
||||
t.Errorf("Incorrect variant for UUID variant %d: %d", VariantNCS, u1.Variant())
|
||||
}
|
||||
|
||||
u2 := UUID{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
|
||||
|
||||
if u2.Variant() != VariantRFC4122 {
|
||||
t.Errorf("Incorrect variant for UUID variant %d: %d", VariantRFC4122, u2.Variant())
|
||||
}
|
||||
|
||||
u3 := UUID{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
|
||||
|
||||
if u3.Variant() != VariantMicrosoft {
|
||||
t.Errorf("Incorrect variant for UUID variant %d: %d", VariantMicrosoft, u3.Variant())
|
||||
}
|
||||
|
||||
u4 := UUID{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
|
||||
|
||||
if u4.Variant() != VariantFuture {
|
||||
t.Errorf("Incorrect variant for UUID variant %d: %d", VariantFuture, u4.Variant())
|
||||
}
|
||||
}
|
||||
|
||||
func TestSetVariant(t *testing.T) {
|
||||
u := new(UUID)
|
||||
u.setVariant()
|
||||
// TODO: implement u.Variant()
|
||||
|
||||
if u.Variant() != VariantRFC4122 {
|
||||
t.Errorf("Incorrect variant for UUID after u.setVariant(): %d", u.Variant())
|
||||
}
|
||||
}
|
||||
|
||||
func TestString(t *testing.T) {
|
||||
|
@ -51,5 +75,8 @@ func TestNewV4(t *testing.T) {
|
|||
if u.Version() != 4 {
|
||||
t.Errorf("UUIDv4 generated with incorrect version: %d", u.Version())
|
||||
}
|
||||
// TODO: check variant
|
||||
|
||||
if u.Variant() != VariantRFC4122 {
|
||||
t.Errorf("UUIDv4 generated with incorrect variant: %d", u.Variant())
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue