aboutsummaryrefslogtreecommitdiff
path: root/pkg/field/set_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/field/set_test.go')
-rw-r--r--pkg/field/set_test.go230
1 files changed, 230 insertions, 0 deletions
diff --git a/pkg/field/set_test.go b/pkg/field/set_test.go
new file mode 100644
index 0000000..5b7f0ac
--- /dev/null
+++ b/pkg/field/set_test.go
@@ -0,0 +1,230 @@
+package field
+
+import (
+ "os"
+ "testing"
+
+ "github.com/stretchr/testify/require"
+)
+
+func TestSetMinimalAppendOne(t *testing.T) {
+ hashField := Field{
+ x: 0,
+ y: 0,
+ lx: 1,
+ ly: 1,
+ lines: []Line{
+ Line{x: 0, l: 1, columns: []int{'#'}},
+ },
+ }
+ xAppendField := Field{
+ x: 0,
+ y: 0,
+ lx: 2,
+ ly: 1,
+ lines: []Line{
+ Line{x: 0, l: 2, columns: []int{'@', '#'}},
+ },
+ }
+ xPrependField := Field{
+ x: -1,
+ y: 0,
+ lx: 2,
+ ly: 1,
+ lines: []Line{
+ Line{x: -1, l: 2, columns: []int{'#', '@'}},
+ },
+ }
+ yAppendField := Field{
+ x: 0,
+ y: 0,
+ lx: 1,
+ ly: 2,
+ lines: []Line{
+ Line{x: 0, l: 1, columns: []int{'@'}},
+ Line{x: 0, l: 1, columns: []int{'#'}},
+ },
+ }
+ yPrependField := Field{
+ x: 0,
+ y: -1,
+ lx: 1,
+ ly: 2,
+ lines: []Line{
+ Line{x: 0, l: 1, columns: []int{'#'}},
+ Line{x: 0, l: 1, columns: []int{'@'}},
+ },
+ }
+ // Test cases
+ testCases := []struct {
+ name string
+ input string
+ inputX int
+ inputY int
+ inputV int
+ expected *Field
+ }{
+ {"simple", "test_data/minimal.b98", 0, 0, '#', &hashField},
+ {"xappend", "test_data/minimal.b98", 1, 0, '#', &xAppendField},
+ {"xprepend", "test_data/minimal.b98", -1, 0, '#', &xPrependField},
+ {"yappend", "test_data/minimal.b98", 0, 1, '#', &yAppendField},
+ {"yprepend", "test_data/minimal.b98", 0, -1, '#', &yPrependField},
+ }
+ for _, tc := range testCases {
+ t.Run(tc.name, func(t *testing.T) {
+ file, err := os.Open(tc.input)
+ require.NoError(t, err, "Failed to open file")
+ defer file.Close()
+ field, err := Load(file)
+ field.Set(tc.inputX, tc.inputY, tc.inputV)
+ require.NoError(t, err)
+ require.Equal(t, tc.expected, field, "Invalid value")
+ })
+ }
+}
+
+func TestSetMinimalAppendTwo(t *testing.T) {
+ bottomRight := Field{
+ x: 0,
+ y: 0,
+ lx: 5,
+ ly: 3,
+ lines: []Line{
+ Line{x: 0, l: 1, columns: []int{'@'}},
+ Line{},
+ Line{x: 5, l: 1, columns: []int{'#'}},
+ },
+ }
+ bottomLeft := Field{
+ x: -5,
+ y: 0,
+ lx: 6,
+ ly: 4,
+ lines: []Line{
+ Line{x: 0, l: 1, columns: []int{'@'}},
+ Line{},
+ Line{},
+ Line{x: -5, l: 1, columns: []int{'#'}},
+ },
+ }
+ topRight := Field{
+ x: 0,
+ y: -3,
+ lx: 9,
+ ly: 4,
+ lines: []Line{
+ Line{x: 8, l: 1, columns: []int{'#'}},
+ Line{},
+ Line{},
+ Line{x: 0, l: 1, columns: []int{'@'}},
+ },
+ }
+ topLeft := Field{
+ x: -12,
+ y: -4,
+ lx: 13,
+ ly: 5,
+ lines: []Line{
+ Line{x: -12, l: 1, columns: []int{'#'}},
+ Line{},
+ Line{},
+ Line{},
+ Line{x: 0, l: 1, columns: []int{'@'}},
+ },
+ }
+ // Test cases
+ testCases := []struct {
+ name string
+ input string
+ inputX int
+ inputY int
+ inputV int
+ expected *Field
+ }{
+ {"bottomRight", "test_data/minimal.b98", 5, 2, '#', &bottomRight},
+ {"bottomLeft", "test_data/minimal.b98", -5, 3, '#', &bottomLeft},
+ {"topRight", "test_data/minimal.b98", 8, -3, '#', &topRight},
+ {"topLeft", "test_data/minimal.b98", -12, -4, '#', &topLeft},
+ }
+ for _, tc := range testCases {
+ t.Run(tc.name, func(t *testing.T) {
+ file, err := os.Open(tc.input)
+ require.NoError(t, err, "Failed to open file")
+ defer file.Close()
+ field, err := Load(file)
+ field.Set(tc.inputX, tc.inputY, tc.inputV)
+ require.NoError(t, err)
+ require.Equal(t, tc.expected, field, "Invalid value")
+ })
+ }
+}
+
+func TestSetMinimalAppendThree(t *testing.T) {
+ xAppendField := Field{
+ x: 0,
+ y: 0,
+ lx: 4,
+ ly: 1,
+ lines: []Line{
+ Line{x: 0, l: 4, columns: []int{'@', ' ', ' ', '#'}},
+ },
+ }
+ xPrependField := Field{
+ x: -3,
+ y: 0,
+ lx: 4,
+ ly: 1,
+ lines: []Line{
+ Line{x: -3, l: 4, columns: []int{'#', ' ', ' ', '@'}},
+ },
+ }
+ yAppendField := Field{
+ x: 0,
+ y: 0,
+ lx: 1,
+ ly: 4,
+ lines: []Line{
+ Line{x: 0, l: 1, columns: []int{'@'}},
+ Line{},
+ Line{},
+ Line{x: 0, l: 1, columns: []int{'#'}},
+ },
+ }
+ yPrependField := Field{
+ x: 0,
+ y: -3,
+ lx: 1,
+ ly: 4,
+ lines: []Line{
+ Line{x: 0, l: 1, columns: []int{'#'}},
+ Line{},
+ Line{},
+ Line{x: 0, l: 1, columns: []int{'@'}},
+ },
+ }
+ // Test cases
+ testCases := []struct {
+ name string
+ input string
+ inputX int
+ inputY int
+ inputV int
+ expected *Field
+ }{
+ {"xappend", "test_data/minimal.b98", 3, 0, '#', &xAppendField},
+ {"xprepend", "test_data/minimal.b98", -3, 0, '#', &xPrependField},
+ {"yappend", "test_data/minimal.b98", 0, 3, '#', &yAppendField},
+ {"yprepend", "test_data/minimal.b98", 0, -3, '#', &yPrependField},
+ }
+ for _, tc := range testCases {
+ t.Run(tc.name, func(t *testing.T) {
+ file, err := os.Open(tc.input)
+ require.NoError(t, err, "Failed to open file")
+ defer file.Close()
+ field, err := Load(file)
+ field.Set(tc.inputX, tc.inputY, tc.inputV)
+ require.NoError(t, err)
+ require.Equal(t, tc.expected, field, "Invalid value")
+ })
+ }
+}