#!/usr/bin/env tclsh set testdir [file dirname $argv0] source $testdir/tester.tcl do_execsql_test add-int { SELECT 10 + 1 } {11} do_execsql_test add-float { SELECT 10.1 + 0.3 } {10.4} do_execsql_test add-int-float { SELECT 10 + 0.1 } {10.1} do_execsql_test add-agg-int-agg-int { SELECT sum(1) + sum(2) } {3} do_execsql_test add-agg-int-agg-float { SELECT sum(1) + sum(2.5) } {3.5} do_execsql_test add-agg-float-agg-int { SELECT sum(1.5) + sum(2) } {3.5} do_execsql_test subtract-int { SELECT 10 - 1 } {9} do_execsql_test subtract-float { SELECT 10.2 - 0.1 } {10.1} do_execsql_test subtract-int-float { SELECT 10 - 0.1 } {9.9} do_execsql_test subtract-agg-int-agg-int { SELECT sum(3) - sum(1) } {2} do_execsql_test subtract-agg-int-agg-float { SELECT sum(3) - sum(1.5) } {1.5} do_execsql_test subtract-agg-float-agg-int { SELECT sum(3.5) - sum(1) } {2.5} do_execsql_test multiply-int { SELECT 10 * 2 } {20} do_execsql_test multiply-float { SELECT 10.2 * 2.2 } {22.44} do_execsql_test multiply-int-float { SELECT 10 * 1.45 } {14.5} do_execsql_test multiply-float-int { SELECT 1.45 * 10 } {14.5} do_execsql_test multiply-agg-int-agg-int { SELECT sum(2) * sum(3) } {6} do_execsql_test multiply-agg-int-agg-float { SELECT sum(2) * sum(3.5) } {7.0} do_execsql_test multiply-agg-float-agg-int { SELECT sum(2.5) * sum(3) } {7.5} do_execsql_test divide-int { SELECT 10 / 2 } {5} do_execsql_test divide-int-no-fraction { SELECT 10 / 3 } {3} do_execsql_test divide-float { SELECT 10.6 / 2.5 } {4.24} do_execsql_test divide-int-float { SELECT 10 / 4.0 } {2.5} do_execsql_test divide-float-int { SELECT 10.0 / 4 } {2.5} do_execsql_test divide-by-zero { SELECT 10 / 0 } {} do_execsql_test divide-int-null { SELECT 10 / null } {} do_execsql_test divide-null-int { SELECT null / 10 } {} do_execsql_test divide-null { SELECT null / null } {} do_execsql_test divide-agg-int-agg-int { SELECT sum(4) / sum(2) } {2} do_execsql_test divide-agg-int-agg-float { SELECT sum(4) / sum(2.0) } {2.0} do_execsql_test divide-agg-float-agg-int { SELECT sum(4.0) / sum(2) } {2.0} do_execsql_test add-agg-int { SELECT sum(id) + 10 from products } {76} do_execsql_test add-int-agg { SELECT 10 + sum(id) from products } {76} do_execsql_test add-agg-float { SELECT sum(id) + 10.1 from products } {76.1} do_execsql_test add-float-agg { SELECT 10.1 + sum(id) from products } {76.1} do_execsql_test add-agg-int-agg-int { SELECT sum(id) + sum(id) from products } {132} do_execsql_test add-agg-float-agg-float { SELECT sum(price) + sum(price) from products } {1246.0} do_execsql_test add-agg-int-agg-float { SELECT sum(id) + sum(price) from products } {689.0} do_execsql_test add-agg-int-agg-float { SELECT sum(id) + sum(price) from products } {689.0} do_execsql_test subtract-agg-int { SELECT sum(id) - 10 from products } {56} do_execsql_test subtract-int-agg { SELECT 10 - sum(id) from products } {-56} do_execsql_test subtract-agg-float { SELECT sum(id) - 10.1 from products } {55.9} do_execsql_test subtract-float-agg { SELECT 10.1 - sum(id) from products } {-55.9} do_execsql_test subtract-agg-int-agg-int { SELECT sum(id) - sum(id) from products } {0} do_execsql_test subtract-agg-float-agg-float { SELECT sum(price) - sum(price) from products } {0.0} do_execsql_test subtract-agg-int-agg-float { SELECT sum(id) - sum(price) from products } {-557.0} do_execsql_test subtract-agg-float-agg-int { SELECT sum(price) - sum(id) from products } {557.0} do_execsql_test multiply-agg-int { SELECT sum(id) * 10 from products } {660} do_execsql_test multiply-int-agg { SELECT 10 * sum(id) from products } {660} do_execsql_test multiply-agg-float { SELECT sum(id) * 10.1 from products } {666.6} do_execsql_test multiply-float-agg { SELECT 10.1 * sum(id) from products } {666.6} do_execsql_test multiply-agg-int-agg-int { SELECT sum(id) * sum(id) from products } {4356} do_execsql_test multiply-agg-float-agg-float { SELECT sum(price) * sum(price) from products } {388129.0} do_execsql_test multiply-agg-int-agg-float { SELECT sum(id) * sum(price) from products } {41118.0} do_execsql_test multiply-agg-float-agg-int { SELECT sum(price) * sum(id) from products } {41118.0} do_execsql_test divide-agg-int { SELECT sum(id) / 10 from products } {6} do_execsql_test divide-int-agg { SELECT 660 / sum(id) from products } {10} do_execsql_test divide-agg-float { SELECT sum(id) / 1.5 from products } {44.0} do_execsql_test divide-float-agg { SELECT 66.0 / sum(id) from products } {1.0} do_execsql_test divide-agg-int-agg-int { SELECT sum(id) / sum(id) from products } {1} do_execsql_test divide-agg-float-agg-float { SELECT sum(price) / sum(price) from products } {1.0} do_execsql_test divide-agg-int-agg-float { SELECT sum(id) / min(price) from products } {66.0} do_execsql_test divide-agg-float-agg-int { SELECT min(price) / min(id) from products } {1.0} do_execsql_test bitwise-and-int-null { SELECT 1234 & NULL } {} do_execsql_test bitwise-and-int-int { SELECT 1234 & 1234 } {1234} do_execsql_test bitwise-and-int-float { SELECT 660 & 261.8 } {4} do_execsql_test bitwise-and-float-float { SELECT 660.63 & 261.8 } {4} do_execsql_test bitwise-and-float-int-rev { SELECT 261.8 & 660 } {4} do_execsql_test bitwise-and-int-agg-int { SELECT 8261 & sum(id) from products } {64} do_execsql_test bitwise-and-int-agg-float { SELECT 1036.6 & sum(id) from products } {0} do_execsql_test bitwise-and-int-agg-int-agg { SELECT sum(id) & sum(id) from products } {66} do_execsql_test bitwise-or-int-null { SELECT 1234 | NULL } {} do_execsql_test bitwise-or-null-int { SELECT NULL | 1234 } {} do_execsql_test bitwise-or-int-int { SELECT 4321 | 1234 } {5363} do_execsql_test bitwise-or-int-float { SELECT 660 | 1234.0 } {1750} do_execsql_test bitwise-or-int-agg { SELECT 18823 | sum(id) from products } {18887} do_execsql_test bitwise-or-float-float { SELECT 1234.6 | 5432.2 } {5626} do_execsql_test bitwise-and-int-agg-int-agg { SELECT sum(id) | sum(id) from products } {66} do_execsql_test bitwise-not-null { SELECT ~NULL } {} do_execsql_test bitwise-not-int { SELECT ~1234 } {-1235} do_execsql_test bitwise-not-float { SELECT ~823.34 } {-824} do_execsql_test bitwise-not-scalar-float { SELECT ~abs(693.9) } {-694} do_execsql_test bitwise-not-scalar-int { SELECT ~abs(7566) } {-7567} do_execsql_test bitwise-not-agg-int { SELECT ~sum(693) } {-694} do_execsql_test bitwise-not-agg-and-agg { SELECT ~sum(693) & sum(-302) } {-958} do_execsql_test bitwise-not-agg-int { SELECT ~sum(693) } {-694} do_execsql_test bitwise-not-zero { SELECT ~0 } {-1}