diff options
| author | Arnaud Bailly <arnaud.bailly@iohk.io> | 2024-09-29 17:26:45 +0200 |
|---|---|---|
| committer | Arnaud Bailly <arnaud.bailly@iohk.io> | 2024-09-29 17:26:45 +0200 |
| commit | 96d6a0a2b562f81c5c14532487ce03a1a9065e6b (patch) | |
| tree | 0137b403fe0e8fdfbbe979f4081ae25cabdc96f2 /rust/src/io.rs | |
| parent | 9dcff1ea1b11f765f074d9b93e67bc6760f52049 (diff) | |
| download | lambda-nantes-96d6a0a2b562f81c5c14532487ce03a1a9065e6b.tar.gz | |
Implement sub-process based tester
Diffstat (limited to 'rust/src/io.rs')
| -rw-r--r-- | rust/src/io.rs | 26 |
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); |
