From 309dcb5a029d9b40c72fa8bc01a3009389b66e8e Mon Sep 17 00:00:00 2001 From: Julien Dessaux Date: Tue, 21 Sep 2021 00:27:57 +0200 Subject: Continued implementing the Instruction Pointer --- pkg/pointer/pointer.go | 5 ++++- pkg/pointer/pointer_test.go | 4 ++-- pkg/pointer/storage-offset.go | 13 +++++++++++++ pkg/pointer/storage-offset_test.go | 35 +++++++++++++++++++++++++++++++++++ 4 files changed, 54 insertions(+), 3 deletions(-) create mode 100644 pkg/pointer/storage-offset.go create mode 100644 pkg/pointer/storage-offset_test.go (limited to 'pkg') 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) +} -- cgit v1.2.3