Skip to content

Commit

Permalink
Add LoadData test, failing right now
Browse files Browse the repository at this point in the history
  • Loading branch information
entropidelic committed Jul 11, 2023
1 parent d306b6a commit 3e773fc
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 0 deletions.
26 changes: 26 additions & 0 deletions pkg/vm/memory/memory_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -111,3 +111,29 @@ func TestAddSegment(t *testing.T) {
t.Errorf("The number of memory segments should be 4")
}
}

func TestLoadData(t *testing.T) {
// Instantiate memory with 3 empty segments
segment1 := []memory.MaybeRelocatable{*memory.NewMaybeRelocatableInt(1), *memory.NewMaybeRelocatableInt(3)}
segment2 := []memory.MaybeRelocatable{*memory.NewMaybeRelocatableInt(7), *memory.NewMaybeRelocatableInt(5)}
memData := [][]memory.MaybeRelocatable{segment1, segment2}
mem := memory.NewMemory(memData)

// Instantiate MemorySegmentManager
segmentManager := memory.MemorySegmentManager{}
segmentManager.Memory = *mem

data := []memory.MaybeRelocatable{*memory.NewMaybeRelocatableInt(8), *memory.NewMaybeRelocatableInt(13)}

startPtr := *memory.NewRelocatable(1, 2)

endPtr, err := segmentManager.LoadData(startPtr, data)
if err != nil {
t.Errorf("LoadData error: %s", err)
}

expectedEndPtr := *memory.NewRelocatable(1, 3)
if !reflect.DeepEqual(endPtr, expectedEndPtr) {
t.Errorf("LoadData end pointer and expected pointer are not equal")
}
}
16 changes: 16 additions & 0 deletions pkg/vm/memory/segments.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package memory

import "errors"

// MemorySegmentManager manages the list of memory segments.
// Also holds metadata useful for the relocation process of
// the memory at the end of the VM run.
Expand All @@ -23,3 +25,17 @@ func (ms *MemorySegmentManager) Add() *Relocatable {

return NewRelocatable(addedSegmentIdx, 0)
}

func (ms *MemorySegmentManager) LoadData(ptr Relocatable, data []MaybeRelocatable) (*Relocatable, error) {
dataLen := len(data)

for i := dataLen; i >= 0; i-- {
insertAddr := NewRelocatable(ptr.SegmentIndex, ptr.Offset + uint(i))
err := ms.Memory.Insert(insertAddr, &data[i])
if err != nil {
return nil, errors.New("Insertion error")
}
}

return NewRelocatable(ptr.SegmentIndex, ptr.Offset + uint(len(data))), nil
}

0 comments on commit 3e773fc

Please sign in to comment.