gaussdb_derive_test/
lib.rs1#![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}