about summary refs log tree commit diff
path: root/tvix
diff options
context:
space:
mode:
authorGriffin Smith <root@gws.fyi>2022-09-18T16·38-0400
committerclbot <clbot@tvl.fyi>2022-09-18T17·55+0000
commit221d3b9485a1d84fc4d9f06d864242d3c393d0ba (patch)
treee3d909f886e9f57b995f46ca7cc445700d57d39c /tvix
parentbb47baf638c96d133dae51827ff676166d818153 (diff)
test(tvix/eval): Add proof-of-concept test for Chunk r/4901
This is pretty boring at the moment, but mostly serves as a foot in the
door in the direction of writing more tests

Change-Id: Id88eb4ec7e53ebb2d5b5c254c8f45ff750238811
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6637
Autosubmit: grfn <grfn@gws.fyi>
Tested-by: BuildkiteCI
Reviewed-by: tazjin <tazjin@tvl.su>
Diffstat (limited to 'tvix')
-rw-r--r--tvix/eval/src/chunk.rs14
-rw-r--r--tvix/eval/src/lib.rs2
-rw-r--r--tvix/eval/src/opcode.rs8
-rw-r--r--tvix/eval/src/test_utils.rs8
4 files changed, 28 insertions, 4 deletions
diff --git a/tvix/eval/src/chunk.rs b/tvix/eval/src/chunk.rs
index 052bf0bf69..552a4bf6b6 100644
--- a/tvix/eval/src/chunk.rs
+++ b/tvix/eval/src/chunk.rs
@@ -154,3 +154,17 @@ impl Chunk {
         Ok(())
     }
 }
+
+#[cfg(test)]
+mod tests {
+    use crate::test_utils::dummy_span;
+
+    use super::*;
+
+    #[test]
+    fn push_op() {
+        let mut chunk = Chunk::default();
+        chunk.push_op(OpCode::OpNull, dummy_span());
+        assert_eq!(chunk.code.last().unwrap(), &OpCode::OpNull);
+    }
+}
diff --git a/tvix/eval/src/lib.rs b/tvix/eval/src/lib.rs
index 34bb3b57e9..1c3fea3d5b 100644
--- a/tvix/eval/src/lib.rs
+++ b/tvix/eval/src/lib.rs
@@ -13,6 +13,8 @@ mod warnings;
 #[cfg(test)]
 mod properties;
 #[cfg(test)]
+mod test_utils;
+#[cfg(test)]
 mod tests;
 
 // Re-export the public interface used by other crates.
diff --git a/tvix/eval/src/opcode.rs b/tvix/eval/src/opcode.rs
index 9d7fba9ee4..458ea6dd3f 100644
--- a/tvix/eval/src/opcode.rs
+++ b/tvix/eval/src/opcode.rs
@@ -5,7 +5,7 @@ use std::ops::{AddAssign, Sub};
 
 /// Index of a constant in the current code chunk.
 #[repr(transparent)]
-#[derive(Clone, Copy, Debug)]
+#[derive(Clone, Copy, Debug, PartialEq, Eq)]
 pub struct ConstantIdx(pub usize);
 
 /// Index of an instruction in the current code chunk.
@@ -39,17 +39,17 @@ pub struct UpvalueIdx(pub usize);
 
 /// Offset by which an instruction pointer should change in a jump.
 #[repr(transparent)]
-#[derive(Clone, Copy, Debug)]
+#[derive(Clone, Copy, Debug, PartialEq, Eq)]
 pub struct JumpOffset(pub usize);
 
 /// Provided count for an instruction (could represent e.g. a number
 /// of elements).
 #[repr(transparent)]
-#[derive(Clone, Copy, Debug)]
+#[derive(Clone, Copy, Debug, PartialEq, Eq)]
 pub struct Count(pub usize);
 
 #[warn(variant_size_differences)]
-#[derive(Clone, Copy, Debug)]
+#[derive(Clone, Copy, Debug, PartialEq, Eq)]
 pub enum OpCode {
     /// Push a constant onto the stack.
     OpConstant(ConstantIdx),
diff --git a/tvix/eval/src/test_utils.rs b/tvix/eval/src/test_utils.rs
new file mode 100644
index 0000000000..a7d1c3f968
--- /dev/null
+++ b/tvix/eval/src/test_utils.rs
@@ -0,0 +1,8 @@
+use codemap::CodeMap;
+
+/// Create a dummy [`codemap::Span`] for use in tests
+pub(crate) fn dummy_span() -> codemap::Span {
+    let mut codemap = CodeMap::new();
+    let file = codemap.add_file("<dummy>".to_owned(), "<dummy>".to_owned());
+    file.span
+}