package main

import "testing"

type parseRangeScenario struct {
	pattern  string
	expected []byte
}

func TestParseRange(t *testing.T) {

	cases := []parseRangeScenario{
		{
			pattern:  "",
			expected: []byte{},
		},
		{
			pattern:  "ABC",
			expected: []byte{'A', 'B', 'C'},
		},
		{
			pattern:  "ABBC",
			expected: []byte{'A', 'B', 'B', 'C'},
		},
		{
			pattern:  "A-C",
			expected: []byte{'A', 'B', 'C'},
		},
		{
			pattern:  "---",
			expected: []byte{'-'},
		},
		{
			pattern:  "{0}",
			expected: []byte{0},
		},
		{
			pattern:  "{0}-{2}",
			expected: []byte{0, 1, 2},
		},
	}

	for _, c := range cases {

		chars := ParseRange(c.pattern)
		matches := true

		if len(c.expected) != len(chars) {
			matches = false
		}

		for i := 0; matches && i < len(c.expected); i++ {
			if c.expected[i] != chars[i] {
				matches = false
				break
			}
		}

		if !matches {
			t.Errorf("ParseRange(%v):\nEXPECTED: %v\n  ACTUAL: %v", c.pattern, c.expected, chars)
		}

	}

}