]> sigrok.org Git - pulseview.git/blobdiff - test/data/logicsnapshot.cpp
pv::data::DecoderStack: Set _row for each annotation.
[pulseview.git] / test / data / logicsnapshot.cpp
index 1c536791b7a3f746a9ae621cc39c62553b21fae7..5fc17213ba1ca06e2a2d5d0b84686ee0b60957a3 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;
-
 using pv::data::LogicSnapshot;
+using std::vector;
 
 BOOST_AUTO_TEST_SUITE(LogicSnapshotTest)
 
@@ -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)
@@ -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();
@@ -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;
 
@@ -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);
 }
 
@@ -471,5 +469,66 @@ BOOST_AUTO_TEST_CASE(LisaMUsbHid)
        BOOST_CHECK_EQUAL(edges[edges.size() - 2].second, false);
 }
 
+/*
+ * This test checks the rendering of wide data (more than 8 probes)
+ * 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.
+ * The packet contains a large number of samples, so the mipmap generation kicks
+ * in.
+ *
+ * The signals should not toggle (have exactly two edges: the start and end)
+ */
+BOOST_AUTO_TEST_CASE(WideData)
+{
+       const int Length = 512<<10;
+       uint16_t *data = new uint16_t[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] = 0x0FF0;
+
+       LogicSnapshot s(logic);
+
+       vector<LogicSnapshot::EdgePair> edges;
+
+       edges.clear();
+       s.get_subsampled_edges(edges, 0, Length-1, 1, 0);
+       BOOST_CHECK_EQUAL(edges.size(), 2);
+
+       edges.clear();
+       s.get_subsampled_edges(edges, 0, Length-1, 1, 8);
+       BOOST_CHECK_EQUAL(edges.size(), 2);
+
+       // Cleanup
+       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()