1package cpuset 2 3import ( 4 "testing" 5 6 "github.com/stretchr/testify/require" 7) 8 9func TestCPUSet_Size(t *testing.T) { 10 set := New(0, 1, 2, 3) 11 require.Equal(t, 4, set.Size()) 12 require.Equal(t, 0, New().Size()) 13} 14 15func TestCPUSet_ToSlice(t *testing.T) { 16 cases := []struct { 17 desc string 18 in CPUSet 19 out []uint16 20 }{ 21 { 22 "empty cpuset", 23 New(), 24 []uint16{}, 25 }, 26 { 27 "in order", 28 New(0, 1, 2, 3, 4, 5, 6, 7), 29 []uint16{0, 1, 2, 3, 4, 5, 6, 7}, 30 }, 31 { 32 "out of order", 33 New(3, 1, 2, 0), 34 []uint16{0, 1, 2, 3}, 35 }, 36 } 37 38 for _, c := range cases { 39 require.Exactly(t, c.out, c.in.ToSlice(), c.desc) 40 } 41} 42 43func TestCPUSet_Equals(t *testing.T) { 44 cases := []struct { 45 a CPUSet 46 b CPUSet 47 shouldEqual bool 48 }{ 49 {New(), New(), true}, 50 {New(5), New(5), true}, 51 {New(1, 2, 3, 4, 5), New(1, 2, 3, 4, 5), true}, 52 53 {New(), New(5), false}, 54 {New(5), New(), false}, 55 {New(), New(1, 2, 3, 4, 5), false}, 56 {New(1, 2, 3, 4, 5), New(), false}, 57 {New(5), New(1, 2, 3, 4, 5), false}, 58 {New(1, 2, 3, 4, 5), New(5), false}, 59 } 60 61 for _, c := range cases { 62 require.Equal(t, c.shouldEqual, c.a.Equals(c.b)) 63 } 64} 65 66func TestCPUSet_Union(t *testing.T) { 67 cases := []struct { 68 a CPUSet 69 b CPUSet 70 expected CPUSet 71 }{ 72 {New(), New(), New()}, 73 74 {New(), New(0), New(0)}, 75 {New(0), New(), New(0)}, 76 {New(0), New(0), New(0)}, 77 78 {New(), New(0, 1, 2, 3), New(0, 1, 2, 3)}, 79 {New(0, 1), New(0, 1, 2, 3), New(0, 1, 2, 3)}, 80 {New(2, 3), New(4, 5), New(2, 3, 4, 5)}, 81 {New(3, 4), New(0, 1, 2, 3), New(0, 1, 2, 3, 4)}, 82 } 83 84 for _, c := range cases { 85 require.Exactly(t, c.expected.ToSlice(), c.a.Union(c.b).ToSlice()) 86 } 87} 88 89func TestCPUSet_Difference(t *testing.T) { 90 cases := []struct { 91 a CPUSet 92 b CPUSet 93 expected CPUSet 94 }{ 95 {New(), New(), New()}, 96 97 {New(), New(0), New()}, 98 {New(0), New(), New(0)}, 99 {New(0), New(0), New()}, 100 101 {New(0, 1), New(0, 1, 2, 3), New()}, 102 {New(2, 3), New(4, 5), New(2, 3)}, 103 {New(3, 4), New(0, 1, 2, 3), New(4)}, 104 } 105 106 for _, c := range cases { 107 require.Exactly(t, c.expected.ToSlice(), c.a.Difference(c.b).ToSlice()) 108 } 109} 110 111func TestCPUSet_IsSubsetOf(t *testing.T) { 112 cases := []struct { 113 a CPUSet 114 b CPUSet 115 isSubset bool 116 }{ 117 {New(0), New(0), true}, 118 {New(), New(0), true}, 119 {New(0), New(), false}, 120 {New(1, 2), New(0, 1, 2, 3), true}, 121 {New(2, 1), New(0, 1, 2, 3), true}, 122 {New(3, 4), New(0, 1, 2, 3), false}, 123 } 124 125 for _, c := range cases { 126 require.Equal(t, c.isSubset, c.a.IsSubsetOf(c.b)) 127 } 128} 129 130func TestCPUSet_IsSupersetOf(t *testing.T) { 131 cases := []struct { 132 a CPUSet 133 b CPUSet 134 isSuperset bool 135 }{ 136 {New(0), New(0), true}, 137 {New(0), New(), true}, 138 {New(), New(0), false}, 139 {New(0, 1, 2, 3), New(0), true}, 140 {New(0, 1, 2, 3), New(2, 3), true}, 141 {New(0, 1, 2, 3), New(2, 3, 4), false}, 142 } 143 144 for _, c := range cases { 145 require.Equal(t, c.isSuperset, c.a.IsSupersetOf(c.b)) 146 } 147} 148 149func TestCPUSet_ContainsAny(t *testing.T) { 150 cases := []struct { 151 a CPUSet 152 b CPUSet 153 containsAny bool 154 }{ 155 {New(0), New(0), true}, 156 {New(0), New(), false}, 157 {New(), New(0), false}, 158 {New(0, 1, 2, 3), New(0), true}, 159 {New(0, 1, 2, 3), New(2, 3), true}, 160 {New(0, 1, 2, 3), New(2, 3, 4), true}, 161 } 162 163 for _, c := range cases { 164 require.Equal(t, c.containsAny, c.a.ContainsAny(c.b)) 165 } 166} 167 168func TestParse(t *testing.T) { 169 cases := []struct { 170 cpuset string 171 expected CPUSet 172 }{ 173 {"", New()}, 174 {"\n", New()}, 175 {"1", New(1)}, 176 {"1\n", New(1)}, 177 {"0,1,2,3", New(0, 1, 2, 3)}, 178 {"0-3", New(0, 1, 2, 3)}, 179 {"0,2-3,5", New(0, 2, 3, 5)}, 180 } 181 182 for _, c := range cases { 183 result, err := Parse(c.cpuset) 184 require.NoError(t, err) 185 require.True(t, result.Equals(c.expected)) 186 } 187} 188 189func TestCPUSet_String(t *testing.T) { 190 cases := []struct { 191 cpuset CPUSet 192 expected string 193 }{ 194 {New(), ""}, 195 {New(0, 1, 2, 3), "0-3"}, 196 {New(1, 3), "1,3"}, 197 {New(0, 2, 3, 5), "0,2-3,5"}, 198 } 199 200 for _, c := range cases { 201 require.Equal(t, c.expected, c.cpuset.String()) 202 } 203} 204