Dawn Framework 1.0
Universal data acquisition framework for embedded systems
test_bitpack.cxx
1// dawn/tests/prog/test_bitpack.cxx
2//
3// SPDX-License-Identifier: Apache-2.0
4//
5
6#include "dawn/prog/bitpack.hxx"
7#include "test_common.hxx"
8
9#include "dawn/io/sdata.hxx"
10#include "dawn/io/virt.hxx"
11
12using namespace dawn;
13
14static constexpr auto BP_IN0 = CIOVirt::objectId(SObjectId::DTYPE_UINT32, false, 120);
15static constexpr auto BP_IN1 = CIOVirt::objectId(SObjectId::DTYPE_UINT32, false, 121);
16static constexpr auto BP_OUT = CIOVirt::objectId(SObjectId::DTYPE_UINT32, false, 122);
17
18static uint32_t g_cfg_in0[] = {BP_IN0, 0};
19static uint32_t g_cfg_in1[] = {BP_IN1, 0};
20static uint32_t g_cfg_out[] = {BP_OUT, 0};
21
22static uint32_t g_bin_bitpack[] = {
23 CProgBitPack::objectId(0),
24 2,
25 CProgBitPack::cfgIdInputs(4),
26 BP_IN0,
27 0, // in0 → bit 0
28 BP_IN1,
29 1, // in1 → bit 1
30 CProgBitPack::cfgIdOutput(),
31 BP_OUT,
32};
33
34static void test_bitpack_combines_bits()
35{
36 CDescObject i0Desc(g_cfg_in0);
37 CIOVirt in0(i0Desc);
38 CDescObject i1Desc(g_cfg_in1);
39 CIOVirt in1(i1Desc);
40 CDescObject oDesc(g_cfg_out);
41 CIOVirt out(oDesc);
42 CDescObject progDesc(g_bin_bitpack);
43 CProgBitPack prog(progDesc);
44
47
48 TEST_ASSERT_EQUAL(OK, in0.init());
49 TEST_ASSERT_EQUAL(OK, in1.init());
50 TEST_ASSERT_EQUAL(OK, out.init());
51 TEST_ASSERT_EQUAL(OK, in0.initialize(1, 1, true));
52 TEST_ASSERT_EQUAL(OK, in1.initialize(1, 1, true));
53 TEST_ASSERT_EQUAL(OK, out.initialize(1, 1, false));
54
55 TEST_ASSERT_EQUAL(OK, prog.configure());
56 prog.setObjectMapItem(BP_IN0, &in0);
57 prog.setObjectMapItem(BP_IN1, &in1);
58 prog.setObjectMapItem(BP_OUT, &out);
59 TEST_ASSERT_EQUAL(OK, prog.init());
60 TEST_ASSERT_EQUAL(OK, prog.start());
61
62 // Both 0
63 in(0) = 0;
64 TEST_ASSERT_EQUAL(OK, in0.setData(in));
65 TEST_ASSERT_EQUAL(OK, in1.setData(in));
66 TEST_ASSERT_EQUAL(OK, out.getData(o, 1));
67 TEST_ASSERT_EQUAL(0, o(0));
68
69 // bit0=1, bit1=0 → 0b01 = 1
70 in(0) = 1;
71 TEST_ASSERT_EQUAL(OK, in0.setData(in));
72 TEST_ASSERT_EQUAL(OK, out.getData(o, 1));
73 TEST_ASSERT_EQUAL(1, o(0));
74
75 // bit0=0, bit1=1 → 0b10 = 2
76 in(0) = 0;
77 TEST_ASSERT_EQUAL(OK, in0.setData(in));
78 in(0) = 1;
79 TEST_ASSERT_EQUAL(OK, in1.setData(in));
80 TEST_ASSERT_EQUAL(OK, out.getData(o, 1));
81 TEST_ASSERT_EQUAL(2, o(0));
82
83 // non-zero values treated as set
84 in(0) = 42;
85 TEST_ASSERT_EQUAL(OK, in0.setData(in));
86 in(0) = 99;
87 TEST_ASSERT_EQUAL(OK, in1.setData(in));
88 TEST_ASSERT_EQUAL(OK, out.getData(o, 1));
89 TEST_ASSERT_EQUAL(3, o(0)); // both bits set → 0b11
90
91 TEST_ASSERT_EQUAL(OK, prog.stop());
92}
93
94extern "C"
95{
96 int test_prog_bitpack()
97 {
98 UNITY_BEGIN();
99 DAWN_RUN_TEST(test_bitpack_combines_bits);
100 return UNITY_END();
101 }
102}
Descriptor wrapper for individual object configuration.
Virtual I/O type for user-provided data and callbacks.
Definition virt.hxx:26
Bit packer: combines multiple typed inputs into a single packed output bitstream.
Definition bitpack.hxx:36
Out-of-tree user-extension hooks for Dawn.
Definition bindable.hxx:13
@ DTYPE_UINT32
Unsigned 32-bit integer (0 to 4294967295).
Definition objectid.hxx:96
Static (compile-time) I/O data buffer (no timestamp).
Definition sdata.hxx:39