summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--rust/src/lambda.rs2
-rw-r--r--rust/src/web.rs7
2 files changed, 7 insertions, 2 deletions
diff --git a/rust/src/lambda.rs b/rust/src/lambda.rs
index 30f9f43..a73ca34 100644
--- a/rust/src/lambda.rs
+++ b/rust/src/lambda.rs
@@ -96,7 +96,7 @@ fn subst(var: &str, body: &Value, e: &Value) -> Value {
}
}
-fn gensym() -> String {
+pub fn gensym() -> String {
let mut rng = rand::thread_rng();
let n1: u8 = rng.gen();
diff --git a/rust/src/web.rs b/rust/src/web.rs
index 0bf36a5..c63268a 100644
--- a/rust/src/web.rs
+++ b/rust/src/web.rs
@@ -5,13 +5,14 @@ use futures::lock::Mutex;
use handlebars::{DirectorySourceOptions, Handlebars};
use log::info;
use proptest::test_runner::{Config, RngAlgorithm, TestRng, TestRunner};
+use rand::Rng;
use serde::{Deserialize, Serialize};
use std::time::Duration;
use std::{collections::HashMap, sync::Arc};
use tokio::task;
use uuid::Uuid;
-use lambda::lambda::{eval_all, eval_whnf, generate_expr, generate_exprs, Environment};
+use lambda::lambda::{eval_all, eval_whnf, generate_expr, generate_exprs, gensym, Environment};
use lambda::parser::{parse, parse_total};
#[derive(Debug, PartialEq, Serialize, Deserialize, Clone)]
@@ -221,6 +222,10 @@ async fn eval(input: String) -> impl Responder {
let exprs = parse_total(&input);
match exprs {
Ok(exprs) => {
+ let mut rng = rand::thread_rng();
+ if rng.gen_range(0..10) <= 2 {
+ return HttpResponse::Ok().body(gensym());
+ }
let output = eval_all(&exprs)
.iter()
.map(|v| format!("{}", v))