Initial commit

This commit is contained in:
Jaka Mohorko
2025-01-22 13:32:50 +01:00
commit 60daee2a73
24 changed files with 1084 additions and 0 deletions

View File

@@ -0,0 +1,18 @@
set(MODULE_NAME example_module)
set(TEST_APP test_${MODULE_NAME})
set(TEST_SOURCES test_example_module.cpp
test_app.cpp
)
add_executable(${TEST_APP} ${TEST_SOURCES}
)
target_link_libraries(${TEST_APP} PRIVATE daq::test_utils
${SDK_TARGET_NAMESPACE}::${MODULE_NAME}
)
add_test(NAME ${TEST_APP}
COMMAND $<TARGET_FILE_NAME:${TEST_APP}>
WORKING_DIRECTORY bin
)

View File

@@ -0,0 +1,21 @@
#include <testutils/testutils.h>
#include <testutils/bb_memcheck_listener.h>
#include <coreobjects/util.h>
#include <opendaq/module_manager_init.h>
#include <coretypes/stringobject_factory.h>
int main(int argc, char** args)
{
daq::daqInitializeCoreObjectsTesting();
daqInitModuleManagerLibrary();
testing::InitGoogleTest(&argc, args);
testing::TestEventListeners& listeners = testing::UnitTest::GetInstance()->listeners();
listeners.Append(new DaqMemCheckListener());
auto res = RUN_ALL_TESTS();
return res;
}

View File

@@ -0,0 +1,77 @@
#include <gmock/gmock.h>
#include <testutils/testutils.h>
#include <opendaq/opendaq.h>
#include <opendaq/data_descriptor_factory.h>
#include <thread>
using namespace daq;
using ExampleModuleTest = testing::Test;
TEST_F(ExampleModuleTest, TestAdd)
{
const auto instance = Instance();
ASSERT_TRUE(instance.addFunctionBlock("ExampleScalingModule").assigned());
}
TEST_F(ExampleModuleTest, TestPropCount)
{
const auto instance = Instance();
auto fb = instance.addFunctionBlock("ExampleScalingModule");
ASSERT_EQ(fb.getAllProperties().getCount(), 7);
}
TEST_F(ExampleModuleTest, TestDataScaling)
{
const auto instance = Instance();
auto fb = instance.addFunctionBlock("ExampleScalingModule");
fb.setPropertyValue("Scale", 2);
auto dataDescriptor = DataDescriptorBuilder().setSampleType(SampleType::Float32).setValueRange(Range(-10, 10)).build();
auto signal = SignalWithDescriptor(instance.getContext(), dataDescriptor, nullptr, "Data");
const auto domainDescriptor = DataDescriptorBuilder()
.setSampleType(SampleType::Int64)
.setUnit(Unit("s", -1, "seconds", "time"))
.setTickResolution(Ratio(1, 1000))
.setRule(LinearDataRule(1, 0))
.setOrigin("1970-01-01T01:00:00+00:00")
.build();
auto domainSignal = SignalWithDescriptor(instance.getContext(), domainDescriptor, nullptr, "DomainData");
signal.setDomainSignal(domainSignal);
fb.getInputPorts()[0].connect(signal);
auto streamReader = StreamReader(fb.getSignals()[0], SampleType::Float32, SampleType::Int64);
auto domainPacket = DataPacket(domainDescriptor, 10, 0);
auto packet = DataPacketWithDomain(domainPacket, dataDescriptor, 10);
float* data = static_cast<float*>(packet.getRawData());
for (auto i = 0; i < 10; i++)
data[i] = static_cast<float>(i);
signal.sendPacket(packet);
domainSignal.sendPacket(domainPacket);
SizeT count = 10;
std::vector<float> readData;
readData.resize(count);
auto status = streamReader.read(readData.data(), &count);
ASSERT_EQ(status.getReadStatus(), ReadStatus::Event);
ASSERT_EQ(count, 0);
while (count < 10)
{
using namespace std::chrono_literals;
count = streamReader.getAvailableCount();
std::this_thread::sleep_for(100ms);
}
ASSERT_EQ(count, 10);
status = streamReader.read(readData.data(), &count);
ASSERT_EQ(count, 10);
ASSERT_EQ(status.getReadStatus(), ReadStatus::Ok);
for (int i = 0; i < 10; i++)
ASSERT_EQ(static_cast<int>(readData[i]), i * 2);
}