use crate::workdir::Workdir;
#[test]
fn flatmap() {
let wrk = Workdir::new("flatmap");
wrk.create(
"data.csv",
vec![
svec!["name", "colors"],
svec!["john", "yellow|red"],
svec!["mary", "red"],
svec!["jordan", ""],
],
);
let mut cmd = wrk.command("flatmap");
cmd.arg("split(colors, '|') | compact")
.arg("color")
.arg("data.csv");
let got: Vec<Vec<String>> = wrk.read_stdout(&mut cmd);
let expected = vec![
svec!["name", "colors", "color"],
svec!["john", "yellow|red", "yellow"],
svec!["john", "yellow|red", "red"],
svec!["mary", "red", "red"],
];
assert_eq!(got, expected);
}
#[test]
fn flatmap_replace() {
let wrk = Workdir::new("flatmap_replace");
wrk.create(
"data.csv",
vec![
svec!["name", "colors"],
svec!["john", "yellow|red"],
svec!["mary", "red"],
],
);
let mut cmd = wrk.command("flatmap");
cmd.arg("split(colors, '|')")
.arg("color")
.args(&["-r", "colors"])
.arg("data.csv");
let got: Vec<Vec<String>> = wrk.read_stdout(&mut cmd);
let expected = vec![
svec!["name", "color"],
svec!["john", "yellow"],
svec!["john", "red"],
svec!["mary", "red"],
];
assert_eq!(got, expected);
}
#[test]
fn flatmap_filtermap() {
let wrk = Workdir::new("flatmap_filtermap");
wrk.create(
"data.csv",
vec![
svec!["name", "age"],
svec!["John Mayer", "34"],
svec!["Mary Sue", "45"],
],
);
let mut cmd = wrk.command("flatmap");
cmd.arg("if(age >= 40, last(split(name, ' ')))")
.arg("surname")
.arg("data.csv");
let got: Vec<Vec<String>> = wrk.read_stdout(&mut cmd);
let expected = vec![
svec!["name", "age", "surname"],
svec!["Mary Sue", "45", "Sue"],
];
assert_eq!(got, expected);
}