Fill test disk partitions with random noise to expose more bugs.
[dcpomatic.git] / test / audio_ring_buffers_test.cc
index 23491f6b380b694a520cd8b073ddf54e43f3d4e2..6efd8fbf8e58c9ba34def776881b0a75d4fedc22 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2016-2017 Carl Hetherington <cth@carlh.net>
+    Copyright (C) 2016-2018 Carl Hetherington <cth@carlh.net>
 
     This file is part of DCP-o-matic.
 
 #include <iostream>
 
 using std::cout;
-using boost::shared_ptr;
+using std::make_shared;
+using std::shared_ptr;
+using namespace dcpomatic;
 
 #define CANARY 9999
 
+/* XXX: these tests don't check the timestamping in AudioRingBuffers */
+
 /** Basic tests fetching the same number of channels as went in */
 BOOST_AUTO_TEST_CASE (audio_ring_buffers_test1)
 {
@@ -38,7 +42,7 @@ BOOST_AUTO_TEST_CASE (audio_ring_buffers_test1)
        /* Getting some data should give an underrun and write zeros */
        float buffer[256 * 6];
        buffer[240 * 6] = CANARY;
-       BOOST_CHECK_EQUAL (rb.get (buffer, 6, 240), true);
+       BOOST_CHECK (!rb.get(buffer, 6, 240));
        for (int i = 0; i < 240 * 6; ++i) {
                BOOST_REQUIRE_EQUAL (buffer[i], 0);
        }
@@ -48,26 +52,26 @@ BOOST_AUTO_TEST_CASE (audio_ring_buffers_test1)
        rb.clear ();
        BOOST_CHECK_EQUAL (rb.size(), 0);
        buffer[240 * 6] = CANARY;
-       BOOST_CHECK_EQUAL (rb.get (buffer, 6, 240), true);
+       BOOST_CHECK (rb.get(buffer, 6, 240) == boost::optional<DCPTime>());
        for (int i = 0; i < 240 * 6; ++i) {
                BOOST_REQUIRE_EQUAL (buffer[i], 0);
        }
        BOOST_CHECK_EQUAL (buffer[240 * 6], CANARY);
 
        /* Put some data in */
-       shared_ptr<AudioBuffers> data (new AudioBuffers (6, 91));
+       auto data = make_shared<AudioBuffers>(6, 91);
        int value = 0;
        for (int i = 0; i < 91; ++i) {
                for (int j = 0; j < 6; ++j) {
                        data->data(j)[i] = value++;
                }
        }
-       rb.put (data);
+       rb.put (data, DCPTime(), 48000);
        BOOST_CHECK_EQUAL (rb.size(), 91);
 
        /* Get part of it out */
        buffer[40 * 6] = CANARY;
-       BOOST_CHECK_EQUAL (rb.get (buffer, 6, 40), false);
+       BOOST_CHECK (*rb.get(buffer, 6, 40) == DCPTime());
        int check = 0;
        for (int i = 0; i < 40 * 6; ++i) {
                BOOST_REQUIRE_EQUAL (buffer[i], check++);
@@ -77,7 +81,7 @@ BOOST_AUTO_TEST_CASE (audio_ring_buffers_test1)
 
        /* Get the rest */
        buffer[51 * 6] = CANARY;
-       BOOST_CHECK_EQUAL (rb.get (buffer, 6, 51), false);
+       BOOST_CHECK (*rb.get(buffer, 6, 51) == DCPTime::from_frames(40, 48000));
        for (int i = 0; i < 51 * 6; ++i) {
                BOOST_REQUIRE_EQUAL (buffer[i], check++);
        }
@@ -86,7 +90,7 @@ BOOST_AUTO_TEST_CASE (audio_ring_buffers_test1)
 
        /* Now there should be an underrun */
        buffer[240 * 6] = CANARY;
-       BOOST_CHECK_EQUAL (rb.get (buffer, 6, 240), true);
+       BOOST_CHECK (!rb.get(buffer, 6, 240));
        BOOST_CHECK_EQUAL (buffer[240 * 6], CANARY);
 }
 
@@ -96,20 +100,20 @@ BOOST_AUTO_TEST_CASE (audio_ring_buffers_test2)
        AudioRingBuffers rb;
 
        /* Put some data in */
-       shared_ptr<AudioBuffers> data (new AudioBuffers (2, 91));
+       auto data = make_shared<AudioBuffers>(2, 91);
        int value = 0;
        for (int i = 0; i < 91; ++i) {
                for (int j = 0; j < 2; ++j) {
                        data->data(j)[i] = value++;
                }
        }
-       rb.put (data);
+       rb.put (data, DCPTime(), 48000);
        BOOST_CHECK_EQUAL (rb.size(), 91);
 
        /* Get part of it out */
        float buffer[256 * 6];
        buffer[40 * 6] = CANARY;
-       BOOST_CHECK_EQUAL (rb.get (buffer, 6, 40), false);
+       BOOST_CHECK (*rb.get(buffer, 6, 40) == DCPTime());
        int check = 0;
        for (int i = 0; i < 40; ++i) {
                for (int j = 0; j < 2; ++j) {
@@ -124,7 +128,7 @@ BOOST_AUTO_TEST_CASE (audio_ring_buffers_test2)
 
        /* Get the rest */
        buffer[51 * 6] = CANARY;
-       BOOST_CHECK_EQUAL (rb.get (buffer, 6, 51), false);
+       BOOST_CHECK (*rb.get(buffer, 6, 51) == DCPTime::from_frames(40, 48000));
        for (int i = 0; i < 51; ++i) {
                for (int j = 0; j < 2; ++j) {
                        BOOST_REQUIRE_EQUAL (buffer[i * 6 + j], check++);
@@ -138,7 +142,7 @@ BOOST_AUTO_TEST_CASE (audio_ring_buffers_test2)
 
        /* Now there should be an underrun */
        buffer[240 * 6] = CANARY;
-       BOOST_CHECK_EQUAL (rb.get (buffer, 6, 240), true);
+       BOOST_CHECK (!rb.get(buffer, 6, 240));
        BOOST_CHECK_EQUAL (buffer[240 * 6], CANARY);
 }
 
@@ -148,20 +152,20 @@ BOOST_AUTO_TEST_CASE (audio_ring_buffers_test3)
        AudioRingBuffers rb;
 
        /* Put some data in */
-       shared_ptr<AudioBuffers> data (new AudioBuffers (6, 91));
+       auto data = make_shared<AudioBuffers>(6, 91);
        int value = 0;
        for (int i = 0; i < 91; ++i) {
                for (int j = 0; j < 6; ++j) {
                        data->data(j)[i] = value++;
                }
        }
-       rb.put (data);
+       rb.put (data, DCPTime(), 48000);
        BOOST_CHECK_EQUAL (rb.size(), 91);
 
        /* Get part of it out */
        float buffer[256 * 6];
        buffer[40 * 2] = CANARY;
-       BOOST_CHECK_EQUAL (rb.get (buffer, 2, 40), false);
+       BOOST_CHECK (*rb.get(buffer, 2, 40) == DCPTime());
        int check = 0;
        for (int i = 0; i < 40; ++i) {
                for (int j = 0; j < 2; ++j) {
@@ -174,7 +178,7 @@ BOOST_AUTO_TEST_CASE (audio_ring_buffers_test3)
 
        /* Get the rest */
        buffer[51 * 2] = CANARY;
-       BOOST_CHECK_EQUAL (rb.get (buffer, 2, 51), false);
+       BOOST_CHECK (*rb.get(buffer, 2, 51) == DCPTime::from_frames(40, 48000));
        for (int i = 0; i < 51; ++i) {
                for (int j = 0; j < 2; ++j)  {
                        BOOST_REQUIRE_EQUAL (buffer[i * 2 + j], check++);
@@ -186,6 +190,6 @@ BOOST_AUTO_TEST_CASE (audio_ring_buffers_test3)
 
        /* Now there should be an underrun */
        buffer[240 * 2] = CANARY;
-       BOOST_CHECK_EQUAL (rb.get (buffer, 2, 240), true);
+       BOOST_CHECK (!rb.get(buffer, 2, 240));
        BOOST_CHECK_EQUAL (buffer[240 * 2], CANARY);
 }