# HG changeset patch # User Chris Cannam # Date 1536932866 -3600 # Node ID a92e942158637148ccdbcdebc205bc2c7b6db885 # Parent 64ef24ebb19c0c221301a4b9b46809262d21a1a4 Various CSV format tests diff -r 64ef24ebb19c -r a92e94215863 data/fileio/CSVFormat.cpp --- a/data/fileio/CSVFormat.cpp Fri Sep 14 09:25:17 2018 +0100 +++ b/data/fileio/CSVFormat.cpp Fri Sep 14 14:47:46 2018 +0100 @@ -249,6 +249,7 @@ m_timeUnits = CSVFormat::TimeWindows; int timingColumnCount = 0; + bool haveDurationOrEndTime = false; SVDEBUG << "Estimated column qualities overall: "; for (int i = 0; i < m_columnCount; ++i) { @@ -310,6 +311,7 @@ if (timingColumnCount == 2 && m_timingType == ExplicitTiming) { purpose = ColumnEndTime; + haveDurationOrEndTime = true; } } } @@ -353,15 +355,17 @@ if (m_columnQualities[timecol] & ColumnIncreasing) { // This shouldn't happen; should have been settled above m_columnPurposes[timecol] = ColumnEndTime; + haveDurationOrEndTime = true; } else { m_columnPurposes[timecol] = ColumnDuration; + haveDurationOrEndTime = true; } --valueCount; } } } - if (timingColumnCount > 1) { + if (timingColumnCount > 1 || haveDurationOrEndTime) { m_modelType = TwoDimensionalModelWithDuration; } else { if (valueCount == 0) { diff -r 64ef24ebb19c -r a92e94215863 data/fileio/test/CSVFormatTest.h --- a/data/fileio/test/CSVFormatTest.h Fri Sep 14 09:25:17 2018 +0100 +++ b/data/fileio/test/CSVFormatTest.h Fri Sep 14 14:47:46 2018 +0100 @@ -125,6 +125,152 @@ CSVFormat::ColumnNearEmpty); QCOMPARE(q, expected); } + + void modelType1DSamples() { + CSVFormat f; + QVERIFY(f.guessFormatFor(csvDir.filePath("model-type-1d-samples.csv"))); + QCOMPARE(f.getColumnCount(), 1); + QCOMPARE(f.getColumnPurpose(0), CSVFormat::ColumnStartTime); + QCOMPARE(f.getTimingType(), CSVFormat::ExplicitTiming); + QCOMPARE(f.getTimeUnits(), CSVFormat::TimeAudioFrames); + QCOMPARE(f.getModelType(), CSVFormat::OneDimensionalModel); + } + + void modelType1DSeconds() { + CSVFormat f; + QVERIFY(f.guessFormatFor(csvDir.filePath("model-type-1d-seconds.csv"))); + QCOMPARE(f.getColumnCount(), 2); + QCOMPARE(f.getColumnPurpose(0), CSVFormat::ColumnStartTime); + QCOMPARE(f.getColumnPurpose(1), CSVFormat::ColumnLabel); + QCOMPARE(f.getTimingType(), CSVFormat::ExplicitTiming); + QCOMPARE(f.getTimeUnits(), CSVFormat::TimeSeconds); + QCOMPARE(f.getModelType(), CSVFormat::OneDimensionalModel); + } + + void modelType2DSamples() { + CSVFormat f; + QVERIFY(f.guessFormatFor(csvDir.filePath("model-type-2d-samples.csv"))); + QCOMPARE(f.getColumnCount(), 2); + QCOMPARE(f.getColumnPurpose(0), CSVFormat::ColumnStartTime); + QCOMPARE(f.getColumnPurpose(1), CSVFormat::ColumnValue); + QCOMPARE(f.getTimingType(), CSVFormat::ExplicitTiming); + QCOMPARE(f.getTimeUnits(), CSVFormat::TimeAudioFrames); + QCOMPARE(f.getModelType(), CSVFormat::TwoDimensionalModel); + } + + void modelType2DSeconds() { + CSVFormat f; + QVERIFY(f.guessFormatFor(csvDir.filePath("model-type-2d-seconds.csv"))); + QCOMPARE(f.getColumnCount(), 2); + QCOMPARE(f.getColumnPurpose(0), CSVFormat::ColumnStartTime); + QCOMPARE(f.getColumnPurpose(1), CSVFormat::ColumnValue); + QCOMPARE(f.getTimingType(), CSVFormat::ExplicitTiming); + QCOMPARE(f.getTimeUnits(), CSVFormat::TimeSeconds); + QCOMPARE(f.getModelType(), CSVFormat::TwoDimensionalModel); + } + + void modelType2DImplicit() { + CSVFormat f; + QVERIFY(f.guessFormatFor(csvDir.filePath("model-type-2d-implicit.csv"))); + QCOMPARE(f.getColumnCount(), 1); + QCOMPARE(f.getColumnPurpose(0), CSVFormat::ColumnValue); + QCOMPARE(f.getTimingType(), CSVFormat::ImplicitTiming); + } + + void modelType2DEndTimeSamples() { + CSVFormat f; + QVERIFY(f.guessFormatFor(csvDir.filePath("model-type-2d-endtime-samples.csv"))); + QCOMPARE(f.getColumnCount(), 3); + QCOMPARE(f.getColumnPurpose(0), CSVFormat::ColumnStartTime); + QCOMPARE(f.getColumnPurpose(1), CSVFormat::ColumnEndTime); + QCOMPARE(f.getColumnPurpose(2), CSVFormat::ColumnValue); + QCOMPARE(f.getTimingType(), CSVFormat::ExplicitTiming); + QCOMPARE(f.getTimeUnits(), CSVFormat::TimeAudioFrames); + QCOMPARE(f.getModelType(), CSVFormat::TwoDimensionalModelWithDuration); + } + + void modelType2DEndTimeSeconds() { + CSVFormat f; + QVERIFY(f.guessFormatFor(csvDir.filePath("model-type-2d-endtime-seconds.csv"))); + QCOMPARE(f.getColumnCount(), 3); + QCOMPARE(f.getColumnPurpose(0), CSVFormat::ColumnStartTime); + QCOMPARE(f.getColumnPurpose(1), CSVFormat::ColumnEndTime); + QCOMPARE(f.getColumnPurpose(2), CSVFormat::ColumnValue); + QCOMPARE(f.getTimingType(), CSVFormat::ExplicitTiming); + QCOMPARE(f.getTimeUnits(), CSVFormat::TimeSeconds); + QCOMPARE(f.getModelType(), CSVFormat::TwoDimensionalModelWithDuration); + } + + void modelType2DDurationSamples() { + CSVFormat f; + QVERIFY(f.guessFormatFor(csvDir.filePath("model-type-2d-duration-samples.csv"))); + QCOMPARE(f.getColumnCount(), 3); + QCOMPARE(f.getColumnPurpose(0), CSVFormat::ColumnStartTime); + QCOMPARE(f.getColumnPurpose(1), CSVFormat::ColumnDuration); + QCOMPARE(f.getColumnPurpose(2), CSVFormat::ColumnValue); + QCOMPARE(f.getTimingType(), CSVFormat::ExplicitTiming); + QCOMPARE(f.getTimeUnits(), CSVFormat::TimeAudioFrames); + QCOMPARE(f.getModelType(), CSVFormat::TwoDimensionalModelWithDuration); + } + + void modelType2DDurationSeconds() { + CSVFormat f; + QVERIFY(f.guessFormatFor(csvDir.filePath("model-type-2d-duration-seconds.csv"))); + QCOMPARE(f.getColumnCount(), 3); + QCOMPARE(f.getColumnPurpose(0), CSVFormat::ColumnStartTime); + QCOMPARE(f.getColumnPurpose(1), CSVFormat::ColumnDuration); + QCOMPARE(f.getColumnPurpose(2), CSVFormat::ColumnValue); + QCOMPARE(f.getTimingType(), CSVFormat::ExplicitTiming); + QCOMPARE(f.getTimeUnits(), CSVFormat::TimeSeconds); + QCOMPARE(f.getModelType(), CSVFormat::TwoDimensionalModelWithDuration); + } + + void modelType3DSamples() { + CSVFormat f; + QVERIFY(f.guessFormatFor(csvDir.filePath("model-type-3d-samples.csv"))); + QCOMPARE(f.getColumnCount(), 7); + QCOMPARE(f.getColumnPurpose(0), CSVFormat::ColumnStartTime); + QCOMPARE(f.getColumnPurpose(1), CSVFormat::ColumnValue); + QCOMPARE(f.getColumnPurpose(2), CSVFormat::ColumnValue); + QCOMPARE(f.getColumnPurpose(3), CSVFormat::ColumnValue); + QCOMPARE(f.getColumnPurpose(4), CSVFormat::ColumnValue); + QCOMPARE(f.getColumnPurpose(5), CSVFormat::ColumnValue); + QCOMPARE(f.getColumnPurpose(6), CSVFormat::ColumnValue); + QCOMPARE(f.getTimingType(), CSVFormat::ExplicitTiming); + QCOMPARE(f.getTimeUnits(), CSVFormat::TimeAudioFrames); + QCOMPARE(f.getModelType(), CSVFormat::ThreeDimensionalModel); + } + + void modelType3DSeconds() { + CSVFormat f; + QVERIFY(f.guessFormatFor(csvDir.filePath("model-type-3d-seconds.csv"))); + QCOMPARE(f.getColumnCount(), 7); + QCOMPARE(f.getColumnPurpose(0), CSVFormat::ColumnStartTime); + QCOMPARE(f.getColumnPurpose(1), CSVFormat::ColumnValue); + QCOMPARE(f.getColumnPurpose(2), CSVFormat::ColumnValue); + QCOMPARE(f.getColumnPurpose(3), CSVFormat::ColumnValue); + QCOMPARE(f.getColumnPurpose(4), CSVFormat::ColumnValue); + QCOMPARE(f.getColumnPurpose(5), CSVFormat::ColumnValue); + QCOMPARE(f.getColumnPurpose(6), CSVFormat::ColumnValue); + QCOMPARE(f.getTimingType(), CSVFormat::ExplicitTiming); + QCOMPARE(f.getTimeUnits(), CSVFormat::TimeSeconds); + QCOMPARE(f.getModelType(), CSVFormat::ThreeDimensionalModel); + } + + void modelType3DImplicit() { + CSVFormat f; + QVERIFY(f.guessFormatFor(csvDir.filePath("model-type-3d-implicit.csv"))); + QCOMPARE(f.getColumnCount(), 6); + QCOMPARE(f.getColumnPurpose(0), CSVFormat::ColumnValue); + QCOMPARE(f.getColumnPurpose(1), CSVFormat::ColumnValue); + QCOMPARE(f.getColumnPurpose(2), CSVFormat::ColumnValue); + QCOMPARE(f.getColumnPurpose(3), CSVFormat::ColumnValue); + QCOMPARE(f.getColumnPurpose(4), CSVFormat::ColumnValue); + QCOMPARE(f.getColumnPurpose(5), CSVFormat::ColumnValue); + QCOMPARE(f.getTimingType(), CSVFormat::ImplicitTiming); + QCOMPARE(f.getModelType(), CSVFormat::ThreeDimensionalModel); + } + }; #endif diff -r 64ef24ebb19c -r a92e94215863 data/fileio/test/csv/model-type-1d-samples.csv --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/data/fileio/test/csv/model-type-1d-samples.csv Fri Sep 14 14:47:46 2018 +0100 @@ -0,0 +1,5 @@ +45678 +123239 +320130 +452103 +620301 diff -r 64ef24ebb19c -r a92e94215863 data/fileio/test/csv/model-type-1d-seconds.csv --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/data/fileio/test/csv/model-type-1d-seconds.csv Fri Sep 14 14:47:46 2018 +0100 @@ -0,0 +1,5 @@ +3.2 First thing +4.4 Second thing +5.5 Third thing +6.3 Fourth thing +7.8 Fifth thing diff -r 64ef24ebb19c -r a92e94215863 data/fileio/test/csv/model-type-2d-duration-samples.csv --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/data/fileio/test/csv/model-type-2d-duration-samples.csv Fri Sep 14 14:47:46 2018 +0100 @@ -0,0 +1,9 @@ +# Here we see something that looks like time - value - value, but the +# time column is integral and so is exactly one of the value columns, +# so we deduce that that one is actually duration. We can only do this +# if the values are non-integral +45678,123,4 +123239,4214,4.2 +320130,12312,0.4 +452103,4123,3.8 +620301,987654,-2.3 diff -r 64ef24ebb19c -r a92e94215863 data/fileio/test/csv/model-type-2d-duration-seconds.csv --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/data/fileio/test/csv/model-type-2d-duration-seconds.csv Fri Sep 14 14:47:46 2018 +0100 @@ -0,0 +1,8 @@ +# There are only very limited circumstances in which we deduce that we +# have a time+duration 2d model with units of seconds - basically only +# when the values column is entirely integer values +1.1,4,620 +2.2,4.2,880 +3.3,0.4,440 +4.4,3.8,213 +5.5,-2.3,123 diff -r 64ef24ebb19c -r a92e94215863 data/fileio/test/csv/model-type-2d-endtime-samples.csv --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/data/fileio/test/csv/model-type-2d-endtime-samples.csv Fri Sep 14 14:47:46 2018 +0100 @@ -0,0 +1,5 @@ +45678,49000,4 +123239,330123,4.2 +320130,350000,0.4 +452103,540325,3.8 +620301,850000,-2.3 diff -r 64ef24ebb19c -r a92e94215863 data/fileio/test/csv/model-type-2d-endtime-seconds.csv --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/data/fileio/test/csv/model-type-2d-endtime-seconds.csv Fri Sep 14 14:47:46 2018 +0100 @@ -0,0 +1,5 @@ +1.1,1.4,4 +2.2,3.1,4.2 +3.3,4.5,0.4 +4.4,4.6,3.8 +5.5,5.51,-2.3 diff -r 64ef24ebb19c -r a92e94215863 data/fileio/test/csv/model-type-2d-implicit.csv --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/data/fileio/test/csv/model-type-2d-implicit.csv Fri Sep 14 14:47:46 2018 +0100 @@ -0,0 +1,5 @@ +4 +4.2 +0.4 +3.8 +-2.3 diff -r 64ef24ebb19c -r a92e94215863 data/fileio/test/csv/model-type-2d-samples.csv --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/data/fileio/test/csv/model-type-2d-samples.csv Fri Sep 14 14:47:46 2018 +0100 @@ -0,0 +1,5 @@ +45678,4 +123239,4.2 +320130,0.4 +452103,3.8 +620301,-2.3 diff -r 64ef24ebb19c -r a92e94215863 data/fileio/test/csv/model-type-2d-seconds.csv --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/data/fileio/test/csv/model-type-2d-seconds.csv Fri Sep 14 14:47:46 2018 +0100 @@ -0,0 +1,5 @@ +1.1,4 +2.2,4.2 +3.3,0.4 +4.4,3.8 +5.5,-2.3 diff -r 64ef24ebb19c -r a92e94215863 data/fileio/test/csv/model-type-3d-implicit.csv --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/data/fileio/test/csv/model-type-3d-implicit.csv Fri Sep 14 14:47:46 2018 +0100 @@ -0,0 +1,6 @@ +143.0,2.0,-1.3,0.0,0.0,1.0 +0.2,0.1,-3.0,0.0,0.1,0.143 +0.143,0.2,-3.1,0.0,0.0,0.1 +2.0,1.0,-0.3,0.0,1.0,143.0 +0.0,0.0,0.1,0.143,0.2,-3.1 +0.0,1.0,143.0,2.0,1.0,-0.3 diff -r 64ef24ebb19c -r a92e94215863 data/fileio/test/csv/model-type-3d-samples.csv --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/data/fileio/test/csv/model-type-3d-samples.csv Fri Sep 14 14:47:46 2018 +0100 @@ -0,0 +1,6 @@ +22050,143.0,2.0,-1.3,0.0,0.0,1.0 +44100,0.2,0.1,-3.0,0.0,0.1,0.143 +66150,0.143,0.2,-3.1,0.0,0.0,0.1 +88200,2.0,1.0,-0.3,0.0,1.0,143.0 +110250,0.0,0.0,0.1,0.143,0.2,-3.1 +132300,0.0,1.0,143.0,2.0,1.0,-0.3 diff -r 64ef24ebb19c -r a92e94215863 data/fileio/test/csv/model-type-3d-seconds.csv --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/data/fileio/test/csv/model-type-3d-seconds.csv Fri Sep 14 14:47:46 2018 +0100 @@ -0,0 +1,6 @@ +1.1,143.0,2.0,-1.3,0.0,0.0,1.0 +2.2,0.2,0.1,-3.0,0.0,0.1,0.143 +3.3,0.143,0.2,-3.1,0.0,0.0,0.1 +4.4,2.0,1.0,-0.3,0.0,1.0,143.0 +5.5,0.0,0.0,0.1,0.143,0.2,-3.1 +6.6,0.0,1.0,143.0,2.0,1.0,-0.3