| 276 | |
| 277 | #[test] |
| 278 | fn timing_comparison() { |
| 279 | let mut rng = OsRng::default(); |
| 280 | |
| 281 | for i in [40, 60, 80, 100] { |
| 282 | let g = (0..i).map(|_| G1Affine::rand(&mut rng)).collect::<Vec<_>>(); |
| 283 | let h = (0..i).map(|_| G1Affine::rand(&mut rng)).collect::<Vec<_>>(); |
| 284 | let k = (0..i).map(|_| G1Affine::rand(&mut rng)).collect::<Vec<_>>(); |
| 285 | let a = (0..i).map(|_| Fr::rand(&mut rng)).collect::<Vec<_>>(); |
| 286 | let b = (0..i).map(|_| Fr::rand(&mut rng)).collect::<Vec<_>>(); |
| 287 | let c = (0..i).map(|_| Fr::rand(&mut rng)).collect::<Vec<_>>(); |
| 288 | |
| 289 | let r = (0..i) |
| 290 | .map(|j| (g[0] * a[j] + h[0] * b[j]).into_affine()) |
| 291 | .collect::<Vec<_>>(); |
| 292 | |
| 293 | let start = Instant::now(); |
| 294 | for j in 0..i { |
| 295 | assert_eq!((g[0] * a[j] + h[0] * b[j]).into_affine(), r[j]); |
| 296 | } |
| 297 | println!("For {} items, naive check took {:?}", i, start.elapsed()); |
| 298 | |
| 299 | let start = Instant::now(); |
| 300 | let mut checker = RandomizedMultChecker::new_using_rng(&mut rng); |
| 301 | for j in 0..i { |
| 302 | checker.add_2(g[0], &a[j], h[0], &b[j], r[j]); |
| 303 | } |
| 304 | assert!(checker.verify()); |
| 305 | println!( |
| 306 | "For {} items, RandomizedMultChecker took {:?}", |
| 307 | i, |
| 308 | start.elapsed() |
| 309 | ); |
| 310 | |
| 311 | let r = (0..i) |
| 312 | .map(|j| (g[j] * a[j] + h[j] * b[j]).into_affine()) |
| 313 | .collect::<Vec<_>>(); |
| 314 | |
| 315 | let start = Instant::now(); |
| 316 | for j in 0..i { |
| 317 | assert_eq!((g[j] * a[j] + h[j] * b[j]).into_affine(), r[j]); |
| 318 | } |
| 319 | println!("For {} items, naive check took {:?}", i, start.elapsed()); |
| 320 | |
| 321 | let start = Instant::now(); |
| 322 | let mut checker = RandomizedMultChecker::new_using_rng(&mut rng); |
| 323 | for j in 0..i { |
| 324 | checker.add_2(g[j], &a[j], h[j], &b[j], r[j]); |
| 325 | } |
| 326 | assert!(checker.verify()); |
| 327 | println!( |
| 328 | "For {} items, RandomizedMultChecker took {:?}", |
| 329 | i, |
| 330 | start.elapsed() |
| 331 | ); |
| 332 | |
| 333 | let r = (0..i) |
| 334 | .map(|j| (g[0] * a[j] + h[0] * b[j] + k[0] * c[j]).into_affine()) |
| 335 | .collect::<Vec<_>>(); |