-
Notifications
You must be signed in to change notification settings - Fork 66
/
test_reverse.rs
81 lines (71 loc) · 2 KB
/
test_reverse.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
use crate::{qcheck, workdir::Workdir, Csv, CsvData};
fn prop_reverse(name: &str, rows: CsvData, headers: bool) -> bool {
let wrk = Workdir::new(name);
wrk.create("in.csv", rows.clone());
let mut cmd = wrk.command("reverse");
cmd.arg("in.csv");
if !headers {
cmd.arg("--no-headers");
}
let got: Vec<Vec<String>> = wrk.read_stdout(&mut cmd);
let mut expected = rows.to_vecs();
let headers = if headers && !expected.is_empty() {
expected.remove(0)
} else {
vec![]
};
expected.reverse();
if !headers.is_empty() {
expected.insert(0, headers);
}
rassert_eq!(got, expected)
}
#[test]
fn prop_reverse_headers() {
fn p(rows: CsvData) -> bool {
prop_reverse("prop_reverse_headers", rows, true)
}
qcheck(p as fn(CsvData) -> bool);
}
#[test]
fn prop_reverse_no_headers() {
fn p(rows: CsvData) -> bool {
prop_reverse("prop_reverse_no_headers", rows, false)
}
qcheck(p as fn(CsvData) -> bool);
}
fn prop_reverse_indexed(name: &str, rows: CsvData, headers: bool) -> bool {
let wrk = Workdir::new(name);
wrk.create_indexed("in.csv", rows.clone());
let mut cmd = wrk.command("reverse");
cmd.arg("in.csv");
if !headers {
cmd.arg("--no-headers");
}
let got: Vec<Vec<String>> = wrk.read_stdout(&mut cmd);
let mut expected = rows.to_vecs();
let headers = if headers && !expected.is_empty() {
expected.remove(0)
} else {
vec![]
};
expected.reverse();
if !headers.is_empty() {
expected.insert(0, headers);
}
rassert_eq!(got, expected)
}
#[test]
fn prop_reverse_headers_indexed() {
fn p(rows: CsvData) -> bool {
prop_reverse_indexed("prop_reverse_headers_indexed", rows, true)
}
qcheck(p as fn(CsvData) -> bool);
}
#[test]
fn prop_reverse_no_headers_indexed() {
fn p(rows: CsvData) -> bool {
prop_reverse_indexed("prop_reverse_no_headers_indexed", rows, false)
}
qcheck(p as fn(CsvData) -> bool);
}