diff options
| author | Arnaud Bailly <arnaud.bailly@iohk.io> | 2024-10-06 21:11:04 +0200 |
|---|---|---|
| committer | Arnaud Bailly <arnaud.bailly@iohk.io> | 2024-10-06 21:11:04 +0200 |
| commit | a2220cd6ca103b636567b557d21ab345c6ab99e0 (patch) | |
| tree | 6bb4e35c3921d4918a0c7995762bc0b720e40d78 /rust/src/web.rs | |
| parent | aaaee7bdc476f5f0631dc0d2f367c54bdfe03d12 (diff) | |
| download | lambda-nantes-a2220cd6ca103b636567b557d21ab345c6ab99e0.tar.gz | |
Use proptest's Strategy to generate expressions
Diffstat (limited to 'rust/src/web.rs')
| -rw-r--r-- | rust/src/web.rs | 45 |
1 files changed, 29 insertions, 16 deletions
diff --git a/rust/src/web.rs b/rust/src/web.rs index 6bc892b..5729083 100644 --- a/rust/src/web.rs +++ b/rust/src/web.rs @@ -7,6 +7,7 @@ use futures::try_join; use futures::{future::join_all, lock::Mutex}; use lambda::ast::Value; use log::info; +use proptest::test_runner::TestRunner; use rand::rngs::SmallRng; use rand::{Rng, SeedableRng}; use serde::{Deserialize, Serialize}; @@ -38,12 +39,12 @@ enum RegistrationResult { UrlAlreadyRegistered { url: String }, } -#[derive(Debug, PartialEq, Clone)] +#[derive(Debug, Clone)] struct Client { id: Uuid, url: String, grade: u8, - rng: SmallRng, + runner: TestRunner, seed: u64, } @@ -59,7 +60,7 @@ impl Client { } fn generate_expr(&mut self) -> (String, String) { - let input = generate_expr(self.grade.into(), &mut self.rng); + let input = generate_expr(self.grade.into(), &mut self.runner); let expected = eval_whnf(&input, &mut Environment::new()); (input.to_string(), expected.to_string()) } @@ -117,7 +118,7 @@ impl AppState for State { url: registration.url.clone(), grade: 1, seed, - rng: SmallRng::seed_from_u64(seed), + runner: TestRunner::deterministic(), })); let client_s = client.clone(); self.clients.insert(registration.url.clone(), client); @@ -355,15 +356,19 @@ mod app_tests { ); } - #[test] - async fn client_generates_constant_at_level_1() { - let mut client = Client { + fn client() -> Client { + Client { id: Uuid::new_v4(), url: "http://1.2.3.4".to_string(), grade: 1, seed: 42, - rng: SmallRng::seed_from_u64(42), - }; + runner: TestRunner::deterministic(), + } + } + + #[test] + async fn client_generates_constant_at_level_1() { + let mut client = client(); let (input, _) = client.generate_expr(); @@ -375,17 +380,25 @@ mod app_tests { #[test] async fn client_generates_different_inputs_on_each_call() { - let mut client = Client { - id: Uuid::new_v4(), - url: "http://1.2.3.4".to_string(), - grade: 1, - seed: 42, - rng: SmallRng::seed_from_u64(42), - }; + let mut client = client(); let (input1, _) = client.generate_expr(); let (input2, _) = client.generate_expr(); assert_ne!(input1, input2); } + + #[test] + async fn client_generates_variables_at_level_2() { + let mut client = client(); + client.grade = 2; + + let (input, _) = client.generate_expr(); + + let parsed = parse(&input); + match parsed[..] { + [Value::Sym(_)] => (), + _ => panic!("Expected symbol, got {:?}", parsed), + } + } } |
