* Copyright (c) 2026 Huawei Technologies Co., Ltd.
* openFuyao is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
*/
package utils
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestParseRanges(t *testing.T) {
tests := []struct {
name string
input string
want []int
wantErr bool
}{
{
name: "single number",
input: "3",
want: []int{3},
wantErr: false,
},
{
name: "range",
input: "1-3",
want: []int{1, 2, 3},
wantErr: false,
},
{
name: "mixed",
input: "0,2-4,6",
want: []int{0, 2, 3, 4, 6},
wantErr: false,
},
{
name: "empty string",
input: "",
want: []int{},
wantErr: false,
},
{
name: "whitespace string",
input: " ",
want: []int{},
wantErr: false,
},
{
name: "invalid format",
input: "abc",
want: []int{},
wantErr: true,
},
{
name: "invalid range start",
input: "a-3",
want: []int{},
wantErr: true,
},
{
name: "invalid range end",
input: "1-b",
want: []int{},
wantErr: true,
},
{
name: "too many dashes",
input: "1-2-3",
want: []int{},
wantErr: true,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got, err := ParseRanges(tt.input)
if tt.wantErr {
assert.Error(t, err)
} else {
assert.NoError(t, err)
assert.Equal(t, tt.want, got)
}
})
}
}