1use crate::{Dummy, Fake, Faker};
2use glam::{Mat3, Mat4, Vec2, Vec3, Vec4};
3
4impl Dummy<Faker> for Mat3 {
5 fn dummy_with_rng<R: rand::RngExt + ?Sized>(_f: &Faker, rng: &mut R) -> Self {
6 let col_1: Vec3 = Faker.fake_with_rng(rng);
7 let col_2: Vec3 = Faker.fake_with_rng(rng);
8 let col_3: Vec3 = Faker.fake_with_rng(rng);
9 Mat3::from_cols(col_1, col_2, col_3)
10 }
11}
12
13impl Dummy<Faker> for Mat4 {
14 fn dummy_with_rng<R: rand::RngExt + ?Sized>(_f: &Faker, rng: &mut R) -> Self {
15 let col_1: Vec4 = Faker.fake_with_rng(rng);
16 let col_2: Vec4 = Faker.fake_with_rng(rng);
17 let col_3: Vec4 = Faker.fake_with_rng(rng);
18 let col_4: Vec4 = Faker.fake_with_rng(rng);
19 Mat4::from_cols(col_1, col_2, col_3, col_4)
20 }
21}
22
23impl Dummy<Faker> for Vec3 {
24 fn dummy_with_rng<R: rand::RngExt + ?Sized>(_f: &Faker, rng: &mut R) -> Self {
25 let x: f32 = Faker.fake_with_rng(rng);
26 let y: f32 = Faker.fake_with_rng(rng);
27 let z: f32 = Faker.fake_with_rng(rng);
28 Vec3::new(x, y, z)
29 }
30}
31
32impl Dummy<Faker> for Vec2 {
33 fn dummy_with_rng<R: rand::RngExt + ?Sized>(_f: &Faker, rng: &mut R) -> Self {
34 let x: f32 = Faker.fake_with_rng(rng);
35 let y: f32 = Faker.fake_with_rng(rng);
36 Vec2::new(x, y)
37 }
38}
39
40impl Dummy<Faker> for Vec4 {
41 fn dummy_with_rng<R: rand::RngExt + ?Sized>(_f: &Faker, rng: &mut R) -> Self {
42 let x: f32 = Faker.fake_with_rng(rng);
43 let y: f32 = Faker.fake_with_rng(rng);
44 let z: f32 = Faker.fake_with_rng(rng);
45 let w: f32 = Faker.fake_with_rng(rng);
46 Vec4::new(x, y, z, w)
47 }
48}
49#[cfg(test)]
50mod tests {
51 use super::*;
52 use glam::{vec2, vec3, vec4};
53 use rand::rngs::StdRng;
54 use rand::{RngExt, SeedableRng};
55
56 const SEED: [u8; 32] = [
57 1, 0, 0, 0, 23, 0, 0, 0, 200, 1, 0, 0, 210, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
58 1, 3, 5, 0,
59 ];
60
61 #[test]
62 fn fake_vec2() {
63 let rng = &mut StdRng::from_seed(SEED);
64 let expected = vec2(rng.random(), rng.random());
65 let rng = &mut StdRng::from_seed(SEED);
66 let fake = Faker.fake_with_rng::<Vec2, _>(rng);
67 assert_eq!(expected, fake);
68 }
69
70 #[test]
71 fn fake_vec3() {
72 let rng = &mut StdRng::from_seed(SEED);
73 let expected = vec3(rng.random(), rng.random(), rng.random());
74 let rng = &mut StdRng::from_seed(SEED);
75 let fake = Faker.fake_with_rng::<Vec3, _>(rng);
76 assert_eq!(expected, fake);
77 }
78
79 #[test]
80 fn fake_vec4() {
81 let rng = &mut StdRng::from_seed(SEED);
82 let expected = vec4(rng.random(), rng.random(), rng.random(), rng.random());
83 let rng = &mut StdRng::from_seed(SEED);
84 let fake = Faker.fake_with_rng::<Vec4, _>(rng);
85 assert_eq!(expected, fake);
86 }
87
88 #[test]
89 fn fake_mat4() {
90 let rng = &mut StdRng::from_seed(SEED);
91 let expected: Vec<f32> = (0..16).map(|_| rng.random()).collect();
92 let rng = &mut StdRng::from_seed(SEED);
93 let fake = Faker.fake_with_rng::<Mat4, _>(rng);
94 assert_eq!(expected[0..16], fake.to_cols_array());
95 }
96}