X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=test%2Fdata%2Fsegment.cpp;h=d1c35ee1a34aa2f8ebf94f703b9c1be5167fd3df;hp=ee03a8b51033ee809b997e70e52565d893dbfaf4;hb=207ae8f6fb0b7a797349916afcd70e1add1b4d20;hpb=332c6dd8ebbbd24a5efdf3761f94a48deb9d721a diff --git a/test/data/segment.cpp b/test/data/segment.cpp index ee03a8b5..d1c35ee1 100644 --- a/test/data/segment.cpp +++ b/test/data/segment.cpp @@ -20,7 +20,7 @@ #include -#include +#include #include @@ -233,6 +233,36 @@ BOOST_AUTO_TEST_CASE(MaxSize32Multi) delete[] sample_data; } +BOOST_AUTO_TEST_CASE(MaxSize32MultiAtOnce) +{ + Segment s(1, sizeof(uint32_t)); + + // Chunk size is num*unit_size, so with pv::data::Segment::MaxChunkSize/unit_size, we reach the maximum size + uint32_t num_samples = 3*(pv::data::Segment::MaxChunkSize / sizeof(uint32_t)); + + //----- Add all samples, requiring multiple chunks, in one call ----// + uint32_t *data = new uint32_t[num_samples]; + for (uint32_t i = 0; i < num_samples; i++) + data[i] = i; + + s.append_samples(data, num_samples); + delete[] data; + + BOOST_CHECK(s.get_sample_count() == num_samples); + + for (uint32_t i = 0; i < num_samples; i++) { + uint8_t* sample_data = s.get_raw_samples(i, 1); + BOOST_CHECK_EQUAL(*((uint32_t*)sample_data), i); + delete[] sample_data; + } + + uint8_t* sample_data = s.get_raw_samples(0, num_samples); + for (uint32_t i = 0; i < num_samples; i++) { + BOOST_CHECK_EQUAL(*((uint32_t*)(sample_data + i * sizeof(uint32_t))), i); + } + delete[] sample_data; +} + BOOST_AUTO_TEST_CASE(MaxSize32MultiIterated) { Segment s(1, sizeof(uint32_t));