blob: 06fff5638d0242c2540a063cd5135343f0d3c839 [file] [log] [blame]
package syncgroup
// This file tests syncgroup/id.go
import (
"testing"
)
// signum returns -1, 0, or 1 according to whether its argument is -ve, 0, or
// +ve, respectively.
func signum(x int) (result int) {
if x < 0 {
result = -1
} else if x > 0 {
result = 1
}
return result
}
// NewID is tested as a side-effect of the other routines.
// TestIsValid tests IsValid().
func TestIsValid(t *testing.T) {
var zeroID ID
var nonZeroID ID = NewID()
if zeroID.IsValid() {
t.Errorf("IsValid(%v) == true", zeroID)
}
if !nonZeroID.IsValid() {
t.Errorf("IsValid(%v) == false", nonZeroID)
}
}
// TestCompareIDs tests CompareIDs().
func TestCompareIDs(t *testing.T) {
ids := []ID{ID{}, NewID(), NewID()}
for i := 0; i != len(ids); i++ {
for j := 0; j != len(ids); j++ {
if (i == j) != (CompareIDs(ids[i], ids[j]) == 0) {
t.Errorf("(CompareIDs(%v, %v) == 0) == %v, expected %v",
ids[i], ids[j],
CompareIDs(ids[i], ids[j]) == 0,
i == j)
}
if signum(CompareIDs(ids[i], ids[j])) !=
-signum(CompareIDs(ids[j], ids[i])) {
t.Errorf("(signum(CompareIDs(%v, %v)) == %v != -(%v == signum(CompareIDs(%v, %v)))",
ids[i], ids[j], signum(CompareIDs(ids[i], ids[j])),
signum(CompareIDs(ids[j], ids[i])), ids[j], ids[i])
}
}
}
}
// TestStringAndParseID tests String() and ParseID().
func TestStringAndParseID(t *testing.T) {
var lenOfString int
for i := 0; i != 10; i++ {
var id ID
var str string
if i == 0 { // First time through, use the zero id, and remember the length.
str = id.String()
lenOfString = len(str)
if lenOfString <= 0 {
t.Errorf("len(id.String()) == %v <= 0", len(str))
}
} else { // Subsequently, use a new id.
id = NewID()
str = id.String()
}
if len(str) != lenOfString {
t.Errorf("len(id.String()) == %v != %v", len(str), lenOfString)
}
var parsedID ID
var err error
parsedID, err = ParseID(str)
if err != nil {
t.Errorf("ParseID(%v) yields %v", str, err)
}
if CompareIDs(id, parsedID) != 0 {
t.Errorf("ParseID(%v) == %v != %v", str, parsedID, id)
}
}
}