Add ConfigRestorer and use it instead of setup_test_config() directly.
[dcpomatic.git] / test / test.cc
index ed8a93135ca96c1cf0a82705fd4467d121977485..d1677a107cf4f25af2f6f33e9a9d05374778dfc1 100644 (file)
@@ -99,10 +99,10 @@ boost::filesystem::path TestPaths::xsd ()
 }
 
 
-void
+static void
 setup_test_config ()
 {
-       Config::instance()->set_master_encoding_threads (boost::thread::hardware_concurrency());
+       Config::instance()->set_master_encoding_threads (boost::thread::hardware_concurrency() / 2);
        Config::instance()->set_server_encoding_threads (1);
        Config::instance()->set_server_port_base (61921);
        Config::instance()->set_default_container (Ratio::from_id ("185"));
@@ -113,9 +113,7 @@ setup_test_config ()
        Config::instance()->set_default_still_length (10);
        Config::instance()->set_log_types (
                LogEntry::TYPE_GENERAL | LogEntry::TYPE_WARNING |
-               LogEntry::TYPE_ERROR | LogEntry::TYPE_DEBUG_THREE_D |
-               LogEntry::TYPE_DEBUG_ENCODE | LogEntry::TYPE_DEBUG_PLAYER |
-               LogEntry::TYPE_DISK
+               LogEntry::TYPE_ERROR | LogEntry::TYPE_DISK
                );
        Config::instance()->set_automatic_audio_analysis (false);
        auto signer = make_shared<dcp::CertificateChain>(dcp::file_to_string("test/data/signer_chain"));
@@ -365,10 +363,10 @@ static
 double
 rms_error (boost::filesystem::path ref, boost::filesystem::path check)
 {
-       FFmpegImageProxy ref_proxy (ref, VideoRange::FULL);
-       auto ref_image = ref_proxy.image().image;
-       FFmpegImageProxy check_proxy (check, VideoRange::FULL);
-       auto check_image = check_proxy.image().image;
+       FFmpegImageProxy ref_proxy (ref);
+       auto ref_image = ref_proxy.image(Image::Alignment::COMPACT).image;
+       FFmpegImageProxy check_proxy (check);
+       auto check_image = check_proxy.image(Image::Alignment::COMPACT).image;
 
        BOOST_REQUIRE_EQUAL (ref_image->pixel_format(), check_image->pixel_format());
        AVPixelFormat const format = ref_image->pixel_format();
@@ -454,29 +452,26 @@ check_file (boost::filesystem::path ref, boost::filesystem::path check)
        BOOST_CHECK (check_file);
 
        int const buffer_size = 65536;
-       uint8_t* ref_buffer = new uint8_t[buffer_size];
-       uint8_t* check_buffer = new uint8_t[buffer_size];
+       std::vector<uint8_t> ref_buffer(buffer_size);
+       std::vector<uint8_t> check_buffer(buffer_size);
 
        string error = "File " + check.string() + " differs from reference " + ref.string();
 
        while (N) {
                uintmax_t this_time = min (uintmax_t (buffer_size), N);
-               size_t r = fread (ref_buffer, 1, this_time, ref_file);
+               size_t r = fread (ref_buffer.data(), 1, this_time, ref_file);
                BOOST_CHECK_EQUAL (r, this_time);
-               r = fread (check_buffer, 1, this_time, check_file);
+               r = fread (check_buffer.data(), 1, this_time, check_file);
                BOOST_CHECK_EQUAL (r, this_time);
 
-               BOOST_CHECK_MESSAGE (memcmp (ref_buffer, check_buffer, this_time) == 0, error);
-               if (memcmp (ref_buffer, check_buffer, this_time)) {
+               BOOST_CHECK_MESSAGE (memcmp(ref_buffer.data(), check_buffer.data(), this_time) == 0, error);
+               if (memcmp(ref_buffer.data(), check_buffer.data(), this_time)) {
                        break;
                }
 
                N -= this_time;
        }
 
-       delete[] ref_buffer;
-       delete[] check_buffer;
-
        fclose (ref_file);
        fclose (check_file);
 }
@@ -497,17 +492,14 @@ check_text_file (boost::filesystem::path ref, boost::filesystem::path check)
 
        DCPOMATIC_ASSERT (buffer_size < 1024 * 1024);
 
-       auto ref_buffer = new uint8_t[buffer_size];
-       auto ref_read = fread(ref_buffer, 1, buffer_size, ref_file);
-       auto check_buffer = new uint8_t[buffer_size];
-       auto check_read = fread(check_buffer, 1, buffer_size, check_file);
+       std::vector<uint8_t> ref_buffer(buffer_size);
+       auto ref_read = fread(ref_buffer.data(), 1, buffer_size, ref_file);
+       std::vector<uint8_t> check_buffer(buffer_size);
+       auto check_read = fread(check_buffer.data(), 1, buffer_size, check_file);
        BOOST_CHECK_EQUAL (ref_read, check_read);
 
        string const error = "File " + check.string() + " differs from reference " + ref.string();
-       BOOST_CHECK_MESSAGE(memcmp(ref_buffer, check_buffer, ref_read) == 0, error);
-
-       delete[] ref_buffer;
-       delete[] check_buffer;
+       BOOST_CHECK_MESSAGE(memcmp(ref_buffer.data(), check_buffer.data(), ref_read) == 0, error);
 
        fclose (ref_file);
        fclose (check_file);
@@ -908,3 +900,24 @@ make_and_verify_dcp (shared_ptr<Film> film, vector<dcp::VerificationNote::Code>
        BOOST_CHECK(ok);
 }
 
+
+void
+check_int_close (int a, int b, int d)
+{
+       BOOST_CHECK_MESSAGE (std::abs(a - b) < d, a << " differs from " << b << " by more than " << d);
+}
+
+
+void
+check_int_close (std::pair<int, int> a, std::pair<int, int> b, int d)
+{
+       check_int_close (a.first, b.first, d);
+       check_int_close (a.second, b.second, d);
+}
+
+
+ConfigRestorer::~ConfigRestorer()
+{
+       setup_test_config();
+}
+