cpuset: Add a few more test cases

Feedback from https://github.com/kubernetes/utils/pull/267 and related
reviews.

* Equality when insertion order is different
* UnsortedList contents
* Not-Subset cases
* Clone coverage
This commit is contained in:
Ian K. Coolidge 2023-01-27 13:25:05 +00:00
parent 22d3f67850
commit b536851fc7

View File

@ -18,6 +18,7 @@ package cpuset
import ( import (
"reflect" "reflect"
"sort"
"testing" "testing"
) )
@ -90,6 +91,7 @@ func TestCPUSetEqual(t *testing.T) {
{New(), New()}, {New(), New()},
{New(5), New(5)}, {New(5), New(5)},
{New(1, 2, 3, 4, 5), New(1, 2, 3, 4, 5)}, {New(1, 2, 3, 4, 5), New(1, 2, 3, 4, 5)},
{New(5, 4, 3, 2, 1), New(1, 2, 3, 4, 5)},
} }
shouldNotEqual := []struct { shouldNotEqual := []struct {
@ -139,7 +141,13 @@ func TestCPUSetIsSubsetOf(t *testing.T) {
shouldNotBeSubset := []struct { shouldNotBeSubset := []struct {
s1 CPUSet s1 CPUSet
s2 CPUSet s2 CPUSet
}{} }{
// A set with more elements is not a subset.
{New(5), New()},
// Disjoint set is not a subset.
{New(6), New(5)},
}
for _, c := range shouldBeSubset { for _, c := range shouldBeSubset {
if !c.s1.IsSubsetOf(c.s2) { if !c.s1.IsSubsetOf(c.s2) {
@ -255,17 +263,26 @@ func TestCPUSetDifference(t *testing.T) {
func TestCPUSetList(t *testing.T) { func TestCPUSetList(t *testing.T) {
testCases := []struct { testCases := []struct {
set CPUSet set CPUSet
expected []int expected []int // must be sorted
}{ }{
{New(), []int{}}, {New(), []int{}},
{New(5), []int{5}}, {New(5), []int{5}},
{New(1, 2, 3, 4, 5), []int{1, 2, 3, 4, 5}}, {New(1, 2, 3, 4, 5), []int{1, 2, 3, 4, 5}},
{New(5, 4, 3, 2, 1), []int{1, 2, 3, 4, 5}},
} }
for _, c := range testCases { for _, c := range testCases {
result := c.set.List() result := c.set.List()
if !reflect.DeepEqual(result, c.expected) { if !reflect.DeepEqual(result, c.expected) {
t.Fatalf("expected set as slice to be [%v] (got [%v]), s: [%v]", c.expected, result, c.set) t.Fatalf("unexpected List() contents. got [%v] want [%v] (set: [%v])", result, c.expected, c.set)
}
// We cannot rely on internal storage order details for a unit test.
// The best we can do is to sort the output of 'UnsortedList'.
result = c.set.UnsortedList()
sort.Ints(result)
if !reflect.DeepEqual(result, c.expected) {
t.Fatalf("unexpected UnsortedList() contents. got [%v] want [%v] (set: [%v])", result, c.expected, c.set)
} }
} }
} }
@ -330,3 +347,12 @@ func TestParse(t *testing.T) {
} }
} }
} }
func TestClone(t *testing.T) {
original := New(1, 2, 3, 4, 5)
clone := original.Clone()
if !original.Equals(clone) {
t.Errorf("expected clone [%v] to equal original [%v]", clone, original)
}
}