atcoder_util/gen/
file_utils.rs

1use crate::sample_cases::SampleCases;
2use std::env;
3use std::fs::{DirBuilder, File};
4use std::io::{self, Write};
5
6/// Create file of sample cases for each element of `SampleCases` struct.
7pub fn create_test_files(sc: &SampleCases, problem_id: &str) -> Result<(), io::Error> {
8    create_directory(format!("io_examples/{}", problem_id))?;
9    create_directory(format!("io_examples/{}/{}_input", problem_id, problem_id))?;
10    create_directory(format!("io_examples/{}/{}_output", problem_id, problem_id))?;
11
12    for (i, input_example) in sc.input.iter().enumerate() {
13        let file_name = format!(
14            r"io_examples/{}/{}_input/input{}.txt",
15            problem_id,
16            problem_id,
17            i + 1
18        );
19        create_test_file(input_example, file_name).expect("Failed to create file.");
20    }
21
22    for (i, output_example) in sc.output.iter().enumerate() {
23        let file_name = format!(
24            r"io_examples/{}/{}_output/output{}.txt",
25            problem_id,
26            problem_id,
27            i + 1
28        );
29        create_test_file(output_example, file_name).expect("Failed to create file.");
30    }
31    Ok(())
32}
33
34/// Create directory named `dir_name` under the current directory if it doesn't exist.
35pub fn create_directory(dir_name: String) -> io::Result<()> {
36    let mut dir = env::current_dir()?;
37    dir.push(dir_name);
38    if dir.is_dir() {
39        Ok(())
40    } else {
41        DirBuilder::new().create(dir)
42    }
43}
44
45/// Write `file_content` on a file.
46fn create_test_file(file_content: &String, file_name: String) -> Result<(), io::Error> {
47    let file = File::create(file_name)?;
48    let mut writer = io::BufWriter::new(file);
49    write!(writer, "{}", file_content).unwrap();
50    Ok(())
51}