11 #include <framework/utilities/sqlite.h>
12 #include <framework/geometry/B2Vector3.h>
14 #include <gtest/gtest.h>
21 class SQLiteTest:
public ::testing::Test {
24 sqlite3* m_connection{
nullptr};
28 int result = sqlite3_open_v2(
":memory:", &m_connection, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE,
nullptr);
29 ASSERT_EQ(result, SQLITE_OK);
30 std::string sql = R
"DOC(
31 CREATE TABLE test(name TEXT, x FLOAT, y FLOAT, z FLOAT);
32 INSERT INTO test VALUES ('IP', 0, 0, 0);
33 INSERT INTO test VALUES ('X', 1, 0, 0);
34 INSERT INTO test VALUES ('Y', 0, 1, 0);
35 INSERT INTO test VALUES ('Z', 0, 0, 1);
37 result = sqlite3_exec(m_connection, sql.c_str(), nullptr,
nullptr,
nullptr);
38 ASSERT_EQ(result, SQLITE_OK);
42 void TearDown()
override
44 int result = sqlite3_close_v2(m_connection);
45 ASSERT_EQ(result, SQLITE_OK);
50 TEST_F(SQLiteTest, Statement)
53 std::vector<std::tuple<std::string, double>> expected{{
"IP", 0.}, {
"X", 1.}, {
"Y", 0.}, {
"Z", 0.}};
54 for (
auto && row : stmt) {
55 ASSERT_FALSE(expected.empty());
56 ASSERT_EQ(row, expected.back());
59 ASSERT_TRUE(expected.empty());
63 TEST_F(SQLiteTest, StatementTypeConversion)
66 std::vector<std::tuple<std::string, std::string>> expected{{
"IP",
"0.0"}, {
"X",
"1.0"}, {
"Y",
"0.0"}, {
"Z",
"0.0"}};
67 for (
auto && row : stmt) {
68 ASSERT_FALSE(expected.empty());
69 ASSERT_EQ(row, expected.back());
72 ASSERT_TRUE(expected.empty());
76 TEST_F(SQLiteTest, StatementTypeConversion2)
79 std::vector<std::tuple<std::string, int>> expected{{
"IP", 0}, {
"X", 1}, {
"Y", 0}, {
"Z", 0}};
80 for (
auto && row : stmt) {
81 ASSERT_FALSE(expected.empty());
82 ASSERT_EQ(row, expected.back());
85 ASSERT_TRUE(expected.empty());
89 TEST_F(SQLiteTest, SimpleStatement)
92 std::set<std::string> expected{
"IP",
"X",
"Z"};
94 std::set<std::string> actual(stmt.begin(), stmt.end());
95 ASSERT_EQ(expected, actual);
98 actual = std::set<std::string>(stmt.begin(), stmt.end());
99 ASSERT_EQ(expected, actual);
103 TEST_F(SQLiteTest, SimpleStatementParameterConversion)
106 std::set<std::string> expected{
"IP",
"X",
"Z"};
108 std::set<std::string> actual(stmt.begin(), stmt.end());
109 ASSERT_EQ(expected, actual);
112 actual = std::set<std::string>(stmt.begin(), stmt.end());
113 ASSERT_EQ(expected, actual);
117 TEST_F(SQLiteTest, ObjectStatement)
120 auto it = stmt.begin();
121 ASSERT_NE(it, stmt.end());
123 ASSERT_NE(++it, stmt.end());
125 ASSERT_NE(++it, stmt.end());
127 ASSERT_NE(++it, stmt.end());
129 ASSERT_EQ(++it, stmt.end());
133 TEST_F(SQLiteTest, NotEnoughParams)
136 ASSERT_THROW(stmt.execute(), std::runtime_error);
140 TEST_F(SQLiteTest, TooManyParams)
143 ASSERT_THROW(stmt.execute(0,
"foo"), std::runtime_error);
147 TEST_F(SQLiteTest, NotEnoughColumns)
150 ASSERT_THROW(construct(), std::runtime_error);
154 TEST_F(SQLiteTest, TooManyColumns)
157 ASSERT_THROW(construct(), std::runtime_error);