From 258059d04cdfb9058601c995fd35ad5a67267389 Mon Sep 17 00:00:00 2001 From: Richard Bailey Date: Thu, 11 Jan 2024 14:12:58 +0000 Subject: [PATCH] Add deepCopy() test for a non-trival document Uses the kitchen sink xml that features all ADM elements to generate a document Then deep copies that document, and checks that xml written from both the document and its copy match (they may differ from the original) --- tests/adm_document_tests.cpp | 13 + tests/test_data/sink.xml | 568 +++++++++++++++++++++++++++++++++++ 2 files changed, 581 insertions(+) create mode 100644 tests/test_data/sink.xml diff --git a/tests/adm_document_tests.cpp b/tests/adm_document_tests.cpp index dee786e6..1fdd289f 100644 --- a/tests/adm_document_tests.cpp +++ b/tests/adm_document_tests.cpp @@ -4,6 +4,8 @@ #include "adm/utilities/id_assignment.hpp" #include "adm/utilities/copy.hpp" #include "adm/utilities/object_creation.hpp" +#include "adm/parse.hpp" +#include "adm/write.hpp" TEST_CASE("basic_document") { using namespace adm; @@ -629,3 +631,14 @@ TEST_CASE("remove_elements") { REQUIRE(trackUid->getReference() == nullptr); } } + +// Tests deepcopy using a modified version of the kitchen sink test material from https://qc.ebu.io/testmaterial +TEST_CASE("Copy the kitchen sink") { + auto document = parseXml("sink.xml"); + std::stringstream xml; + writeXml(xml, document); + auto documentCopy = document->deepCopy(); + std::stringstream xmlCopy; + writeXml(xmlCopy, documentCopy); + REQUIRE(xml.str() == xmlCopy.str()); +} diff --git a/tests/test_data/sink.xml b/tests/test_data/sink.xml new file mode 100644 index 00000000..48c7e8a7 --- /dev/null +++ b/tests/test_data/sink.xml @@ -0,0 +1,568 @@ + + + + + <dc:title xml:lang="en">Kitchen Sink ADM Test File</dc:title> + + + + BBC + + + + +This ADM test file is designed for testing ADM metadata handling software. It contains every parameter specified in ITU-R BS.2076-1 in some form. While it does contain some audio, these are merely to allow validiation of the metadata with the audio tracks rather than for any useful playout or listening tests. So some values such as loudness parameters and matrix values may not make sense with the corresponding audio, but are merely present to allow testing of their presence. + +The file contains 17 tracks, with tracks 7 and 8 containing two audioObjects (i.e two audioTrackUIDs) with all the other tracks containing one. +Tracks 1-3: channel-based audio (DirectSpeakers), PCM +Tracks 4-6: object-based audio (Objects), PCM +Tracks 7-9: channel-based audio (DirectSpeakers) for the first 7 seconds, PCM +Tracks 7-8: matrix-based audio (Matrix) from the 8 seconds onwards, PCM +Tracks 10-13: scene-based audio (HOA), PCM +Tracks 14-15: binaural audio (Binaural), PCM +Tracks 16-17: channel-based audio (DirectSpeakers), coded (6 channels in 2 tracks) using a trivial bit-packing codec. + +All audio is 24-bit 48kHz. + + + + + + + + + + ACO_1001 + ACO_1002 + ACO_1004 + ACO_1005 + + -23.0 + 17.5 + -3.2 + -8.9 + -15.3 + + + + + + + + ACO_1003 + ACO_1006 + ACO_1007 + ACO_1008 + + -24.0 + 16.5 + -4.2 + -9.9 + -13.3 + -23.8 + + + + + + + + + AO_1001 + AO_1002 + + -24.0 + 12.5 + -5.2 + -9.9 + -18.3 + + 0 + + + AO_1003 + + -22.0 + 18.5 + -2.2 + -12.9 + -14.3 + + 1 + + + AO_1004 + 2 + + + AO_1005 + + + AO_1006 + + + AO_1007 + + + AO_1008 + + + AO_1009 + + + + AP_00010002 + AO_1002 + ATU_00000001 + ATU_00000002 + + -20.0 + 3.0 + + + + AP_00010001 + ATU_00000003 + + -20.0 + 3.0 + + + + AP_00031001 + ATU_00000004 + ATU_00000005 + + -50.0 + 50.0 + -20.0 + 20.0 + 0.6 + 1.0 + + + + AP_00031002 + ATU_00000006 + + + AP_00011001 + ATU_00000007 + ATU_00000008 + ATU_00000009 + + + AP_00021001 + ATU_0000000a + ATU_0000000b + + + AP_00041001 + ATU_0000000c + ATU_0000000d + ATU_0000000e + ATU_0000000f + + + AP_00051001 + ATU_00000010 + ATU_00000011 + + + AP_00010003 + ATU_00000012 + ATU_00000013 + + + + AC_00031001 + AC_00031002 + + + AC_00031003 + + + AC_00011001 + AC_00011002 + AC_00011003 + + + AC_00021001 + AC_00021002 + AP_00021101 + AP_00010002 + + + AC_00021101 + AC_00021102 + AP_00021001 + AP_00010002 + + + AC_00041001 + AC_00041002 + AC_00041003 + AC_00041004 + 1 + 2.0 + 1 + + + AC_00051001 + AC_00051002 + + + + + 20.000000 + 10.000000 + 0.800000 + 0.8 + 0.0 + 0.05 + 0.08 + 0.06 + + RearLeftBottom + RearRightBottom + + 1 + + + 10.000000 + 0.000000 + 0.900000 + 0.7 + 0.1 + 0.08 + 0.1 + 0.09 + + RearLeftBottom + RearRightBottom + + 1 + + + 0.000000 + -10.000000 + 1.00000 + 0.6 + 0.2 + 0.1 + 0.15 + 0.12 + + RearLeftBottom + RearRightBottom + + 1 + + + + + 25.000000 + 15.000000 + 0.700000 + 0.7 + 0.9 + 0 + + + 12.000000 + 7.000000 + 0.700000 + 0.8 + 0.8 + 0 + + + -10.000000 + -13.000000 + 1.10000 + 0.5 + 0.7 + 0 + + + + + 0.8 + -0.7 + 0.8 + 1 + 1 + 0.4 + 1 + 3 + + LeftSide + RightSide + + + + 0.6 + -0.4 + 0.3 + 1 + 1 + 0.3 + 1 + 3 + + LeftSide + RightSide + + + + + 150 + + M+180_low + 180.000000 + -10.000000 + 1.000000 + + + + 2000 + 150 + + M+180_mid + 180.000000 + 0.000000 + 1.000000 + + + + 2000 + + M+180_high + 180.000000 + 10.000000 + 1.000000 + + + + + + AC_00010001 + AC_00010002 + + + + + + + AC_00010001 + AC_00010002 + + + + + + + AC_00021001 + AC_00021002 + + AC_00010001 + + + + + + AC_00021001 + AC_00021002 + + AC_00010002 + + + + + 1/sqrt(2) + 0 + 0 + 1 + 2.0 + 1 + + + + + cos(p)*cos(t) + -1 + 1 + 1 + 2.0 + 1 + + + + + sin(p)*cos(t) + 0 + 1 + 1 + 2.0 + 1 + + + + + sin(t) + 1 + 1 + 1 + 2.0 + 1 + + + + + + + + + AC_00031001 + AT_00031001_01 + + + AC_00031002 + AT_00031002_01 + + + AC_00031003 + AT_00031003_01 + + + AC_00011001 + AT_00011001_01 + + + AC_00011002 + AT_00011002_01 + + + AC_00011003 + AT_00011003_01 + + + AC_00021001 + AT_00021001_01 + + + AC_00021002 + AT_00021002_01 + + + AC_00041001 + AT_00041001_01 + + + AC_00041002 + AT_00041002_01 + + + AC_00041003 + AT_00041003_01 + + + AC_00041004 + AT_00041004_01 + + + AC_00051001 + AT_00051001_01 + + + AC_00051002 + AT_00051002_01 + + + AP_00010003 + AT_00011101_01 + AT_00011101_02 + + + + AS_00031001 + + + AS_00031002 + + + AS_00031003 + + + AS_00011001 + + + AS_00011002 + + + AS_00011003 + + + AS_00021001 + + + AS_00021002 + + + AS_00041001 + + + AS_00041002 + + + AS_00041003 + + + AS_00041004 + + + AS_00051001 + + + AS_00051002 + + + AS_00011101 + + + AS_00011101 + + + + AT_00010001_01 + AP_00010002 + + + + + urn:smpte:umid:060a2b34.01010105.01010f20.13000000.540bca53.41434f05.8ce5f4e3.5b72c985 + MXFTRACK_1 + MXFCHAN_3 + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file