Skip to main content

toasty_driver_integration_suite/tests/
float_fields.rs

1use 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        /// f32 field stored as DOUBLE PRECISION / FLOAT8
11        #[column(type = f64)]
12        value_f32: f32,
13        /// f64 field stored as REAL / FLOAT4
14        #[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    // Update float fields
70    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    // Delete
83    updated.delete().exec(&mut db).await?;
84    assert_err!(Measurement::get_by_id(&mut db, &read.id).await);
85
86    Ok(())
87}