mirror of
https://codeberg.org/scip/golsky.git
synced 2025-12-16 12:10:58 +01:00
85 lines
2.5 KiB
Go
85 lines
2.5 KiB
Go
package rle
|
|
|
|
import (
|
|
"reflect"
|
|
"testing"
|
|
)
|
|
|
|
func TestRLE(t *testing.T) {
|
|
t.Run("Parse", func(t *testing.T) {
|
|
tests := []struct {
|
|
input string
|
|
expectedPattern [][]int
|
|
expectedComment string
|
|
expectedWidth int
|
|
expectedHeight int
|
|
expectedRule string
|
|
}{
|
|
{
|
|
input: `#C This is a glider.
|
|
x = 3, y = 3
|
|
bo$2bo$3o!`,
|
|
expectedPattern: [][]int{
|
|
{0, 1, 0},
|
|
{0, 0, 1},
|
|
{1, 1, 1},
|
|
},
|
|
expectedWidth: 3,
|
|
expectedHeight: 3,
|
|
expectedRule: "",
|
|
},
|
|
{
|
|
input: `#N Gosper glider gun
|
|
#C This was the first gun discovered.
|
|
#C As its name suggests, it was discovered by Bill Gosper.
|
|
x = 36, y = 9, rule = B3/S23
|
|
24bo$22bobo$12b2o6b2o12b2o$11bo3bo4b2o12b2o$2o8bo5bo3b2o$2o8bo3bob2o4b
|
|
obo$10bo5bo7bo$11bo3bo$12b2o!`,
|
|
expectedPattern: [][]int{
|
|
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
|
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
|
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
|
|
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
|
|
{1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
|
{1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
|
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
|
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
|
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
|
},
|
|
expectedWidth: 36,
|
|
expectedHeight: 9,
|
|
expectedRule: "B3/S23",
|
|
},
|
|
}
|
|
|
|
for _, test := range tests {
|
|
rle, err := Parse(test.input)
|
|
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
|
|
if rle.Width != test.expectedWidth {
|
|
t.Errorf("Width dos not match")
|
|
}
|
|
|
|
if rle.Height != test.expectedHeight {
|
|
t.Errorf("Height does not match")
|
|
}
|
|
|
|
if rle.Rule != test.expectedRule {
|
|
t.Errorf("Rule does not match")
|
|
}
|
|
|
|
if !reflect.DeepEqual(rle.Pattern, test.expectedPattern) {
|
|
t.Errorf(
|
|
"Patterns do not match.\nExpected: %v\nGot: %v",
|
|
test.expectedPattern,
|
|
rle.Pattern,
|
|
)
|
|
}
|
|
}
|
|
})
|
|
|
|
}
|