| package systemd |
| |
| import ( |
| "bytes" |
| "testing" |
| ) |
| |
| func TestRangeToBits(t *testing.T) { |
| testCases := []struct { |
| in string |
| out []byte |
| isErr bool |
| }{ |
| {in: "", isErr: true}, |
| {in: "0", out: []byte{1}}, |
| {in: "1", out: []byte{2}}, |
| {in: "0-1", out: []byte{3}}, |
| {in: "0,1", out: []byte{3}}, |
| {in: ",0,1,", out: []byte{3}}, |
| {in: "0-3", out: []byte{0x0f}}, |
| {in: "0,1,2-3", out: []byte{0x0f}}, |
| {in: "4-7", out: []byte{0xf0}}, |
| {in: "0-7", out: []byte{0xff}}, |
| {in: "0-15", out: []byte{0xff, 0xff}}, |
| {in: "16", out: []byte{0, 0, 1}}, |
| {in: "0-3,32-33", out: []byte{0x0f, 0, 0, 0, 3}}, |
| // extra spaces and tabs are ok |
| {in: "1, 2, 1-2", out: []byte{6}}, |
| {in: " , 1 , 3 , 5-7, ", out: []byte{0xea}}, |
| // somewhat large values |
| {in: "128-130,1", out: []byte{2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7}}, |
| |
| {in: "-", isErr: true}, |
| {in: "1-", isErr: true}, |
| {in: "-3", isErr: true}, |
| // bad range (start > end) |
| {in: "54-53", isErr: true}, |
| // kernel does not allow extra spaces inside a range |
| {in: "1 - 2", isErr: true}, |
| } |
| |
| for _, tc := range testCases { |
| out, err := RangeToBits(tc.in) |
| if err != nil { |
| if !tc.isErr { |
| t.Errorf("case %q: unexpected error: %v", tc.in, err) |
| } |
| |
| continue |
| } |
| if !bytes.Equal(out, tc.out) { |
| t.Errorf("case %q: expected %v, got %v", tc.in, tc.out, out) |
| } |
| } |
| } |