aboutsummaryrefslogtreecommitdiff
path: root/pkg/field/utils_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/field/utils_test.go')
-rw-r--r--pkg/field/utils_test.go257
1 files changed, 257 insertions, 0 deletions
diff --git a/pkg/field/utils_test.go b/pkg/field/utils_test.go
index 89b4d39..52916e3 100644
--- a/pkg/field/utils_test.go
+++ b/pkg/field/utils_test.go
@@ -72,3 +72,260 @@ func TestIsIn(t *testing.T) {
})
}
}
+
+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 := LoadFile(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 := LoadFile(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 := LoadFile(file)
+ field.Set(tc.inputX, tc.inputY, tc.inputV)
+ require.NoError(t, err)
+ require.Equal(t, tc.expected, field, "Invalid value")
+ })
+ }
+}
+
+// get and put on an empty line
+func TestGetAndSetOnEmptyLines(t *testing.T) {
+ f := Field{
+ x: 0,
+ y: -4,
+ lx: 1,
+ ly: 8,
+ lines: []Line{
+ Line{x: 0, l: 1, columns: []int{'b'}},
+ Line{},
+ Line{},
+ Line{x: 0, l: 1, columns: []int{'c'}},
+ Line{x: 0, l: 1, columns: []int{'@'}},
+ Line{},
+ Line{x: 0, l: 1, columns: []int{'a'}},
+ Line{x: 0, l: 1, columns: []int{'#'}},
+ },
+ }
+ file, err := os.Open("test_data/minimal.b98")
+ require.NoError(t, err, "Failed to open file")
+ defer file.Close()
+ field, err := LoadFile(file)
+ field.Set(0, 3, '#')
+ v := field.Get(0, 3)
+ require.Equal(t, v, int('#'))
+ v = field.Get(0, 2)
+ require.Equal(t, v, int(' '))
+ field.Set(0, 2, 'a')
+ field.Set(0, -4, 'b')
+ v = field.Get(0, -1)
+ require.Equal(t, v, int(' '))
+ field.Set(0, -1, 'c')
+ require.Equal(t, field, &f)
+}