From 8a7df7f66b120a3e0b27e0bf1cb7f6227628d27c Mon Sep 17 00:00:00 2001 From: rvcas Date: Fri, 30 Jun 2023 16:12:51 -0400 Subject: [PATCH] test: add empty list test --- crates/aiken-lang/src/parser/expr/list.rs | 13 + .../src/parser/expr/snapshots/empty_list.snap | 9 + crates/aiken-lang/src/parser/utils.rs | 23 ++ crates/aiken-lang/src/tipo/pretty.rs | 2 +- crates/aiken-project/src/blueprint/mod.rs | 2 +- crates/aiken-project/src/blueprint/schema.rs | 2 +- .../aiken-project/src/blueprint/validator.rs | 2 +- crates/flat-rs/tests/flat_test.rs | 243 +++++++++--------- crates/flat-rs/tests/zigzag_test.rs | 31 +-- crates/uplc/src/flat.rs | 2 +- crates/uplc/src/machine/cost_model.rs | 2 +- crates/uplc/src/optimize/shrinker.rs | 2 +- crates/uplc/src/parser.rs | 2 +- 13 files changed, 187 insertions(+), 148 deletions(-) create mode 100644 crates/aiken-lang/src/parser/expr/snapshots/empty_list.snap diff --git a/crates/aiken-lang/src/parser/expr/list.rs b/crates/aiken-lang/src/parser/expr/list.rs index 87f37bbe..3349b9a1 100644 --- a/crates/aiken-lang/src/parser/expr/list.rs +++ b/crates/aiken-lang/src/parser/expr/list.rs @@ -27,3 +27,16 @@ pub fn parser( tail, }) } + +#[cfg(test)] +mod tests { + + use chumsky::Parser; + + use crate::assert_expr; + + #[test] + fn empty_list() { + assert_expr!("[]"); + } +} diff --git a/crates/aiken-lang/src/parser/expr/snapshots/empty_list.snap b/crates/aiken-lang/src/parser/expr/snapshots/empty_list.snap new file mode 100644 index 00000000..8874c6b6 --- /dev/null +++ b/crates/aiken-lang/src/parser/expr/snapshots/empty_list.snap @@ -0,0 +1,9 @@ +--- +source: crates/aiken-lang/src/parser/expr/list.rs +description: "Code:\n\n[]" +--- +List { + location: 0..2, + elements: [], + tail: None, +} diff --git a/crates/aiken-lang/src/parser/utils.rs b/crates/aiken-lang/src/parser/utils.rs index 4c7b5c6b..a76987ed 100644 --- a/crates/aiken-lang/src/parser/utils.rs +++ b/crates/aiken-lang/src/parser/utils.rs @@ -93,3 +93,26 @@ pub fn type_name_with_args() -> impl Parser>) ), ) } + +#[cfg(test)] +#[macro_use] +mod macros { + #[macro_export] + macro_rules! assert_expr { + ($code:expr) => { + let $crate::parser::lexer::LexInfo { tokens, .. } = $crate::parser::lexer::run($code).unwrap(); + + let stream = chumsky::Stream::from_iter($crate::ast::Span::create(tokens.len()), tokens.into_iter()); + + let result = $crate::parser::expr::sequence().parse(stream).unwrap(); + + insta::with_settings!({ + description => concat!("Code:\n\n", $code), + prepend_module_to_snapshot => false, + omit_expression => true + }, { + insta::assert_debug_snapshot!(result); + }); + }; + } +} diff --git a/crates/aiken-lang/src/tipo/pretty.rs b/crates/aiken-lang/src/tipo/pretty.rs index 8dc9d29e..c851d219 100644 --- a/crates/aiken-lang/src/tipo/pretty.rs +++ b/crates/aiken-lang/src/tipo/pretty.rs @@ -168,7 +168,7 @@ fn qualify_type_name(module: &String, typ_name: &str) -> Document<'static> { } #[cfg(test)] -mod test { +mod tests { use std::cell::RefCell; use pretty_assertions::assert_eq; diff --git a/crates/aiken-project/src/blueprint/mod.rs b/crates/aiken-project/src/blueprint/mod.rs index 168953c8..8998ae8d 100644 --- a/crates/aiken-project/src/blueprint/mod.rs +++ b/crates/aiken-project/src/blueprint/mod.rs @@ -140,7 +140,7 @@ impl From<&Config> for Preamble { } #[cfg(test)] -mod test { +mod tests { use super::*; use aiken_lang::builtins; use schema::{Data, Declaration, Items, Schema}; diff --git a/crates/aiken-project/src/blueprint/schema.rs b/crates/aiken-project/src/blueprint/schema.rs index 4bbfedbb..16a42e26 100644 --- a/crates/aiken-project/src/blueprint/schema.rs +++ b/crates/aiken-project/src/blueprint/schema.rs @@ -1033,7 +1033,7 @@ Here's the types I followed and that led me to this problem: } #[cfg(test)] -pub mod test { +pub mod tests { use super::*; use proptest::prelude::*; use serde_json::{self, json, Value}; diff --git a/crates/aiken-project/src/blueprint/validator.rs b/crates/aiken-project/src/blueprint/validator.rs index eb962ae7..65651110 100644 --- a/crates/aiken-project/src/blueprint/validator.rs +++ b/crates/aiken-project/src/blueprint/validator.rs @@ -177,7 +177,7 @@ impl Validator { } #[cfg(test)] -mod test { +mod tests { use assert_json_diff::assert_json_eq; use serde_json::{self, json}; diff --git a/crates/flat-rs/tests/flat_test.rs b/crates/flat-rs/tests/flat_test.rs index 3faa5b3b..cee23e05 100644 --- a/crates/flat-rs/tests/flat_test.rs +++ b/crates/flat-rs/tests/flat_test.rs @@ -1,126 +1,123 @@ -#[cfg(test)] -mod test { - use flat_rs::filler::Filler; - use flat_rs::{decode, encode}; - use proptest::prelude::*; +use flat_rs::filler::Filler; +use flat_rs::{decode, encode}; +use proptest::prelude::*; - prop_compose! { - fn arb_big_vec()(size in 255..300, element in any::()) -> Vec { - (0..size).map(|_| element).collect() - } - } - - #[test] - fn encode_bool() { - let bytes = encode(&true).unwrap(); - - assert_eq!(bytes, vec![0b10000001]); - - let decoded: bool = decode(bytes.as_slice()).unwrap(); - - assert!(decoded); - - let bytes = encode(&false).unwrap(); - - assert_eq!(bytes, vec![0b00000001]); - - let decoded: bool = decode(bytes.as_slice()).unwrap(); - - assert!(!decoded); - } - - #[test] - fn encode_u8() { - let bytes = encode(&3_u8).unwrap(); - - assert_eq!(bytes, vec![0b00000011, 0b00000001]); - - let decoded: u8 = decode(bytes.as_slice()).unwrap(); - - assert_eq!(decoded, 3_u8); - } - - proptest! { - #[test] - fn encode_isize(x: isize) { - let bytes = encode(&x).unwrap(); - let decoded: isize = decode(&bytes).unwrap(); - assert_eq!(decoded, x); - } - - #[test] - fn encode_usize(x: usize) { - let bytes = encode(&x).unwrap(); - let decoded: usize = decode(&bytes).unwrap(); - assert_eq!(decoded, x); - } - - #[test] - fn encode_char(c: char) { - let bytes = encode(&c).unwrap(); - let decoded: char = decode(&bytes).unwrap(); - assert_eq!(decoded, c); - } - - #[test] - fn encode_string(str: String) { - let bytes = encode(&str).unwrap(); - let decoded: String = decode(&bytes).unwrap(); - assert_eq!(decoded, str); - } - - #[test] - fn encode_vec_u8(xs: Vec) { - let bytes = encode(&xs).unwrap(); - let decoded: Vec = decode(&bytes).unwrap(); - assert_eq!(decoded, xs); - } - - #[test] - fn encode_big_vec_u8(xs in arb_big_vec()) { - let bytes = encode(&xs).unwrap(); - let decoded: Vec = decode(&bytes).unwrap(); - assert_eq!(decoded, xs); - } - - #[test] - fn encode_arr_u8(xs: Vec) { - let bytes = encode(&xs.as_slice()).unwrap(); - let decoded: Vec = decode(&bytes).unwrap(); - assert_eq!(decoded, xs); - } - - #[test] - fn encode_big_arr_u8(xs in arb_big_vec()) { - let bytes = encode(&xs.as_slice()).unwrap(); - let decoded: Vec = decode(&bytes).unwrap(); - assert_eq!(decoded, xs); - } - - #[test] - fn encode_boxed(c: char) { - let boxed = Box::new(c); - let bytes = encode(&boxed).unwrap(); - let decoded: char = decode(&bytes).unwrap(); - assert_eq!(decoded, c); - } - } - - #[test] - fn encode_filler() { - let bytes = encode(&Filler::FillerEnd).unwrap(); - - assert_eq!(bytes, vec![0b0000001, 0b00000001]); - - let bytes = encode(&Filler::FillerStart(Box::new(Filler::FillerEnd))).unwrap(); - - assert_eq!(bytes, vec![0b0000001, 0b00000001]); - - let bytes = encode(&Filler::FillerStart(Box::new(Filler::FillerStart( - Box::new(Filler::FillerEnd), - )))) - .unwrap(); - - assert_eq!(bytes, vec![0b0000001, 0b00000001]); +prop_compose! { + fn arb_big_vec()(size in 255..300, element in any::()) -> Vec { + (0..size).map(|_| element).collect() } } + +#[test] +fn encode_bool() { + let bytes = encode(&true).unwrap(); + + assert_eq!(bytes, vec![0b10000001]); + + let decoded: bool = decode(bytes.as_slice()).unwrap(); + + assert!(decoded); + + let bytes = encode(&false).unwrap(); + + assert_eq!(bytes, vec![0b00000001]); + + let decoded: bool = decode(bytes.as_slice()).unwrap(); + + assert!(!decoded); +} + +#[test] +fn encode_u8() { + let bytes = encode(&3_u8).unwrap(); + + assert_eq!(bytes, vec![0b00000011, 0b00000001]); + + let decoded: u8 = decode(bytes.as_slice()).unwrap(); + + assert_eq!(decoded, 3_u8); +} + +proptest! { + #[test] + fn encode_isize(x: isize) { + let bytes = encode(&x).unwrap(); + let decoded: isize = decode(&bytes).unwrap(); + assert_eq!(decoded, x); + } + + #[test] + fn encode_usize(x: usize) { + let bytes = encode(&x).unwrap(); + let decoded: usize = decode(&bytes).unwrap(); + assert_eq!(decoded, x); + } + + #[test] + fn encode_char(c: char) { + let bytes = encode(&c).unwrap(); + let decoded: char = decode(&bytes).unwrap(); + assert_eq!(decoded, c); + } + + #[test] + fn encode_string(str: String) { + let bytes = encode(&str).unwrap(); + let decoded: String = decode(&bytes).unwrap(); + assert_eq!(decoded, str); + } + + #[test] + fn encode_vec_u8(xs: Vec) { + let bytes = encode(&xs).unwrap(); + let decoded: Vec = decode(&bytes).unwrap(); + assert_eq!(decoded, xs); + } + + #[test] + fn encode_big_vec_u8(xs in arb_big_vec()) { + let bytes = encode(&xs).unwrap(); + let decoded: Vec = decode(&bytes).unwrap(); + assert_eq!(decoded, xs); + } + + #[test] + fn encode_arr_u8(xs: Vec) { + let bytes = encode(&xs.as_slice()).unwrap(); + let decoded: Vec = decode(&bytes).unwrap(); + assert_eq!(decoded, xs); + } + + #[test] + fn encode_big_arr_u8(xs in arb_big_vec()) { + let bytes = encode(&xs.as_slice()).unwrap(); + let decoded: Vec = decode(&bytes).unwrap(); + assert_eq!(decoded, xs); + } + + #[test] + fn encode_boxed(c: char) { + let boxed = Box::new(c); + let bytes = encode(&boxed).unwrap(); + let decoded: char = decode(&bytes).unwrap(); + assert_eq!(decoded, c); + } +} + +#[test] +fn encode_filler() { + let bytes = encode(&Filler::FillerEnd).unwrap(); + + assert_eq!(bytes, vec![0b0000001, 0b00000001]); + + let bytes = encode(&Filler::FillerStart(Box::new(Filler::FillerEnd))).unwrap(); + + assert_eq!(bytes, vec![0b0000001, 0b00000001]); + + let bytes = encode(&Filler::FillerStart(Box::new(Filler::FillerStart( + Box::new(Filler::FillerEnd), + )))) + .unwrap(); + + assert_eq!(bytes, vec![0b0000001, 0b00000001]); +} diff --git a/crates/flat-rs/tests/zigzag_test.rs b/crates/flat-rs/tests/zigzag_test.rs index f67acc77..5f6522da 100644 --- a/crates/flat-rs/tests/zigzag_test.rs +++ b/crates/flat-rs/tests/zigzag_test.rs @@ -1,21 +1,18 @@ -#[cfg(test)] -mod test { - use flat_rs::zigzag::{to_isize, to_usize}; - use proptest::prelude::*; +use flat_rs::zigzag::{to_isize, to_usize}; +use proptest::prelude::*; - proptest! { - #[test] - fn zigzag(i: isize) { - let u = to_usize(i); - let converted_i = to_isize(u); - assert_eq!(converted_i, i); - } +proptest! { + #[test] + fn zigzag(i: isize) { + let u = to_usize(i); + let converted_i = to_isize(u); + assert_eq!(converted_i, i); + } - #[test] - fn zagzig(u: usize) { - let i = to_isize(u); - let converted_u = to_usize(i); - assert_eq!(converted_u, u); - } + #[test] + fn zagzig(u: usize) { + let i = to_isize(u); + let converted_u = to_usize(i); + assert_eq!(converted_u, u); } } diff --git a/crates/uplc/src/flat.rs b/crates/uplc/src/flat.rs index a84d1958..159ecdac 100644 --- a/crates/uplc/src/flat.rs +++ b/crates/uplc/src/flat.rs @@ -808,7 +808,7 @@ pub fn decode_constant_tag(d: &mut Decoder) -> Result { } #[cfg(test)] -mod test { +mod tests { use super::{Constant, Program, Term}; use crate::{ ast::{DeBruijn, Name, Type}, diff --git a/crates/uplc/src/machine/cost_model.rs b/crates/uplc/src/machine/cost_model.rs index bfe648b2..d50b89ec 100644 --- a/crates/uplc/src/machine/cost_model.rs +++ b/crates/uplc/src/machine/cost_model.rs @@ -3213,7 +3213,7 @@ impl TryFrom for StepKind { } #[cfg(test)] -mod test { +mod tests { use super::*; use pretty_assertions::assert_eq; diff --git a/crates/uplc/src/optimize/shrinker.rs b/crates/uplc/src/optimize/shrinker.rs index bfb75a5a..2b2a52ac 100644 --- a/crates/uplc/src/optimize/shrinker.rs +++ b/crates/uplc/src/optimize/shrinker.rs @@ -503,7 +503,7 @@ fn replace_identity_usage(term: &Term, original: Rc) -> Term { } #[cfg(test)] -mod test { +mod tests { use pallas_primitives::babbage::{BigInt, PlutusData}; use pretty_assertions::assert_eq; diff --git a/crates/uplc/src/parser.rs b/crates/uplc/src/parser.rs index 370dd5f4..bfc9c482 100644 --- a/crates/uplc/src/parser.rs +++ b/crates/uplc/src/parser.rs @@ -282,7 +282,7 @@ peg::parser! { } #[cfg(test)] -mod test { +mod tests { use num_bigint::BigInt; use crate::ast::{Constant, Name, Program, Term, Type, Unique};