Skip to main content

gaussdb_derive_test/
lib.rs

1#![cfg(test)]
2
3use gaussdb::Client;
4use gaussdb_types::{FromSqlOwned, ToSql};
5use std::fmt;
6
7mod composites;
8mod domains;
9mod enums;
10mod transparent;
11
12pub fn test_type<T, S>(conn: &mut Client, sql_type: &str, checks: &[(T, S)])
13where
14    T: PartialEq + FromSqlOwned + ToSql + Sync,
15    S: fmt::Display,
16{
17    for (val, repr) in checks.iter() {
18        let stmt = conn
19            .prepare(&format!("SELECT {}::{}", *repr, sql_type))
20            .unwrap();
21        let result = conn.query_one(&stmt, &[]).unwrap().get(0);
22        assert_eq!(val, &result);
23
24        let stmt = conn.prepare(&format!("SELECT $1::{}", sql_type)).unwrap();
25        let result = conn.query_one(&stmt, &[val]).unwrap().get(0);
26        assert_eq!(val, &result);
27    }
28}
29
30pub fn test_type_asymmetric<T, F, S, C>(
31    conn: &mut Client,
32    sql_type: &str,
33    checks: &[(T, S)],
34    cmp: C,
35) where
36    T: ToSql + Sync,
37    F: FromSqlOwned,
38    S: fmt::Display,
39    C: Fn(&T, &F) -> bool,
40{
41    for (val, repr) in checks.iter() {
42        let stmt = conn
43            .prepare(&format!("SELECT {}::{}", *repr, sql_type))
44            .unwrap();
45        let result: F = conn.query_one(&stmt, &[]).unwrap().get(0);
46        assert!(cmp(val, &result));
47
48        let stmt = conn.prepare(&format!("SELECT $1::{}", sql_type)).unwrap();
49        let result: F = conn.query_one(&stmt, &[val]).unwrap().get(0);
50        assert!(cmp(val, &result));
51    }
52}
53
54#[test]
55fn compile_fail() {
56    trybuild::TestCases::new().compile_fail("src/compile-fail/*.rs");
57}