1pub mod ilds;
2pub mod lds;
3pub use crate::lds::HaltonN;
6pub use crate::lds::PRIME_TABLE;
7pub use crate::lds::{Circle, Disk, Halton, Sphere, Sphere3Hopf, VdCorput};
8
9#[cfg(test)]
10mod tests {
11 use super::lds::*;
12 use approx_eq::assert_approx_eq;
14
15 #[test]
16 fn it_works() {
17 let base: [usize; 5] = [2, 3, 5, 7, 11];
18
19 let mut vgen = VdCorput::new(2);
20 vgen.reseed(10);
21 for _i in 0..10 {
22 println!("{}", vgen.pop());
23 }
24 let res = vgen.pop();
25 assert_approx_eq!(res, 0.65625);
26
27 let mut cgen = Circle::new(2);
28 cgen.reseed(10);
29 for _i in 0..10 {
30 println!("{:?}", cgen.pop());
31 }
32 let res = cgen.pop();
33 assert_approx_eq!(res[1], -0.8314696123025452);
34
35 let mut dgen = Disk::new(&[2, 3]);
36 dgen.reseed(0);
37 for _i in 0..10 {
38 println!("{:?}", dgen.pop());
39 }
40 let res = dgen.pop();
41 assert_approx_eq!(res[0], 0.32102183949750684);
42
43 let mut hgen = Halton::new(&[2, 3]);
44 hgen.reseed(10);
45 for _i in 0..10 {
46 println!("{:?}", hgen.pop());
47 }
48 let res = hgen.pop();
49 assert_approx_eq!(res[0], 0.65625);
50
51 let mut sgen = Sphere::new(&base);
52 sgen.reseed(10);
53 for _i in 0..10 {
54 println!("{:?}", sgen.pop());
55 }
56 let res = sgen.pop();
57 assert_approx_eq!(res[1], 0.8722297870746605);
58
59 let mut s3fgen = Sphere3Hopf::new(&base);
60 s3fgen.reseed(10);
61 for _i in 0..10 {
62 println!("{:?}", s3fgen.pop());
63 }
64 let res = s3fgen.pop();
65 assert_approx_eq!(res[0], 0.23764785962349413);
66
67 let mut hgen = HaltonN::new(&PRIME_TABLE[0..5]);
68 hgen.reseed(10);
69 for _i in 0..10 {
70 println!("{:?}", hgen.pop_vec());
71 }
72 let res = hgen.pop_vec();
73 assert_approx_eq!(res[0], 0.65625);
74 }
75}