summaryrefslogtreecommitdiff
path: root/rust/src/io.rs
diff options
context:
space:
mode:
authorArnaud Bailly <arnaud.bailly@iohk.io>2024-09-29 17:26:45 +0200
committerArnaud Bailly <arnaud.bailly@iohk.io>2024-09-29 17:26:45 +0200
commit96d6a0a2b562f81c5c14532487ce03a1a9065e6b (patch)
tree0137b403fe0e8fdfbbe979f4081ae25cabdc96f2 /rust/src/io.rs
parent9dcff1ea1b11f765f074d9b93e67bc6760f52049 (diff)
downloadlambda-nantes-96d6a0a2b562f81c5c14532487ce03a1a9065e6b.tar.gz
Implement sub-process based tester
Diffstat (limited to 'rust/src/io.rs')
-rw-r--r--rust/src/io.rs26
1 files changed, 26 insertions, 0 deletions
diff --git a/rust/src/io.rs b/rust/src/io.rs
index 33d8c4e..435f32f 100644
--- a/rust/src/io.rs
+++ b/rust/src/io.rs
@@ -19,6 +19,32 @@ pub fn eval_file(file_name: &str) -> String {
.join(" ")
}
+pub fn batch_eval<I: Read, O: Write>(inp: &mut I, outp: &mut O) {
+ let mut env = Environment::new();
+ let mut reader = BufReader::new(inp);
+ loop {
+ let mut input = String::new();
+ outp.flush().unwrap();
+ match reader.read_line(&mut input) {
+ Ok(0) => break,
+ Ok(_) => (),
+ Err(e) => {
+ writeln!(outp, "{}", e).unwrap();
+ break;
+ }
+ }
+ let values = parse(&input);
+ let results = values
+ .iter()
+ .map(|v| eval(v, &mut env))
+ .collect::<Vec<Value>>();
+ for result in results {
+ writeln!(outp, "{}", result).unwrap();
+ outp.flush().unwrap();
+ }
+ }
+}
+
pub fn repl<I: Read, O: Write>(inp: &mut I, outp: &mut O) {
let mut env = Environment::new();
let mut reader = BufReader::new(inp);