#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)
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();
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)
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();
//----- 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;
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 -----//
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);
}
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()