Skip to content
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

#### Upcoming Changes

* fix: make `MemorySegmentManager`'s `memory` field private [#2164](https://github.com/lambdaclass/cairo-vm/pull/2164)

* dev: make `VirtualMachine::get_traceback_entries` pub

* chore: Pin types-rs version to the one set in lockfile [#2140](https://github.com/lambdaclass/cairo-vm/pull/2140)
Expand Down
56 changes: 55 additions & 1 deletion vm/src/vm/vm_memory/memory_segments.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
use crate::stdlib::borrow::Cow;
use crate::stdlib::collections::HashSet;
use core::cmp::max;
use core::fmt;
Expand All @@ -23,7 +24,7 @@ use super::memory::MemoryCell;
pub struct MemorySegmentManager {
pub segment_sizes: HashMap<usize, usize>,
pub segment_used_sizes: Option<Vec<usize>>,
pub memory: Memory,
pub(crate) memory: Memory,
// A map from segment index to a list of pairs (offset, page_id) that constitute the
// public memory. Note that the offset is absolute (not based on the page_id).
pub public_memory_offsets: HashMap<usize, Vec<(usize, usize)>>,
Expand Down Expand Up @@ -328,6 +329,16 @@ impl MemorySegmentManager {
}
Ok(())
}

pub fn get_integer(&self, key: Relocatable) -> Result<Felt252, MemoryError> {
self.memory.get_integer(key).map(Cow::into_owned)
}
pub fn get_relocatable(&self, key: Relocatable) -> Result<Relocatable, MemoryError> {
self.memory.get_relocatable(key)
}
pub fn get_maybe_relocatable(&self, key: Relocatable) -> Result<MaybeRelocatable, MemoryError> {
self.memory.get_maybe_relocatable(key)
}
}

impl Default for MemorySegmentManager {
Expand Down Expand Up @@ -1117,4 +1128,47 @@ mod tests {
])
);
}

#[test]
fn test_get_integer() {
let mut memory_segment_manager = MemorySegmentManager::new();
memory_segment_manager.memory = memory![((0, 0), 10)];
assert_eq!(
memory_segment_manager
.get_integer(Relocatable::from((0, 0)))
.unwrap()
.as_ref(),
&Felt252::from(10)
);
}

#[test]
fn test_get_relocatable() {
let mut memory_segment_manager = MemorySegmentManager::new();
memory_segment_manager.memory = memory![((0, 0), (0, 1))];
assert_eq!(
memory_segment_manager
.get_relocatable(Relocatable::from((0, 0)))
.unwrap(),
relocatable!(0, 1)
);
}

#[test]
fn test_get_maybe_relocatable() {
let mut memory_segment_manager = MemorySegmentManager::new();
memory_segment_manager.memory = memory![((0, 0), (0, 1)), ((0, 1), 10)];
assert_eq!(
memory_segment_manager
.get_maybe_relocatable(relocatable!(0, 0))
.unwrap(),
mayberelocatable!(0, 1)
);
assert_eq!(
memory_segment_manager
.get_maybe_relocatable(relocatable!(0, 1))
.unwrap(),
mayberelocatable!(10)
);
}
}
Loading