summaryrefslogtreecommitdiff
path: root/rust/src/web.rs
diff options
context:
space:
mode:
Diffstat (limited to 'rust/src/web.rs')
-rw-r--r--rust/src/web.rs45
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),
+ }
+ }
}