]> sigrok.org Git - pulseview.git/blobdiff - test/data/logicsnapshot.cpp
Renamed C++ headers to .hpp
[pulseview.git] / test / data / logicsnapshot.cpp
index 951e3845b1d5651d2c739bbf88d35261965b9477..4ad23aa4b2a16c598fcb9798933a24d1b6f919a2 100644 (file)
 
 #include <extdef.h>
 
-#define __STDC_LIMIT_MACROS
 #include <stdint.h>
 
 #include <boost/test/unit_test.hpp>
 
-#include "../../pv/data/logicsnapshot.h"
-
-using namespace std;
+#include <pv/data/logicsnapshot.hpp>
 
 using pv::data::LogicSnapshot;
+using std::vector;
 
 BOOST_AUTO_TEST_SUITE(LogicSnapshotTest)
 
@@ -76,7 +74,7 @@ BOOST_AUTO_TEST_CASE(Basic)
        BOOST_CHECK(s.get_sample_count() == 0);
        for (unsigned int i = 0; i < LogicSnapshot::ScaleStepCount; i++)
        {
-               const LogicSnapshot::MipMapLevel &m = s._mip_map[i];
+               const LogicSnapshot::MipMapLevel &m = s.mip_map_[i];
                BOOST_CHECK_EQUAL(m.length, 0);
                BOOST_CHECK_EQUAL(m.data_length, 0);
                BOOST_CHECK(m.data == NULL);
@@ -90,7 +88,7 @@ BOOST_AUTO_TEST_CASE(Basic)
        // There should not be enough samples to have a single mip map sample
        for (unsigned int i = 0; i < LogicSnapshot::ScaleStepCount; i++)
        {
-               const LogicSnapshot::MipMapLevel &m = s._mip_map[i];
+               const LogicSnapshot::MipMapLevel &m = s.mip_map_[i];
                BOOST_CHECK_EQUAL(m.length, 0);
                BOOST_CHECK_EQUAL(m.data_length, 0);
                BOOST_CHECK(m.data == NULL);
@@ -101,7 +99,7 @@ BOOST_AUTO_TEST_CASE(Basic)
 
        // There should now be enough data for exactly one sample
        // in mip map level 0, and that sample should be 0
-       const LogicSnapshot::MipMapLevel &m0 = s._mip_map[0];
+       const LogicSnapshot::MipMapLevel &m0 = s.mip_map_[0];
        BOOST_CHECK_EQUAL(m0.length, 1);
        BOOST_CHECK_EQUAL(m0.data_length, LogicSnapshot::MipMapDataUnit);
        BOOST_REQUIRE(m0.data != NULL);
@@ -110,7 +108,7 @@ BOOST_AUTO_TEST_CASE(Basic)
        // The higher levels should still be empty
        for (unsigned int i = 1; i < LogicSnapshot::ScaleStepCount; i++)
        {
-               const LogicSnapshot::MipMapLevel &m = s._mip_map[i];
+               const LogicSnapshot::MipMapLevel &m = s.mip_map_[i];
                BOOST_CHECK_EQUAL(m.length, 0);
                BOOST_CHECK_EQUAL(m.data_length, 0);
                BOOST_CHECK(m.data == NULL);
@@ -126,7 +124,7 @@ BOOST_AUTO_TEST_CASE(Basic)
        for (unsigned int i = 2; i < m0.length; i++)
                BOOST_CHECK_EQUAL(((uint8_t*)m0.data)[i], 0);
 
-       const LogicSnapshot::MipMapLevel &m1 = s._mip_map[1];
+       const LogicSnapshot::MipMapLevel &m1 = s.mip_map_[1];
        BOOST_CHECK_EQUAL(m1.length, 1);
        BOOST_CHECK_EQUAL(m1.data_length, LogicSnapshot::MipMapDataUnit);
        BOOST_REQUIRE(m1.data != NULL);
@@ -142,7 +140,7 @@ BOOST_AUTO_TEST_CASE(Basic)
        BOOST_CHECK_EQUAL(edges[0].first, 0);
        BOOST_CHECK_EQUAL(edges[1].first, 8);
        BOOST_CHECK_EQUAL(edges[2].first, 16);
-       BOOST_CHECK_EQUAL(edges[3].first, 255);
+       BOOST_CHECK_EQUAL(edges[3].first, 256);
 
        // Test a subset at high zoom
        edges.clear();
@@ -152,7 +150,7 @@ BOOST_AUTO_TEST_CASE(Basic)
        BOOST_CHECK_EQUAL(edges[0].first, 6);
        BOOST_CHECK_EQUAL(edges[1].first, 8);
        BOOST_CHECK_EQUAL(edges[2].first, 16);
-       BOOST_CHECK_EQUAL(edges[3].first, 17);
+       BOOST_CHECK_EQUAL(edges[3].first, 18);
 }
 
 BOOST_AUTO_TEST_CASE(LargeData)
@@ -175,13 +173,13 @@ BOOST_AUTO_TEST_CASE(LargeData)
        BOOST_CHECK(s.get_sample_count() == Length);
 
        // Check mip map level 0
-       BOOST_CHECK_EQUAL(s._mip_map[0].length, 62500);
-       BOOST_CHECK_EQUAL(s._mip_map[0].data_length,
+       BOOST_CHECK_EQUAL(s.mip_map_[0].length, 62500);
+       BOOST_CHECK_EQUAL(s.mip_map_[0].data_length,
                LogicSnapshot::MipMapDataUnit);
-       BOOST_REQUIRE(s._mip_map[0].data != NULL);
+       BOOST_REQUIRE(s.mip_map_[0].data != NULL);
 
        prev_sample = 0;
-       for (unsigned int i = 0; i < s._mip_map[0].length;)
+       for (unsigned int i = 0; i < s.mip_map_[0].length;)
        {
                BOOST_TEST_MESSAGE("Testing mip_map[0].data[" << i << "]");
 
@@ -190,7 +188,7 @@ BOOST_AUTO_TEST_CASE(LargeData)
                        prev_sample ^ sample);
                prev_sample = sample;
 
-               for (int j = 1; i < s._mip_map[0].length && j < 16; j++)
+               for (int j = 1; i < s.mip_map_[0].length && j < 16; j++)
                {
                        BOOST_TEST_MESSAGE("Testing mip_map[0].data[" << i << "]");
                        BOOST_CHECK_EQUAL(s.get_subsample(0, i++) & 0xFF, 0);
@@ -198,13 +196,13 @@ BOOST_AUTO_TEST_CASE(LargeData)
        }
 
        // Check mip map level 1
-       BOOST_CHECK_EQUAL(s._mip_map[1].length, 3906);
-       BOOST_CHECK_EQUAL(s._mip_map[1].data_length,
+       BOOST_CHECK_EQUAL(s.mip_map_[1].length, 3906);
+       BOOST_CHECK_EQUAL(s.mip_map_[1].data_length,
                LogicSnapshot::MipMapDataUnit);
-       BOOST_REQUIRE(s._mip_map[1].data != NULL);
+       BOOST_REQUIRE(s.mip_map_[1].data != NULL);
 
        prev_sample = 0;
-       for (unsigned int i = 0; i < s._mip_map[1].length; i++)
+       for (unsigned int i = 0; i < s.mip_map_[1].length; i++)
        {
                BOOST_TEST_MESSAGE("Testing mip_map[1].data[" << i << "]");
 
@@ -216,13 +214,13 @@ BOOST_AUTO_TEST_CASE(LargeData)
        }
 
        // Check mip map level 2
-       BOOST_CHECK_EQUAL(s._mip_map[2].length, 244);
-       BOOST_CHECK_EQUAL(s._mip_map[2].data_length,
+       BOOST_CHECK_EQUAL(s.mip_map_[2].length, 244);
+       BOOST_CHECK_EQUAL(s.mip_map_[2].data_length,
                LogicSnapshot::MipMapDataUnit);
-       BOOST_REQUIRE(s._mip_map[2].data != NULL);
+       BOOST_REQUIRE(s.mip_map_[2].data != NULL);
 
        prev_sample = 0;
-       for (unsigned int i = 0; i < s._mip_map[2].length; i++)
+       for (unsigned int i = 0; i < s.mip_map_[2].length; i++)
        {
                BOOST_TEST_MESSAGE("Testing mip_map[2].data[" << i << "]");
 
@@ -234,19 +232,19 @@ BOOST_AUTO_TEST_CASE(LargeData)
        }
 
        // Check mip map level 3
-       BOOST_CHECK_EQUAL(s._mip_map[3].length, 15);
-       BOOST_CHECK_EQUAL(s._mip_map[3].data_length,
+       BOOST_CHECK_EQUAL(s.mip_map_[3].length, 15);
+       BOOST_CHECK_EQUAL(s.mip_map_[3].data_length,
                LogicSnapshot::MipMapDataUnit);
-       BOOST_REQUIRE(s._mip_map[3].data != NULL);
+       BOOST_REQUIRE(s.mip_map_[3].data != NULL);
 
-       for (unsigned int i = 0; i < s._mip_map[3].length; i++)
-               BOOST_CHECK_EQUAL(*((uint8_t*)s._mip_map[3].data + i),
+       for (unsigned int i = 0; i < s.mip_map_[3].length; i++)
+               BOOST_CHECK_EQUAL(*((uint8_t*)s.mip_map_[3].data + i),
                        0xFF);
 
        // Check the higher levels
        for (unsigned int i = 4; i < LogicSnapshot::ScaleStepCount; i++)
        {
-               const LogicSnapshot::MipMapLevel &m = s._mip_map[i];
+               const LogicSnapshot::MipMapLevel &m = s.mip_map_[i];
                BOOST_CHECK_EQUAL(m.length, 0);
                BOOST_CHECK_EQUAL(m.data_length, 0);
                BOOST_CHECK(m.data == NULL);
@@ -265,7 +263,7 @@ BOOST_AUTO_TEST_CASE(LargeData)
                BOOST_CHECK_EQUAL(edges[i].second, i & 1);
        }
 
-       BOOST_CHECK_EQUAL(edges[31].first, 999999);
+       BOOST_CHECK_EQUAL(edges[31].first, 1000000);
 
        // Check in very low zoom case
        edges.clear();
@@ -300,17 +298,17 @@ BOOST_AUTO_TEST_CASE(Pulses)
 
        //----- Check the mip-map -----//
        // Check mip map level 0
-       BOOST_CHECK_EQUAL(s._mip_map[0].length, 12);
-       BOOST_CHECK_EQUAL(s._mip_map[0].data_length,
+       BOOST_CHECK_EQUAL(s.mip_map_[0].length, 12);
+       BOOST_CHECK_EQUAL(s.mip_map_[0].data_length,
                LogicSnapshot::MipMapDataUnit);
-       BOOST_REQUIRE(s._mip_map[0].data != NULL);
+       BOOST_REQUIRE(s.mip_map_[0].data != NULL);
 
-       for (unsigned int i = 0; i < s._mip_map[0].length;) {
+       for (unsigned int i = 0; i < s.mip_map_[0].length;) {
                BOOST_TEST_MESSAGE("Testing mip_map[0].data[" << i << "]");
                BOOST_CHECK_EQUAL(s.get_subsample(0, i++) & 0xFF, 0xFF);
 
                for (int j = 1;
-                       i < s._mip_map[0].length &&
+                       i < s.mip_map_[0].length &&
                        j < Period/LogicSnapshot::MipMapScaleFactor; j++) {
                        BOOST_TEST_MESSAGE(
                                "Testing mip_map[0].data[" << i << "]");
@@ -320,7 +318,7 @@ BOOST_AUTO_TEST_CASE(Pulses)
 
        // Check the higher levels are all inactive
        for (unsigned int i = 1; i < LogicSnapshot::ScaleStepCount; i++) {
-               const LogicSnapshot::MipMapLevel &m = s._mip_map[i];
+               const LogicSnapshot::MipMapLevel &m = s.mip_map_[i];
                BOOST_CHECK_EQUAL(m.length, 0);
                BOOST_CHECK_EQUAL(m.data_length, 0);
                BOOST_CHECK(m.data == NULL);
@@ -348,7 +346,7 @@ BOOST_AUTO_TEST_CASE(LongPulses)
        //----- Create a LogicSnapshot -----//
        sr_datafeed_logic logic;
        logic.unitsize = 8;
-       logic.length = Length;
+       logic.length = Length * 8;
        logic.data = (uint64_t*)new uint64_t[Length];
        uint64_t *p = (uint64_t*)logic.data;
 
@@ -364,19 +362,19 @@ BOOST_AUTO_TEST_CASE(LongPulses)
 
        //----- Check the mip-map -----//
        // Check mip map level 0
-       BOOST_CHECK_EQUAL(s._mip_map[0].length, 12);
-       BOOST_CHECK_EQUAL(s._mip_map[0].data_length,
+       BOOST_CHECK_EQUAL(s.mip_map_[0].length, 12);
+       BOOST_CHECK_EQUAL(s.mip_map_[0].data_length,
                LogicSnapshot::MipMapDataUnit);
-       BOOST_REQUIRE(s._mip_map[0].data != NULL);
+       BOOST_REQUIRE(s.mip_map_[0].data != NULL);
 
-       for (unsigned int i = 0; i < s._mip_map[0].length;) {
-               for (j = 0; i < s._mip_map[0].length && j < 2; j++) {
+       for (unsigned int i = 0; i < s.mip_map_[0].length;) {
+               for (j = 0; i < s.mip_map_[0].length && j < 2; j++) {
                        BOOST_TEST_MESSAGE(
                                "Testing mip_map[0].data[" << i << "]");
                        BOOST_CHECK_EQUAL(s.get_subsample(0, i++), ~0);
                }
 
-               for (; i < s._mip_map[0].length &&
+               for (; i < s.mip_map_[0].length &&
                        j < Period/LogicSnapshot::MipMapScaleFactor; j++) {
                        BOOST_TEST_MESSAGE(
                                "Testing mip_map[0].data[" << i << "]");
@@ -386,7 +384,7 @@ BOOST_AUTO_TEST_CASE(LongPulses)
 
        // Check the higher levels are all inactive
        for (unsigned int i = 1; i < LogicSnapshot::ScaleStepCount; i++) {
-               const LogicSnapshot::MipMapLevel &m = s._mip_map[i];
+               const LogicSnapshot::MipMapLevel &m = s.mip_map_[i];
                BOOST_CHECK_EQUAL(m.length, 0);
                BOOST_CHECK_EQUAL(m.data_length, 0);
                BOOST_CHECK(m.data == NULL);
@@ -403,7 +401,7 @@ BOOST_AUTO_TEST_CASE(LongPulses)
                BOOST_CHECK_EQUAL(edges[i*2+1].second, false);
        }
 
-       BOOST_CHECK_EQUAL(edges.back().first, Length-1);
+       BOOST_CHECK_EQUAL(edges.back().first, Length);
        BOOST_CHECK_EQUAL(edges.back().second, false);
 
        //----- Test get_subsampled_edges at a simplified scale -----//
@@ -420,7 +418,7 @@ BOOST_AUTO_TEST_CASE(LongPulses)
                BOOST_CHECK_EQUAL(edges[i+1].second, false);
        }
 
-       BOOST_CHECK_EQUAL(edges.back().first, Length-1);
+       BOOST_CHECK_EQUAL(edges.back().first, Length);
        BOOST_CHECK_EQUAL(edges.back().second, false);
 }
 
@@ -472,9 +470,9 @@ BOOST_AUTO_TEST_CASE(LisaMUsbHid)
 }
 
 /*
- * This test checks the rendering of wide data (more than 8 probes)
+ * This test checks the rendering of wide data (more than 8 channels)
  * Probe signals are either all-high, or all-low, but are interleaved such that
- * they would toggle during every sample if treated like 8 probes.
+ * they would toggle during every sample if treated like 8 channels.
  * The packet contains a large number of samples, so the mipmap generation kicks
  * in.
  *
@@ -490,7 +488,7 @@ BOOST_AUTO_TEST_CASE(WideData)
        logic.length = Length * sizeof(data[0]);
        logic.data = data;
 
-       for(int i = 0; i < Length; i++)
+       for (int i = 0; i < Length; i++)
                data[i] = 0x0FF0;
 
        LogicSnapshot s(logic);
@@ -509,4 +507,28 @@ BOOST_AUTO_TEST_CASE(WideData)
        delete [] data;
 }
 
+/*
+ * This test is a replica of sixteen.sr attached to Bug #33.
+ */
+BOOST_AUTO_TEST_CASE(Sixteen)
+{
+       const int Length = 8;
+       uint16_t data[Length];
+
+       sr_datafeed_logic logic;
+       logic.unitsize = sizeof(data[0]);
+       logic.length = Length * sizeof(data[0]);
+       logic.data = data;
+
+       for (int i = 0; i < Length; i++)
+               data[i] = 0xFFFE;
+
+       LogicSnapshot s(logic);
+
+       vector<LogicSnapshot::EdgePair> edges;
+       s.get_subsampled_edges(edges, 0, 2, 0.0004, 1);
+
+       BOOST_CHECK_EQUAL(edges.size(), 2);
+}
+
 BOOST_AUTO_TEST_SUITE_END()