Skip to content

Commit 5b9f1da

Browse files
Add CI and some test
1 parent 989661d commit 5b9f1da

File tree

2 files changed

+105
-4
lines changed

2 files changed

+105
-4
lines changed

.github/workflows/tests.yml

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
name: CI
2+
on:
3+
push:
4+
branches:
5+
- main
6+
pull_request:
7+
8+
jobs:
9+
tests:
10+
runs-on: ubuntu-latest
11+
steps:
12+
- name: Checkout
13+
uses: actions/checkout@master
14+
15+
- uses: dtolnay/rust-toolchain@master
16+
with:
17+
toolchain: "nightly"
18+
19+
- name: version info
20+
run: rustc --version; cargo --version;
21+
22+
- name: Run all tests
23+
run: cargo test
24+
25+
fmt:
26+
runs-on: ubuntu-latest
27+
steps:
28+
- name: Checkout
29+
uses: actions/checkout@master
30+
31+
- uses: dtolnay/rust-toolchain@master
32+
with:
33+
toolchain: nightly
34+
35+
- run: |
36+
rustup component add rustfmt
37+
cargo fmt --all -- --check
38+
39+
clippy:
40+
runs-on: ubuntu-latest
41+
steps:
42+
- name: Checkout
43+
uses: actions/checkout@master
44+
45+
- uses: dtolnay/rust-toolchain@master
46+
with:
47+
toolchain: "nightly"
48+
49+
- run: |
50+
rustup component add clippy
51+
cargo clippy -- -D warnings
52+

src/reader.rs

Lines changed: 53 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,10 +71,13 @@ impl CsvReader {
7171
let mut valid_commas = self.comma_bitsets[i] & !inside_quotations;
7272
let mut valid_whitespace = self.whitespace_bitsets[i] & !inside_quotations;
7373

74+
dbg!(valid_commas, valid_whitespace);
75+
7476
let mut first_comma = valid_commas.leading_zeros() as usize;
7577
let mut first_lf = valid_whitespace.leading_zeros() as usize;
7678

7779
if first_comma == 0 && first_lf == 0 {
80+
// congratulations, we just skipped 64 bytes.
7881
continue;
7982
}
8083

@@ -168,6 +171,22 @@ mod tests {
168171
Ok(())
169172
}
170173

174+
#[test]
175+
fn read_basic2() -> Result<()> {
176+
let data = b"aaa,\"bbb\",ccc\n";
177+
178+
check_line(
179+
data,
180+
vec![vec![
181+
"aaa".to_string(),
182+
"\"bbb\"".to_string(),
183+
"ccc".to_string(),
184+
]],
185+
)?;
186+
187+
Ok(())
188+
}
189+
171190
#[test]
172191
fn read_nested() -> Result<()> {
173192
let data = b"\"aaa,howdy\",\"b\"\"bb\",\"ccc\"\n";
@@ -184,6 +203,15 @@ mod tests {
184203
Ok(())
185204
}
186205

206+
// #[test]
207+
// fn read_nested2() -> Result<()> {
208+
// let data = b"aaa,\"b\"\"\"\n";
209+
//
210+
// check_line(data, vec![vec!["aaa".to_string(), "\"b\"\"\"".to_string()]])?;
211+
//
212+
// Ok(())
213+
// }
214+
187215
#[test]
188216
fn read_newline_field() -> Result<()> {
189217
let data = b"\"aaa,ho\nwdy\",\"b\"\"bb\",\"ccc\"\n";
@@ -216,10 +244,34 @@ mod tests {
216244
Ok(())
217245
}
218246

219-
/*
247+
#[test]
248+
fn read_taxi_zone_lookup_header() -> Result<()> {
249+
let data = b"\"LocationID\",\"Borough\",\"Zone\",\"service_zone\"\r\n";
250+
251+
check_line(
252+
data,
253+
vec![vec![
254+
r#""LocationID""#.to_string(),
255+
r#""Borough""#.to_string(),
256+
r#""Zone""#.to_string(),
257+
r#""service_zone""#.to_string(),
258+
]],
259+
)?;
260+
261+
Ok(())
262+
}
263+
220264
#[test]
221265
fn read_taxi_zone_lookup() -> Result<()> {
222266
let data = std::fs::read("taxi_zone_lookup.csv")?;
267+
assert_eq!(
268+
b"\"LocationID\",\"Borough\",\"Zone\",\"service_zone\"\r\n",
269+
&data[..46]
270+
);
271+
272+
let rows = CsvReader::new(&data).read()?;
273+
assert_eq!(rows.len(), 1);
274+
dbg!(&rows);
223275

224276
for row in CsvReader::new(&data).read()? {
225277
let fields = row
@@ -231,9 +283,6 @@ mod tests {
231283
dbg!(fields);
232284
}
233285

234-
assert!(false, "Just to see the dbg");
235-
236286
Ok(())
237287
}
238-
*/
239288
}

0 commit comments

Comments
 (0)