summaryrefslogtreecommitdiff
path: root/lambda-calcul/rust/src/web.rs
diff options
context:
space:
mode:
Diffstat (limited to 'lambda-calcul/rust/src/web.rs')
-rw-r--r--lambda-calcul/rust/src/web.rs18
1 files changed, 11 insertions, 7 deletions
diff --git a/lambda-calcul/rust/src/web.rs b/lambda-calcul/rust/src/web.rs
index 7dae468..7345d0f 100644
--- a/lambda-calcul/rust/src/web.rs
+++ b/lambda-calcul/rust/src/web.rs
@@ -130,18 +130,18 @@ impl Client {
self.generate_exprs()
} else {
let input = generate_expr(self.grade.into(), &mut self.runner);
- let expected = eval_whnf(&input, &mut Environment::new());
+ let expected = eval_whnf(&input, &mut Environment::new(), &mut Environment::new());
(vec![input], vec![expected])
}
}
fn generate_expression_to_type(&mut self) -> (Vec<Value>, Vec<Value>) {
let input =
- generate_expression_to_type((self.grade - Self::TYPING_GRADE).into(), &mut self.runner);
- let expected = type_of_all(&input)
- .iter()
- .map(|t| Value::Type(t.clone()))
- .collect();
+ generate_expression_to_type((self.grade - Self::TYPING_GRADE).into(), &mut self.runner)
+ .into_iter()
+ .map(|e| Value::App(Box::new(Value::Sym(":type-of".to_string())), Box::new(e)))
+ .collect::<Vec<_>>();
+ let expected = eval_all(&input);
(input, expected)
}
@@ -273,6 +273,7 @@ async fn eval(input: String) -> impl Responder {
let exprs = parse_total(&input);
match exprs {
Ok(exprs) => {
+ // Occasionally return a random symbol to keep clients on their toes
let mut rng = rand::thread_rng();
if rng.gen_range(0..10) <= 2 {
return HttpResponse::Ok().body(gensym());
@@ -392,7 +393,10 @@ fn apply_result(
) {
let mut client = client_m.lock().unwrap();
let test = client.check_result(&expected, &response);
- info!("result for {} = {:?}, expected {:?}", client.url, test, expected);
+ info!(
+ "result for {} = {:?}, expected {:?}",
+ client.url, test, expected
+ );
client.apply(&test);
}