gluesql_test_suite/ast_builder/function/math/
basic_arithmetic.rs1use {
2 crate::*,
3 gluesql_core::{
4 ast_builder::{function as f, *},
5 executor::Payload,
6 prelude::Value::*,
7 },
8};
9
10test_case!(basic_arithmetic, {
11 let glue = get_glue!();
12
13 let actual = table("Number")
15 .create_table()
16 .add_column("id INTEGER")
17 .add_column("number INTEGER")
18 .execute(glue)
19 .await;
20 let expected = Ok(Payload::Create);
21 assert_eq!(actual, expected, "create table - Number");
22
23 let actual = table("Number")
25 .insert()
26 .values(vec!["0, 0", "1, 3", "2, 4", "3, 29"])
27 .execute(glue)
28 .await;
29 let expected = Ok(Payload::Insert(4));
30 assert_eq!(actual, expected, "insert into Number");
31
32 let actual = values(vec!["0, 0", "1, -3", "2, 4", "3, -29"])
34 .alias_as("number")
35 .select()
36 .project("column1")
37 .project(f::abs("column2"))
38 .project(col("column2").abs())
39 .execute(glue)
40 .await;
41 let expected = Ok(select!(
42 column1 | r#"ABS("column2")"# | r#"ABS("column2")"#
43 I64 | I64 | I64;
44 0 0 0;
45 1 3 3;
46 2 4 4;
47 3 29 29
48 ));
49 assert_eq!(actual, expected, "Example Using ABS");
50
51 let actual = table("Number")
53 .select()
54 .project("id")
55 .project(f::divide("number", 3))
56 .project(f::divide(col("number"), 3))
57 .execute(glue)
58 .await;
59 let expected = Ok(select!(
60 id | r#"DIV("number", 3)"# | r#"DIV("number", 3)"#
61 I64 | I64 | I64;
62 0 0 0;
63 1 1 1;
64 2 1 1;
65 3 9 9
66 ));
67 assert_eq!(actual, expected, "Example Using DIV");
68
69 let actual = table("Number")
71 .select()
72 .project("id")
73 .project(f::modulo("number", 4))
74 .project(f::modulo(col("number"), 4))
75 .execute(glue)
76 .await;
77 let expected = Ok(select!(
78 id | r#"MOD("number", 4)"# | r#"MOD("number", 4)"#
79 I64 | I64 | I64;
80 0 0 0;
81 1 3 3;
82 2 0 0;
83 3 1 1
84 ));
85 assert_eq!(actual, expected, "Example Using MOD");
86
87 let actual = table("Number")
89 .select()
90 .project("id")
91 .project(f::gcd("number", 12))
92 .project(f::gcd(col("number"), 12))
93 .execute(glue)
94 .await;
95 let expected = Ok(select!(
96 id | r#"GCD("number", 12)"# | r#"GCD("number", 12)"#
97 I64 | I64 | I64;
98 0 12 12;
99 1 3 3;
100 2 4 4;
101 3 1 1
102 ));
103 assert_eq!(actual, expected, "Example Using GCD");
104
105 let actual = table("Number")
107 .select()
108 .project("id")
109 .project(f::lcm("number", 3))
110 .project(f::lcm(col("number"), 3))
111 .execute(glue)
112 .await;
113 let expected = Ok(select!(
114 id | r#"LCM("number", 3)"# | r#"LCM("number", 3)"#
115 I64 | I64 | I64;
116 0 0 0;
117 1 3 3;
118 2 12 12;
119 3 87 87
120 ));
121 assert_eq!(actual, expected, "Example Using LCM");
122});