Skip to content
Snippets Groups Projects

TEST: Test for numeric values.

Merged Daniel Hornung requested to merge f-int32 into dev
1 file
+ 97
15
Compare changes
  • Side-by-side
  • Inline
+ 97
15
@@ -30,6 +30,7 @@
#include <boost/filesystem/operations.hpp> // for remove
#include <boost/filesystem/path.hpp> // for path
#include <boost/filesystem/path_traits.hpp> // for filesystem
#include <boost/lexical_cast.hpp>
#include <gtest/gtest-message.h> // for Message
#include <gtest/gtest-test-part.h> // for TestPartResult, SuiteApiResolver
#include <gtest/gtest_pred_impl.h> // for Test, EXPECT_EQ, AssertionResult
@@ -49,10 +50,48 @@ using caosdb::entity::Property;
using caosdb::entity::Role;
class test_transaction : public ::testing::Test {
public:
// public utility functions ////////////////////////////////////////////////////////
/**
* Generate a vector with useful values for testing.
*/
template <typename T> static auto generateValues() -> std::vector<T> {
std::vector<T> values = {
0,
1,
std::numeric_limits<T>::max(),
std::numeric_limits<T>::min(),
std::numeric_limits<T>::lowest(),
std::numeric_limits<T>::epsilon() // 0 for integers, but who cares?
};
return values;
}
static void DeleteEntities() {
// delete all entities
const auto &connection =
caosdb::connection::ConnectionManager::GetDefaultConnection();
auto query_transaction(connection->CreateTransaction());
query_transaction->Query("FIND ENTITY WITH id > 99");
query_transaction->Execute();
if (query_transaction->GetResultSet().size() > 0) {
auto delete_transaction(connection->CreateTransaction());
for (const Entity &entity : query_transaction->GetResultSet()) {
delete_transaction->DeleteById(entity.GetId());
}
delete_transaction->Execute();
}
}
protected:
fs::path test_upload_file_1;
fs::path test_download_file_1;
// Fixture methods //////////////////////////////////////////////////////////
void SetUp() override {
DeleteEntities();
@@ -74,21 +113,6 @@ protected:
DeleteEntities();
}
static void DeleteEntities() {
// delete all entities
const auto &connection =
caosdb::connection::ConnectionManager::GetDefaultConnection();
auto query_transaction(connection->CreateTransaction());
query_transaction->Query("FIND ENTITY WITH id > 99");
query_transaction->Execute();
if (query_transaction->GetResultSet().size() > 0) {
auto delete_transaction(connection->CreateTransaction());
for (const Entity &entity : query_transaction->GetResultSet()) {
delete_transaction->DeleteById(entity.GetId());
}
delete_transaction->Execute();
}
}
};
/*
@@ -640,6 +664,64 @@ TEST_F(test_transaction, test_query) {
EXPECT_EQ(count_query_trans->GetCountResult(), 1);
}
/**
* Test numeric values (template).
*/
template<typename T>
auto test_numeric_values_impl(AtomicDataType a_type) -> void {
const auto &connection =
caosdb::connection::ConnectionManager::GetDefaultConnection();
// Insert entities
auto insert_transaction(connection->CreateTransaction());
auto values_orig = test_transaction::generateValues<T>();
auto props_orig = std::vector<Entity>();
size_t i = 0;
--i;
for (auto value : values_orig) {
++i;
Entity prop;
prop.SetRole(Role::PROPERTY);
prop.SetName(std::string("Prop ") + boost::lexical_cast<std::string>(i));
prop.SetDataType(a_type);
prop.SetValue(value);
props_orig.push_back(prop);
insert_transaction->InsertEntity(&prop);
insert_transaction->ExecuteAsynchronously();
auto t_stat = insert_transaction->WaitForIt();
ASSERT_TRUE(t_stat.IsTerminated());
ASSERT_FALSE(t_stat.IsError());
}
// Retrieve and verify
auto retrieve_transaction(connection->CreateTransaction());
i = 0;
--i;
for (auto value : values_orig) {
++i;
auto prop = props_orig[i];
auto name = std::string("Prop ") + boost::lexical_cast<std::string>(i);
auto query = std::string("FIND ENTITY \"Prop ") + boost::lexical_cast<std::string>(i) + "\"";
retrieve_transaction->Query(query);
retrieve_transaction->ExecuteAsynchronously();
auto t_stat = retrieve_transaction->WaitForIt();
ASSERT_TRUE(t_stat.IsTerminated());
ASSERT_FALSE(t_stat.IsError());
auto result = retrieve_transaction->GetResultSet().at(0);
ASSERT_EQ(result.GetDataType(), a_type);
}
}
/**
* Test numeric values (wrapper for types).
*/
TEST_F(test_transaction, test_numeric_values) {
test_numeric_values_impl<double>(AtomicDataType::DOUBLE);
DeleteEntities();
test_numeric_values_impl<int64_t>(AtomicDataType::INTEGER);
}
/*
* test miscellaneous queries
*/
Loading