summaryrefslogtreecommitdiff
path: root/rust/src/web.rs
diff options
context:
space:
mode:
authorArnaud Bailly <arnaud@pankzsoft.com>2024-10-09 15:55:14 +0200
committerArnaud Bailly <arnaud@pankzsoft.com>2024-10-09 15:55:14 +0200
commitc8d286239ef0d14a985cdcc26e0eda57098a5db1 (patch)
treed1f9d4cd73e43b60000901ed5ccbc9b1a3922fb5 /rust/src/web.rs
parent318f2008e708ea8fc2fde69525fd8ef530e68cc7 (diff)
downloadlambda-nantes-c8d286239ef0d14a985cdcc26e0eda57098a5db1.tar.gz
Generate multiple expressions
Diffstat (limited to 'rust/src/web.rs')
-rw-r--r--rust/src/web.rs42
1 files changed, 38 insertions, 4 deletions
diff --git a/rust/src/web.rs b/rust/src/web.rs
index 6bba34e..3b9fc9e 100644
--- a/rust/src/web.rs
+++ b/rust/src/web.rs
@@ -10,7 +10,7 @@ use std::{collections::HashMap, sync::Arc};
use tokio::task;
use uuid::Uuid;
-use lambda::lambda::{eval_all, eval_whnf, generate_expr, Environment};
+use lambda::lambda::{eval_all, eval_whnf, generate_expr, generate_exprs, Environment};
use lambda::parser::parse;
#[derive(Debug, PartialEq, Serialize, Deserialize, Clone)]
@@ -67,9 +67,31 @@ impl Client {
}
fn generate_expr(&mut self) -> (String, String) {
- let input = generate_expr(self.grade.into(), &mut self.runner);
- let expected = eval_whnf(&input, &mut Environment::new());
- (input.to_string(), expected.to_string())
+ if self.grade >= 10 {
+ self.generate_exprs()
+ } else {
+ let input = generate_expr(self.grade.into(), &mut self.runner);
+ let expected = eval_whnf(&input, &mut Environment::new());
+ (input.to_string(), expected.to_string())
+ }
+ }
+
+ fn generate_exprs(&mut self) -> (String, String) {
+ let exprs = generate_exprs(self.grade.into(), &mut self.runner);
+ let input = exprs
+ .iter()
+ .map(|v| format!("{}", v))
+ .collect::<Vec<_>>()
+ .join("\n");
+ let expected = eval_all(&exprs);
+ (
+ input,
+ expected
+ .iter()
+ .map(|v| format!("{}", v))
+ .collect::<Vec<_>>()
+ .join("\n"),
+ )
}
fn check_result(
@@ -505,6 +527,18 @@ mod app_tests {
}
#[test]
+ async fn client_generates_multiple_terms_at_level_10() {
+ let mut client = client();
+ client.grade = 10;
+
+ let (input, _) = client.generate_expr();
+
+ let parsed = parse(&input);
+
+ assert!(parsed.len() > 1);
+ }
+
+ #[test]
async fn client_increases_grade_on_successful_test() {
let mut client = client();
let expected = "1".to_string();