+++ /dev/null
-#!/bin/bash
-
-export LD_LIBRARY_PATH=build/src/lib:$LD_LIBRARY_PATH
-if [ "$1" == "--debug" ]; then
- gdb --args build/test/short-unit-tests
-elif [ "$1" == "--valgrind" ]; then
- valgrind --tool="memcheck" --leak-check=full build/test/short-unit-tests
-else
- build/test/short-unit-tests
-fi
-
--- /dev/null
+#!/bin/bash
+
+export LD_LIBRARY_PATH=build/src/lib:$LD_LIBRARY_PATH
+if [ "$1" == "--debug" ]; then
+ gdb --args build/test/unit-tests
+elif [ "$1" == "--valgrind" ]; then
+ valgrind --tool="memcheck" --leak-check=full build/test/unit-tests
+else
+ build/test/unit-tests
+fi
+
+++ /dev/null
-Fri Feb 17 18:54:32 2012: Starting to make a DCP on shankly
-Fri Feb 17 18:54:32 2012: Transcode job starting
-Fri Feb 17 18:54:37 2012: Transcode job completed successfully
+++ /dev/null
-name
-content
-dcp_long_name
-guess_dcp_long_name 0
-frames_per_second 0
-left_crop 0
-right_crop 0
-top_crop 0
-bottom_crop 0
-scaler bicubic
-dcp_frames 0
-dcp_ab 0
-width 0
-height 0
-length 0
-audio_channels 0
-audio_sample_rate 0
-audio_sample_format Unknown
+++ /dev/null
-/*
- Copyright (C) 2012 Carl Hetherington <cth@carlh.net>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-*/
-
-#include <fstream>
-#include <iostream>
-#include <boost/filesystem.hpp>
-#include <boost/algorithm/string/predicate.hpp>
-#include "format.h"
-#include "film.h"
-#include "filter.h"
-#include "job_manager.h"
-#include "util.h"
-#include "exceptions.h"
-#define BOOST_TEST_DYN_LINK
-#define BOOST_TEST_MODULE dvdomatic_test
-#include <boost/test/unit_test.hpp>
-
-using namespace std;
-using namespace boost;
-
-bool
-compare (string ref, string test, list<string> exclude)
-{
- ifstream r (ref.c_str ());
- ifstream t (test.c_str ());
-
- while (r.good ()) {
- string rl;
- getline (r, rl);
- string tl;
- getline (t, tl);
-
- bool ex = false;
- for (list<string>::iterator i = exclude.begin(); i != exclude.end(); ++i) {
- if (rl.find (*i) != string::npos && tl.find (*i) != string::npos) {
- ex = true;
- }
- }
-
- if (!ex && rl != tl) {
- cerr << "Fail:\n" << rl << "\n" << tl << "\n";
- return true;
- }
- }
-
- return false;
-}
-
-
-BOOST_AUTO_TEST_CASE (make_dcp_test)
-{
- dvdomatic_setup ();
-
- string const dcp_name = "FOO-BAR-BAZ";
-
- string const ref_film = "test/film";
- string const ref_dcp = ref_film + "/" + dcp_name;
- string const ref_pkl = ref_dcp + "/bdb4ae0a-0d09-4554-8557-0b4260f4c359_pkl.xml";
- string const ref_cpl = ref_dcp + "/08dd6e45-83b5-41dc-9179-d7c59f597a12_cpl.xml";
- string const test_film = "build/test/film";
- string const test_dcp = test_film + "/" + dcp_name;
-
- if (boost::filesystem::exists (test_film)) {
- boost::filesystem::remove_all (test_film);
- }
-
- Film f (test_film, false);
- f.write_metadata ();
- boost::filesystem::copy_file ("test/zombie.mpeg", "build/test/film/zombie.mpeg");
- f.set_content ("zombie.mpeg");
- f.set_dcp_content_type (DCPContentType::from_pretty_name ("Test"));
-
- BOOST_CHECK_EQUAL (f.audio_channels(), 2);
- BOOST_CHECK_EQUAL (f.audio_sample_rate(), 48000);
- BOOST_CHECK_EQUAL (audio_sample_format_to_string (f.audio_sample_format()), "S16");
-
- f.set_format (Format::from_nickname ("Flat"));
-
- f.make_dcp (true, 5);
-
- while (JobManager::instance()->work_to_do ()) {
- sleep (1);
- }
-
- {
- stringstream s;
- s << "diff -ur test/film/j2c " << test_film << "/j2c";
- int const r = ::system (s.str().c_str ());
- BOOST_CHECK_EQUAL (r, 0);
- }
-
- {
- stringstream s;
- s << "diff -ur test/film/wavs " << test_film << "/wavs";
- int const r = ::system (s.str().c_str ());
- BOOST_CHECK_EQUAL (r, 0);
- }
-
- {
- stringstream s;
- s << "diff -u test/film/metadata " << test_film << "/metadata";
- int const r = ::system (s.str().c_str ());
- BOOST_CHECK_EQUAL (r, 0);
- }
-
- /* Find the test pkl and cpl */
- string test_pkl;
- string test_cpl;
-
- for (filesystem::directory_iterator i = filesystem::directory_iterator (test_dcp); i != filesystem::directory_iterator(); ++i) {
-#if BOOST_FILESYSTEM_VERSION == 3
- string const t = filesystem::path(*i).generic_string ();
-#else
- string const t = i->string ();
-#endif
- if (algorithm::ends_with (t, "cpl.xml")) {
- test_cpl = t;
- } else if (algorithm::ends_with (t, "pkl.xml")) {
- test_pkl = t;
- }
- }
-
- {
- list<string> exclude;
- exclude.push_back ("urn:uuid");
- exclude.push_back ("urn:uri");
- exclude.push_back ("<IssueDate>");
- exclude.push_back ("<LabelText>");
- exclude.push_back ("<Hash>");
- BOOST_CHECK_EQUAL (compare (ref_cpl, test_cpl, exclude), false);
- }
-
- {
- list<string> exclude;
- exclude.push_back ("urn:uuid");
- exclude.push_back ("<IssueDate>");
- exclude.push_back ("<Hash>");
- BOOST_CHECK_EQUAL (compare (ref_pkl, test_pkl, exclude), false);
- }
-}
+++ /dev/null
-/*
- Copyright (C) 2012 Carl Hetherington <cth@carlh.net>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-*/
-
-#include <fstream>
-#include <iostream>
-#include <boost/filesystem.hpp>
-#include <boost/algorithm/string/predicate.hpp>
-#include "format.h"
-#include "film.h"
-#include "filter.h"
-#include "job_manager.h"
-#include "util.h"
-#include "exceptions.h"
-#include "dvd.h"
-#include "delay_line.h"
-#define BOOST_TEST_DYN_LINK
-#define BOOST_TEST_MODULE dvdomatic_test
-#include <boost/test/unit_test.hpp>
-
-using namespace std;
-using namespace boost;
-
-BOOST_AUTO_TEST_CASE (film_metadata_test)
-{
- dvdomatic_setup ();
-
- string const test_film = "build/test/film";
-
- if (boost::filesystem::exists (test_film)) {
- boost::filesystem::remove_all (test_film);
- }
-
- BOOST_CHECK_THROW (new Film ("build/test/film", true), OpenFileError);
-
- Film f (test_film, false);
- BOOST_CHECK (f.format() == 0);
- BOOST_CHECK (f.dcp_content_type() == 0);
- BOOST_CHECK (f.filters ().empty());
-
- f.set_name ("fred");
- BOOST_CHECK_THROW (f.set_content ("jim"), OpenFileError);
- f.set_dcp_content_type (DCPContentType::from_pretty_name ("Short"));
- f.set_format (Format::from_nickname ("Flat"));
- f.set_left_crop (1);
- f.set_right_crop (2);
- f.set_top_crop (3);
- f.set_bottom_crop (4);
- vector<Filter const *> f_filters;
- f_filters.push_back (Filter::from_id ("pphb"));
- f_filters.push_back (Filter::from_id ("unsharp"));
- f.set_filters (f_filters);
- f.set_dcp_frames (42);
- f.set_dcp_ab (true);
- f.write_metadata ();
-
- stringstream s;
- s << "diff -u test/metadata.ref " << test_film << "/metadata";
- BOOST_CHECK_EQUAL (::system (s.str().c_str ()), 0);
-
- Film g (test_film, true);
-
- BOOST_CHECK_EQUAL (g.name(), "fred");
- BOOST_CHECK_EQUAL (g.dcp_content_type(), DCPContentType::from_pretty_name ("Short"));
- BOOST_CHECK_EQUAL (g.format(), Format::from_nickname ("Flat"));
- BOOST_CHECK_EQUAL (g.left_crop(), 1);
- BOOST_CHECK_EQUAL (g.right_crop(), 2);
- BOOST_CHECK_EQUAL (g.top_crop(), 3);
- BOOST_CHECK_EQUAL (g.bottom_crop(), 4);
- vector<Filter const *> g_filters = g.filters ();
- BOOST_CHECK_EQUAL (g_filters.size(), 2);
- BOOST_CHECK_EQUAL (g_filters.front(), Filter::from_id ("pphb"));
- BOOST_CHECK_EQUAL (g_filters.back(), Filter::from_id ("unsharp"));
- BOOST_CHECK_EQUAL (g.dcp_frames(), 42);
- BOOST_CHECK_EQUAL (g.dcp_ab(), true);
-
- g.write_metadata ();
- BOOST_CHECK_EQUAL (::system (s.str().c_str ()), 0);
-}
-
-BOOST_AUTO_TEST_CASE (format_test)
-{
- Format::setup_formats ();
-
- Format const * f = Format::from_nickname ("Flat");
- BOOST_CHECK (f);
- BOOST_CHECK_EQUAL (f->ratio_as_integer(), 185);
-
- f = Format::from_nickname ("Scope");
- BOOST_CHECK (f);
- BOOST_CHECK_EQUAL (f->ratio_as_integer(), 239);
-}
-
-BOOST_AUTO_TEST_CASE (util_test)
-{
- string t = "Hello this is a string \"with quotes\" and indeed without them";
- vector<string> b = split_at_spaces_considering_quotes (t);
- vector<string>::iterator i = b.begin ();
- BOOST_CHECK_EQUAL (*i++, "Hello");
- BOOST_CHECK_EQUAL (*i++, "this");
- BOOST_CHECK_EQUAL (*i++, "is");
- BOOST_CHECK_EQUAL (*i++, "a");
- BOOST_CHECK_EQUAL (*i++, "string");
- BOOST_CHECK_EQUAL (*i++, "with quotes");
- BOOST_CHECK_EQUAL (*i++, "and");
- BOOST_CHECK_EQUAL (*i++, "indeed");
- BOOST_CHECK_EQUAL (*i++, "without");
- BOOST_CHECK_EQUAL (*i++, "them");
-}
-
-BOOST_AUTO_TEST_CASE (dvd_test)
-{
- vector<uint64_t> const t = dvd_titles ("test/dvd");
- BOOST_CHECK_EQUAL (t.size(), 4);
- BOOST_CHECK_EQUAL (t[1], 0);
- BOOST_CHECK_EQUAL (t[2], 14);
- BOOST_CHECK_EQUAL (t[3], 7);
-}
-
-void
-do_positive_delay_line_test (int delay_length, int block_length)
-{
- DelayLine d (delay_length);
- uint8_t data[block_length];
-
- int in = 0;
- int out = 0;
- int returned = 0;
- int zeros = 0;
-
- for (int i = 0; i < 64; ++i) {
- for (int j = 0; j < block_length; ++j) {
- data[j] = in;
- ++in;
- }
-
- int const a = d.feed (data, block_length);
- returned += a;
-
- for (int j = 0; j < a; ++j) {
- if (zeros < delay_length) {
- BOOST_CHECK_EQUAL (data[j], 0);
- ++zeros;
- } else {
- BOOST_CHECK_EQUAL (data[j], out & 0xff);
- ++out;
- }
- }
- }
-
- BOOST_CHECK_EQUAL (returned, 64 * block_length);
-}
-
-void
-do_negative_delay_line_test (int delay_length, int block_length)
-{
- DelayLine d (delay_length);
- uint8_t data[block_length];
-
- int in = 0;
- int out = -delay_length;
- int returned = 0;
-
- for (int i = 0; i < 256; ++i) {
- for (int j = 0; j < block_length; ++j) {
- data[j] = in;
- ++in;
- }
-
- int const a = d.feed (data, block_length);
- returned += a;
-
- for (int j = 0; j < a; ++j) {
- BOOST_CHECK_EQUAL (data[j], out & 0xff);
- ++out;
- }
- }
-
- uint8_t remainder[-delay_length];
- d.get_remaining (remainder);
- returned += -delay_length;
-
- for (int i = 0; i < -delay_length; ++i) {
- BOOST_CHECK_EQUAL (remainder[i], 0);
- ++out;
- }
-
- BOOST_CHECK_EQUAL (returned, 256 * block_length);
-
-}
-
-BOOST_AUTO_TEST_CASE (delay_line_test)
-{
- do_positive_delay_line_test (64, 128);
- do_positive_delay_line_test (128, 64);
- do_positive_delay_line_test (3, 512);
- do_positive_delay_line_test (512, 3);
-
- do_positive_delay_line_test (0, 64);
-
- do_negative_delay_line_test (-64, 128);
- do_negative_delay_line_test (-128, 64);
- do_negative_delay_line_test (-3, 512);
- do_negative_delay_line_test (-512, 3);
-}
--- /dev/null
+/*
+ Copyright (C) 2012 Carl Hetherington <cth@carlh.net>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#include <fstream>
+#include <iostream>
+#include <boost/filesystem.hpp>
+#include <boost/algorithm/string/predicate.hpp>
+#include "format.h"
+#include "film.h"
+#include "filter.h"
+#include "job_manager.h"
+#include "util.h"
+#include "exceptions.h"
+#include "dvd.h"
+#include "delay_line.h"
+#define BOOST_TEST_DYN_LINK
+#define BOOST_TEST_MODULE dvdomatic_test
+#include <boost/test/unit_test.hpp>
+
+using namespace std;
+using namespace boost;
+
+BOOST_AUTO_TEST_CASE (film_metadata_test)
+{
+ dvdomatic_setup ();
+
+ string const test_film = "build/test/film";
+
+ if (boost::filesystem::exists (test_film)) {
+ boost::filesystem::remove_all (test_film);
+ }
+
+ BOOST_CHECK_THROW (new Film ("build/test/film", true), OpenFileError);
+
+ Film f (test_film, false);
+ BOOST_CHECK (f.format() == 0);
+ BOOST_CHECK (f.dcp_content_type() == 0);
+ BOOST_CHECK (f.filters ().empty());
+
+ f.set_name ("fred");
+ BOOST_CHECK_THROW (f.set_content ("jim"), OpenFileError);
+ f.set_dcp_content_type (DCPContentType::from_pretty_name ("Short"));
+ f.set_format (Format::from_nickname ("Flat"));
+ f.set_left_crop (1);
+ f.set_right_crop (2);
+ f.set_top_crop (3);
+ f.set_bottom_crop (4);
+ vector<Filter const *> f_filters;
+ f_filters.push_back (Filter::from_id ("pphb"));
+ f_filters.push_back (Filter::from_id ("unsharp"));
+ f.set_filters (f_filters);
+ f.set_dcp_frames (42);
+ f.set_dcp_ab (true);
+ f.write_metadata ();
+
+ stringstream s;
+ s << "diff -u test/metadata.ref " << test_film << "/metadata";
+ BOOST_CHECK_EQUAL (::system (s.str().c_str ()), 0);
+
+ Film g (test_film, true);
+
+ BOOST_CHECK_EQUAL (g.name(), "fred");
+ BOOST_CHECK_EQUAL (g.dcp_content_type(), DCPContentType::from_pretty_name ("Short"));
+ BOOST_CHECK_EQUAL (g.format(), Format::from_nickname ("Flat"));
+ BOOST_CHECK_EQUAL (g.left_crop(), 1);
+ BOOST_CHECK_EQUAL (g.right_crop(), 2);
+ BOOST_CHECK_EQUAL (g.top_crop(), 3);
+ BOOST_CHECK_EQUAL (g.bottom_crop(), 4);
+ vector<Filter const *> g_filters = g.filters ();
+ BOOST_CHECK_EQUAL (g_filters.size(), 2);
+ BOOST_CHECK_EQUAL (g_filters.front(), Filter::from_id ("pphb"));
+ BOOST_CHECK_EQUAL (g_filters.back(), Filter::from_id ("unsharp"));
+ BOOST_CHECK_EQUAL (g.dcp_frames(), 42);
+ BOOST_CHECK_EQUAL (g.dcp_ab(), true);
+
+ g.write_metadata ();
+ BOOST_CHECK_EQUAL (::system (s.str().c_str ()), 0);
+}
+
+BOOST_AUTO_TEST_CASE (format_test)
+{
+ Format::setup_formats ();
+
+ Format const * f = Format::from_nickname ("Flat");
+ BOOST_CHECK (f);
+ BOOST_CHECK_EQUAL (f->ratio_as_integer(), 185);
+
+ f = Format::from_nickname ("Scope");
+ BOOST_CHECK (f);
+ BOOST_CHECK_EQUAL (f->ratio_as_integer(), 239);
+}
+
+BOOST_AUTO_TEST_CASE (util_test)
+{
+ string t = "Hello this is a string \"with quotes\" and indeed without them";
+ vector<string> b = split_at_spaces_considering_quotes (t);
+ vector<string>::iterator i = b.begin ();
+ BOOST_CHECK_EQUAL (*i++, "Hello");
+ BOOST_CHECK_EQUAL (*i++, "this");
+ BOOST_CHECK_EQUAL (*i++, "is");
+ BOOST_CHECK_EQUAL (*i++, "a");
+ BOOST_CHECK_EQUAL (*i++, "string");
+ BOOST_CHECK_EQUAL (*i++, "with quotes");
+ BOOST_CHECK_EQUAL (*i++, "and");
+ BOOST_CHECK_EQUAL (*i++, "indeed");
+ BOOST_CHECK_EQUAL (*i++, "without");
+ BOOST_CHECK_EQUAL (*i++, "them");
+}
+
+BOOST_AUTO_TEST_CASE (dvd_test)
+{
+ vector<uint64_t> const t = dvd_titles ("test/dvd");
+ BOOST_CHECK_EQUAL (t.size(), 4);
+ BOOST_CHECK_EQUAL (t[1], 0);
+ BOOST_CHECK_EQUAL (t[2], 14);
+ BOOST_CHECK_EQUAL (t[3], 7);
+}
+
+void
+do_positive_delay_line_test (int delay_length, int block_length)
+{
+ DelayLine d (delay_length);
+ uint8_t data[block_length];
+
+ int in = 0;
+ int out = 0;
+ int returned = 0;
+ int zeros = 0;
+
+ for (int i = 0; i < 64; ++i) {
+ for (int j = 0; j < block_length; ++j) {
+ data[j] = in;
+ ++in;
+ }
+
+ int const a = d.feed (data, block_length);
+ returned += a;
+
+ for (int j = 0; j < a; ++j) {
+ if (zeros < delay_length) {
+ BOOST_CHECK_EQUAL (data[j], 0);
+ ++zeros;
+ } else {
+ BOOST_CHECK_EQUAL (data[j], out & 0xff);
+ ++out;
+ }
+ }
+ }
+
+ BOOST_CHECK_EQUAL (returned, 64 * block_length);
+}
+
+void
+do_negative_delay_line_test (int delay_length, int block_length)
+{
+ DelayLine d (delay_length);
+ uint8_t data[block_length];
+
+ int in = 0;
+ int out = -delay_length;
+ int returned = 0;
+
+ for (int i = 0; i < 256; ++i) {
+ for (int j = 0; j < block_length; ++j) {
+ data[j] = in;
+ ++in;
+ }
+
+ int const a = d.feed (data, block_length);
+ returned += a;
+
+ for (int j = 0; j < a; ++j) {
+ BOOST_CHECK_EQUAL (data[j], out & 0xff);
+ ++out;
+ }
+ }
+
+ uint8_t remainder[-delay_length];
+ d.get_remaining (remainder);
+ returned += -delay_length;
+
+ for (int i = 0; i < -delay_length; ++i) {
+ BOOST_CHECK_EQUAL (remainder[i], 0);
+ ++out;
+ }
+
+ BOOST_CHECK_EQUAL (returned, 256 * block_length);
+
+}
+
+BOOST_AUTO_TEST_CASE (delay_line_test)
+{
+ do_positive_delay_line_test (64, 128);
+ do_positive_delay_line_test (128, 64);
+ do_positive_delay_line_test (3, 512);
+ do_positive_delay_line_test (512, 3);
+
+ do_positive_delay_line_test (0, 64);
+
+ do_negative_delay_line_test (-64, 128);
+ do_negative_delay_line_test (-128, 64);
+ do_negative_delay_line_test (-3, 512);
+ do_negative_delay_line_test (-512, 3);
+}
def build(bld):
obj = bld(features = 'cxx cxxprogram')
- obj.name = 'short-unit-tests'
+ obj.name = 'unit-tests'
obj.uselib = 'BOOST_TEST'
obj.use = 'libdvdomatic'
- obj.source = 'short.cc'
- obj.target = 'short-unit-tests'
- obj.install_path = ''
-
- obj = bld(features = 'cxx cxxprogram')
- obj.name = 'long-unit-tests'
- obj.uselib = 'BOOST_TEST'
- obj.use = 'libdvdomatic'
- obj.source = 'long.cc'
- obj.target = 'long-unit-tests'
+ obj.source = 'test.cc'
+ obj.target = 'unit-tests'
obj.install_path = ''