summaryrefslogtreecommitdiffstats
path: root/src/util.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/util.rs')
-rw-r--r--src/util.rs41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/util.rs b/src/util.rs
index 6a62708..9cc3d6a 100644
--- a/src/util.rs
+++ b/src/util.rs
@@ -1,6 +1,47 @@
use anyhow::Context as _;
use std::io::{BufRead as _, Read as _};
+macro_rules! data {
+ () => {{
+ let file = crate::util::src_file_to_data_file(&std::file!());
+ std::fs::File::open(file.clone())
+ .with_context(|| format!("couldn't find data file {}", file))
+ }};
+}
+
+macro_rules! data_ints {
+ () => {
+ crate::util::read_ints(&crate::util::src_file_to_data_file(
+ &std::file!(),
+ ))
+ };
+}
+
+macro_rules! data_bytes {
+ () => {
+ crate::util::read_file(&crate::util::src_file_to_data_file(
+ &std::file!(),
+ ))
+ };
+}
+
+macro_rules! data_str {
+ () => {
+ crate::util::read_file_str(&crate::util::src_file_to_data_file(
+ &std::file!(),
+ ))
+ };
+}
+
+pub fn src_file_to_data_file(file: &str) -> String {
+ let parts: Vec<_> = file.split('/').collect();
+ format!(
+ "data/{}/{}.txt",
+ parts[parts.len() - 3],
+ parts[parts.len() - 2]
+ )
+}
+
pub fn read_ints(filename: &str) -> anyhow::Result<Vec<i64>> {
let f = std::fs::File::open(filename)
.with_context(|| format!("couldn't find data file {}", filename))?;