aboutsummaryrefslogtreecommitdiff
path: root/pkg
diff options
context:
space:
mode:
authorJulien Dessaux2021-09-21 00:27:57 +0200
committerJulien Dessaux2021-09-21 00:27:57 +0200
commit309dcb5a029d9b40c72fa8bc01a3009389b66e8e (patch)
tree21d3456847ec32c8219c3b7d935f6c3cec5d5058 /pkg
parentBegan implementing the Instruction Pointer (diff)
downloadgofunge98-309dcb5a029d9b40c72fa8bc01a3009389b66e8e.tar.gz
gofunge98-309dcb5a029d9b40c72fa8bc01a3009389b66e8e.tar.bz2
gofunge98-309dcb5a029d9b40c72fa8bc01a3009389b66e8e.zip
Continued implementing the Instruction Pointer
Diffstat (limited to 'pkg')
-rw-r--r--pkg/pointer/pointer.go5
-rw-r--r--pkg/pointer/pointer_test.go4
-rw-r--r--pkg/pointer/storage-offset.go13
-rw-r--r--pkg/pointer/storage-offset_test.go35
4 files changed, 54 insertions, 3 deletions
diff --git a/pkg/pointer/pointer.go b/pkg/pointer/pointer.go
index 5b4b860..8f2a299 100644
--- a/pkg/pointer/pointer.go
+++ b/pkg/pointer/pointer.go
@@ -6,13 +6,16 @@ type Pointer struct {
x int
y int
delta *Delta
+ // The Storage offset
+ sox int
+ soy int
}
func NewPointer() *Pointer {
return &Pointer{delta: NewDelta(1, 0)}
}
-func (p Pointer) ForkPointer() *Pointer {
+func (p Pointer) Split() *Pointer {
return &p // p is already a copy
}
diff --git a/pkg/pointer/pointer_test.go b/pkg/pointer/pointer_test.go
index 3a77507..b6a3898 100644
--- a/pkg/pointer/pointer_test.go
+++ b/pkg/pointer/pointer_test.go
@@ -12,14 +12,14 @@ func TestNewPointer(t *testing.T) {
require.Equal(t, NewPointer(), &Pointer{delta: &Delta{1, 0}})
}
-func TestForkPointer(t *testing.T) {
+func TestSplit(t *testing.T) {
file, err := os.Open("../field/test_data/hello.b98")
require.NoError(t, err, "Failed to open file")
defer file.Close()
f, err := field.Load(file)
require.NoError(t, err)
p := NewPointer()
- p2 := p.ForkPointer()
+ p2 := p.Split()
// We check that p2 is a real copy
p.Step(*f)
p2.Step(*f)
diff --git a/pkg/pointer/storage-offset.go b/pkg/pointer/storage-offset.go
new file mode 100644
index 0000000..0fcd9ed
--- /dev/null
+++ b/pkg/pointer/storage-offset.go
@@ -0,0 +1,13 @@
+package pointer
+
+func (p Pointer) GetStorageOffset() (x, y int) {
+ return p.sox, p.soy
+}
+
+func (p *Pointer) CalculateNewStorageOffset() {
+ p.sox, p.soy = p.x+p.delta.x, p.y+p.delta.y
+}
+
+func (p *Pointer) SetStorageOffset(x, y int) {
+ p.sox, p.soy = x, y
+}
diff --git a/pkg/pointer/storage-offset_test.go b/pkg/pointer/storage-offset_test.go
new file mode 100644
index 0000000..26a5f38
--- /dev/null
+++ b/pkg/pointer/storage-offset_test.go
@@ -0,0 +1,35 @@
+package pointer
+
+import (
+ "testing"
+
+ "github.com/stretchr/testify/require"
+)
+
+func TestGetStorageOffset(t *testing.T) {
+ p := NewPointer()
+ x, y := p.GetStorageOffset()
+ require.Equal(t, x, 0)
+ require.Equal(t, y, 0)
+ p.SetStorageOffset(3, 8)
+ x, y = p.GetStorageOffset()
+ require.Equal(t, x, 3)
+ require.Equal(t, y, 8)
+}
+
+func TestCalculateNewStorageOffset(t *testing.T) {
+ p := NewPointer()
+ p.CalculateNewStorageOffset()
+ x, y := p.GetStorageOffset()
+ require.Equal(t, x, 1)
+ require.Equal(t, y, 0)
+ p.sox, p.soy = 3, 2
+ x, y = p.GetStorageOffset()
+ require.Equal(t, x, 3)
+ require.Equal(t, y, 2)
+ p.x, p.y = 8, 12
+ p.CalculateNewStorageOffset()
+ x, y = p.GetStorageOffset()
+ require.Equal(t, x, 9)
+ require.Equal(t, y, 12)
+}