lds_rs/
lib.rs

1pub mod ilds;
2pub mod lds;
3// pub mod lds_n;
4
5pub 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 super::lds_n::*;
13    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}