[READ-ONLY] Mirror of https://github.com/probablykasper/csv-pipeline.
0

Configure Feed

Select the types of activity you want to include in your feed.

Add transform test

Kasper (Sep 5, 2023, 3:18 AM +0200) ed0690f0 fafd5f08

+92
+48
Cargo.lock
··· 3 3 version = 3 4 4 5 5 [[package]] 6 + name = "autocfg" 7 + version = "1.1.0" 8 + source = "registry+https://github.com/rust-lang/crates.io-index" 9 + checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" 10 + 11 + [[package]] 12 + name = "bigdecimal" 13 + version = "0.3.1" 14 + source = "registry+https://github.com/rust-lang/crates.io-index" 15 + checksum = "a6773ddc0eafc0e509fb60e48dff7f450f8e674a0686ae8605e8d9901bd5eefa" 16 + dependencies = [ 17 + "num-bigint", 18 + "num-integer", 19 + "num-traits", 20 + ] 21 + 22 + [[package]] 6 23 name = "bstr" 7 24 version = "0.2.17" 8 25 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 40 57 name = "csv-pipeline" 41 58 version = "0.4.0" 42 59 dependencies = [ 60 + "bigdecimal", 43 61 "csv", 44 62 "linked-hash-map", 45 63 ] ··· 67 85 version = "2.5.0" 68 86 source = "registry+https://github.com/rust-lang/crates.io-index" 69 87 checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" 88 + 89 + [[package]] 90 + name = "num-bigint" 91 + version = "0.4.3" 92 + source = "registry+https://github.com/rust-lang/crates.io-index" 93 + checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" 94 + dependencies = [ 95 + "autocfg", 96 + "num-integer", 97 + "num-traits", 98 + ] 99 + 100 + [[package]] 101 + name = "num-integer" 102 + version = "0.1.45" 103 + source = "registry+https://github.com/rust-lang/crates.io-index" 104 + checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" 105 + dependencies = [ 106 + "autocfg", 107 + "num-traits", 108 + ] 109 + 110 + [[package]] 111 + name = "num-traits" 112 + version = "0.2.15" 113 + source = "registry+https://github.com/rust-lang/crates.io-index" 114 + checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" 115 + dependencies = [ 116 + "autocfg", 117 + ] 70 118 71 119 [[package]] 72 120 name = "regex-automata"
+1
Cargo.toml
··· 13 13 categories = ["parsing", "encoding"] 14 14 15 15 [dependencies] 16 + bigdecimal = "0.3.1" 16 17 csv = "1.1" 17 18 linked-hash-map = "0.5"
+43
src/transform.rs
··· 179 179 Ok(v) => v, 180 180 Err(_) => return Err(Error::InvalidField(field)), 181 181 }; 182 + println!("+ {}", new); 182 183 self.value += new; 184 + println!("= {}", self.value); 183 185 Ok(()) 184 186 } 185 187 ··· 189 191 fn name(&self) -> String { 190 192 self.name.clone() 191 193 } 194 + } 195 + #[test] 196 + fn test_sum() { 197 + use crate::{Pipeline, Transformer}; 198 + use bigdecimal::BigDecimal; 199 + 200 + let source_a = "\ 201 + Name,Score\n\ 202 + X,0.0002717\n\ 203 + X,0.0012421\n\ 204 + X,0.0002717\n\ 205 + \n"; 206 + let reader_a = csv::Reader::from_reader(source_a.as_bytes()); 207 + let csv_a = Pipeline::from_reader(reader_a).unwrap(); 208 + 209 + let source_b = "\ 210 + Name,Score\n\ 211 + X,0.1554265496221735094502632659\n\ 212 + X,0.9015300654231201127102294398\n\ 213 + X,1.3000732732666677958677548331\n\ 214 + X,0.0260421967374136391163477056\n\ 215 + X,0.4298765712842231366676277260\n\ 216 + X,2.0992253398385276395528943275\n\ 217 + \n"; 218 + let reader_b = csv::Reader::from_reader(source_b.as_bytes()); 219 + let csv_b = Pipeline::from_reader(reader_b).unwrap(); 220 + 221 + let csv = Pipeline::from_pipelines(vec![csv_a, csv_b]) 222 + .transform_into(|| { 223 + vec![ 224 + Transformer::new("Name").keep_unique(), 225 + Transformer::new("Score").sum(BigDecimal::from(0)), 226 + ] 227 + }) 228 + .collect_into_string() 229 + .unwrap(); 230 + assert_eq!( 231 + csv, 232 + "Name,Score\n\ 233 + X,4.9139594961721258333651172979\n" 234 + ); 192 235 } 193 236 194 237 struct Count {