toasty_driver_integration_suite/tests/
float_fields.rs1use crate::prelude::*;
2
3#[driver_test(id(ID))]
4pub async fn float_fields_column_type_override(t: &mut Test) -> Result<()> {
5 #[derive(Debug, toasty::Model)]
6 struct Measurement {
7 #[key]
8 #[auto]
9 id: ID,
10 #[column(type = f64)]
12 value_f32: f32,
13 #[column(type = f32)]
15 value_f64: f64,
16 }
17
18 let mut db = t.setup_db(models!(Measurement)).await;
19
20 let created = Measurement::create()
21 .value_f32(1.5_f32)
22 .value_f64(2.5_f64)
23 .exec(&mut db)
24 .await?;
25
26 assert_eq!(created.value_f32, 1.5_f32);
27 assert_eq!(created.value_f64, 2.5_f64);
28
29 let read = Measurement::get_by_id(&mut db, &created.id).await?;
30
31 assert_eq!(read.value_f32, 1.5_f32);
32 assert_eq!(read.value_f64, 2.5_f64);
33
34 Ok(())
35}
36
37#[driver_test(id(ID))]
38pub async fn float_fields_crud(t: &mut Test) -> Result<()> {
39 #[allow(clippy::approx_constant)]
40 const PI_F32: f32 = 3.14;
41 #[allow(clippy::approx_constant)]
42 const PI_F64: f64 = 3.14159265358979;
43
44 #[derive(Debug, toasty::Model)]
45 struct Measurement {
46 #[key]
47 #[auto]
48 id: ID,
49 value_f32: f32,
50 value_f64: f64,
51 }
52
53 let mut db = t.setup_db(models!(Measurement)).await;
54
55 let mut created = Measurement::create()
56 .value_f32(1.5_f32)
57 .value_f64(2.5_f64)
58 .exec(&mut db)
59 .await?;
60
61 assert_eq!(created.value_f32, 1.5_f32);
62 assert_eq!(created.value_f64, 2.5_f64);
63
64 let read = Measurement::get_by_id(&mut db, &created.id).await?;
65
66 assert_eq!(read.value_f32, 1.5_f32);
67 assert_eq!(read.value_f64, 2.5_f64);
68
69 created
71 .update()
72 .value_f32(PI_F32)
73 .value_f64(PI_F64)
74 .exec(&mut db)
75 .await?;
76
77 let updated = Measurement::get_by_id(&mut db, &read.id).await?;
78
79 assert_eq!(updated.value_f32, PI_F32);
80 assert_eq!(updated.value_f64, PI_F64);
81
82 updated.delete().exec(&mut db).await?;
84 assert_err!(Measurement::get_by_id(&mut db, &read.id).await);
85
86 Ok(())
87}