Chris@879: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ Chris@879: Chris@879: /* Chris@879: Sonic Visualiser Chris@879: An audio file viewer and annotation editor. Chris@879: Centre for Digital Music, Queen Mary, University of London. Chris@879: Chris@879: This program is free software; you can redistribute it and/or Chris@879: modify it under the terms of the GNU General Public License as Chris@879: published by the Free Software Foundation; either version 2 of the Chris@879: License, or (at your option) any later version. See the file Chris@879: COPYING included with this distribution for more information. Chris@879: */ Chris@879: Chris@879: #ifndef TEST_RANGE_MAPPER_H Chris@879: #define TEST_RANGE_MAPPER_H Chris@879: Chris@879: #include "../RangeMapper.h" Chris@879: Chris@879: #include Chris@879: #include Chris@879: #include Chris@879: Chris@879: #include Chris@879: Chris@879: using namespace std; Chris@879: Chris@884: class TestRangeMapper : public QObject Chris@879: { Chris@879: Q_OBJECT Chris@879: Chris@879: private slots: Chris@879: void linearUpForward() Chris@879: { Chris@879: LinearRangeMapper rm(1, 8, 0.5, 4.0, "x", false); Chris@879: QCOMPARE(rm.getUnit(), QString("x")); Chris@879: QCOMPARE(rm.getPositionForValue(0.5), 1); Chris@879: QCOMPARE(rm.getPositionForValue(4.0), 8); Chris@879: QCOMPARE(rm.getPositionForValue(3.0), 6); Chris@879: QCOMPARE(rm.getPositionForValue(3.1), 6); Chris@879: QCOMPARE(rm.getPositionForValue(3.4), 7); Chris@879: QCOMPARE(rm.getPositionForValue(0.2), 1); Chris@879: QCOMPARE(rm.getPositionForValue(-12), 1); Chris@879: QCOMPARE(rm.getPositionForValue(6.1), 8); Chris@885: QCOMPARE(rm.getPositionForValueUnclamped(3.0), 6); Chris@885: QCOMPARE(rm.getPositionForValueUnclamped(0.2), 0); Chris@885: QCOMPARE(rm.getPositionForValueUnclamped(-12), -24); Chris@885: QCOMPARE(rm.getPositionForValueUnclamped(6.1), 12); Chris@879: } Chris@879: Chris@879: void linearDownForward() Chris@879: { Chris@879: LinearRangeMapper rm(1, 8, 0.5, 4.0, "x", true); Chris@879: QCOMPARE(rm.getUnit(), QString("x")); Chris@879: QCOMPARE(rm.getPositionForValue(0.5), 8); Chris@879: QCOMPARE(rm.getPositionForValue(4.0), 1); Chris@879: QCOMPARE(rm.getPositionForValue(3.0), 3); Chris@879: QCOMPARE(rm.getPositionForValue(3.1), 3); Chris@879: QCOMPARE(rm.getPositionForValue(3.4), 2); Chris@879: QCOMPARE(rm.getPositionForValue(0.2), 8); Chris@879: QCOMPARE(rm.getPositionForValue(-12), 8); Chris@879: QCOMPARE(rm.getPositionForValue(6.1), 1); Chris@885: QCOMPARE(rm.getPositionForValueUnclamped(3.0), 3); Chris@885: QCOMPARE(rm.getPositionForValueUnclamped(0.2), 9); Chris@885: QCOMPARE(rm.getPositionForValueUnclamped(-12), 33); Chris@885: QCOMPARE(rm.getPositionForValueUnclamped(6.1), -3); Chris@879: } Chris@879: Chris@879: void linearUpBackward() Chris@879: { Chris@879: LinearRangeMapper rm(1, 8, 0.5, 4.0, "x", false); Chris@879: QCOMPARE(rm.getUnit(), QString("x")); Chris@879: QCOMPARE(rm.getValueForPosition(1), 0.5); Chris@879: QCOMPARE(rm.getValueForPosition(8), 4.0); Chris@879: QCOMPARE(rm.getValueForPosition(6), 3.0); Chris@879: QCOMPARE(rm.getValueForPosition(7), 3.5); Chris@879: QCOMPARE(rm.getValueForPosition(0), rm.getValueForPosition(1)); Chris@879: QCOMPARE(rm.getValueForPosition(9), rm.getValueForPosition(8)); Chris@885: QCOMPARE(rm.getValueForPositionUnclamped(6), 3.0); Chris@885: QCOMPARE(rm.getValueForPositionUnclamped(0), 0.0); Chris@885: QCOMPARE(rm.getValueForPositionUnclamped(-24), -12.0); Chris@885: QCOMPARE(rm.getValueForPositionUnclamped(12), 6.0); Chris@879: } Chris@879: Chris@879: void linearDownBackward() Chris@879: { Chris@879: LinearRangeMapper rm(1, 8, 0.5, 4.0, "x", true); Chris@879: QCOMPARE(rm.getUnit(), QString("x")); Chris@879: QCOMPARE(rm.getValueForPosition(8), 0.5); Chris@879: QCOMPARE(rm.getValueForPosition(1), 4.0); Chris@879: QCOMPARE(rm.getValueForPosition(3), 3.0); Chris@879: QCOMPARE(rm.getValueForPosition(2), 3.5); Chris@879: QCOMPARE(rm.getValueForPosition(0), rm.getValueForPosition(1)); Chris@879: QCOMPARE(rm.getValueForPosition(9), rm.getValueForPosition(8)); Chris@885: QCOMPARE(rm.getValueForPositionUnclamped(3), 3.0); Chris@885: QCOMPARE(rm.getValueForPositionUnclamped(9), 0.0); Chris@885: QCOMPARE(rm.getValueForPositionUnclamped(33), -12.0); Chris@885: QCOMPARE(rm.getValueForPositionUnclamped(-3), 6.0); Chris@879: } Chris@879: Chris@879: void logUpForward() Chris@879: { Chris@879: LogRangeMapper rm(3, 7, 10, 100000, "x", false); Chris@879: QCOMPARE(rm.getUnit(), QString("x")); Chris@879: QCOMPARE(rm.getPositionForValue(10.0), 3); Chris@879: QCOMPARE(rm.getPositionForValue(100000.0), 7); Chris@879: QCOMPARE(rm.getPositionForValue(1.0), 3); Chris@879: QCOMPARE(rm.getPositionForValue(1000000.0), 7); Chris@879: QCOMPARE(rm.getPositionForValue(1000.0), 5); Chris@879: QCOMPARE(rm.getPositionForValue(900.0), 5); Chris@879: QCOMPARE(rm.getPositionForValue(20000), 6); Chris@885: QCOMPARE(rm.getPositionForValueUnclamped(1.0), 2); Chris@885: QCOMPARE(rm.getPositionForValueUnclamped(1000000.0), 8); Chris@885: QCOMPARE(rm.getPositionForValueUnclamped(1000.0), 5); Chris@879: } Chris@879: Chris@879: void logDownForward() Chris@879: { Chris@879: LogRangeMapper rm(3, 7, 10, 100000, "x", true); Chris@879: QCOMPARE(rm.getUnit(), QString("x")); Chris@879: QCOMPARE(rm.getPositionForValue(10.0), 7); Chris@879: QCOMPARE(rm.getPositionForValue(100000.0), 3); Chris@879: QCOMPARE(rm.getPositionForValue(1.0), 7); Chris@879: QCOMPARE(rm.getPositionForValue(1000000.0), 3); Chris@879: QCOMPARE(rm.getPositionForValue(1000.0), 5); Chris@879: QCOMPARE(rm.getPositionForValue(900.0), 5); Chris@879: QCOMPARE(rm.getPositionForValue(20000), 4); Chris@885: QCOMPARE(rm.getPositionForValueUnclamped(1.0), 8); Chris@885: QCOMPARE(rm.getPositionForValueUnclamped(1000000.0), 2); Chris@885: QCOMPARE(rm.getPositionForValueUnclamped(1000.0), 5); Chris@879: } Chris@879: Chris@879: void logUpBackward() Chris@879: { Chris@879: LogRangeMapper rm(3, 7, 10, 100000, "x", false); Chris@879: QCOMPARE(rm.getUnit(), QString("x")); Chris@879: QCOMPARE(rm.getValueForPosition(3), 10.0); Chris@879: QCOMPARE(rm.getValueForPosition(7), 100000.0); Chris@879: QCOMPARE(rm.getValueForPosition(5), 1000.0); Chris@879: QCOMPARE(rm.getValueForPosition(6), 10000.0); Chris@879: QCOMPARE(rm.getValueForPosition(0), rm.getValueForPosition(3)); Chris@879: QCOMPARE(rm.getValueForPosition(9), rm.getValueForPosition(7)); Chris@885: QCOMPARE(rm.getValueForPositionUnclamped(2), 1.0); Chris@885: QCOMPARE(rm.getValueForPositionUnclamped(8), 1000000.0); Chris@885: QCOMPARE(rm.getValueForPositionUnclamped(5), 1000.0); Chris@879: } Chris@879: Chris@879: void logDownBackward() Chris@879: { Chris@879: LogRangeMapper rm(3, 7, 10, 100000, "x", true); Chris@879: QCOMPARE(rm.getUnit(), QString("x")); Chris@879: QCOMPARE(rm.getValueForPosition(7), 10.0); Chris@879: QCOMPARE(rm.getValueForPosition(3), 100000.0); Chris@879: QCOMPARE(rm.getValueForPosition(5), 1000.0); Chris@879: QCOMPARE(rm.getValueForPosition(4), 10000.0); Chris@879: QCOMPARE(rm.getValueForPosition(0), rm.getValueForPosition(3)); Chris@879: QCOMPARE(rm.getValueForPosition(9), rm.getValueForPosition(7)); Chris@885: QCOMPARE(rm.getValueForPositionUnclamped(8), 1.0); Chris@885: QCOMPARE(rm.getValueForPositionUnclamped(2), 1000000.0); Chris@885: QCOMPARE(rm.getValueForPositionUnclamped(5), 1000.0); Chris@879: } Chris@880: Chris@880: void interpolatingForward() Chris@880: { Chris@880: InterpolatingRangeMapper::CoordMap mappings; Chris@880: mappings[1] = 10; Chris@880: mappings[3] = 30; Chris@880: mappings[5] = 70; Chris@880: InterpolatingRangeMapper rm(mappings, "x"); Chris@880: QCOMPARE(rm.getUnit(), QString("x")); Chris@880: QCOMPARE(rm.getPositionForValue(1.0), 10); Chris@880: QCOMPARE(rm.getPositionForValue(0.0), 10); Chris@880: QCOMPARE(rm.getPositionForValue(5.0), 70); Chris@880: QCOMPARE(rm.getPositionForValue(6.0), 70); Chris@880: QCOMPARE(rm.getPositionForValue(3.0), 30); Chris@880: QCOMPARE(rm.getPositionForValue(2.5), 25); Chris@880: QCOMPARE(rm.getPositionForValue(4.5), 60); Chris@885: QCOMPARE(rm.getPositionForValueUnclamped(0.0), 0); Chris@885: QCOMPARE(rm.getPositionForValueUnclamped(2.5), 25); Chris@885: QCOMPARE(rm.getPositionForValueUnclamped(6.0), 90); Chris@880: } Chris@880: Chris@880: void interpolatingBackward() Chris@880: { Chris@880: InterpolatingRangeMapper::CoordMap mappings; Chris@880: mappings[1] = 10; Chris@880: mappings[3] = 30; Chris@880: mappings[5] = 70; Chris@880: InterpolatingRangeMapper rm(mappings, "x"); Chris@880: QCOMPARE(rm.getUnit(), QString("x")); Chris@880: QCOMPARE(rm.getValueForPosition(10), 1.0); Chris@880: QCOMPARE(rm.getValueForPosition(9), 1.0); Chris@880: QCOMPARE(rm.getValueForPosition(70), 5.0); Chris@880: QCOMPARE(rm.getValueForPosition(80), 5.0); Chris@880: QCOMPARE(rm.getValueForPosition(30), 3.0); Chris@880: QCOMPARE(rm.getValueForPosition(25), 2.5); Chris@880: QCOMPARE(rm.getValueForPosition(60), 4.5); Chris@880: } Chris@880: Chris@880: void autoLinearForward() Chris@880: { Chris@880: AutoRangeMapper::CoordMap mappings; Chris@880: mappings[0.5] = 1; Chris@880: mappings[4.0] = 8; Chris@880: AutoRangeMapper rm1(mappings, "x"); Chris@880: QCOMPARE(rm1.getUnit(), QString("x")); Chris@880: QCOMPARE(rm1.getType(), AutoRangeMapper::StraightLine); Chris@885: QCOMPARE(rm1.getPositionForValue(0.1), 1); Chris@880: QCOMPARE(rm1.getPositionForValue(0.5), 1); Chris@880: QCOMPARE(rm1.getPositionForValue(4.0), 8); Chris@885: QCOMPARE(rm1.getPositionForValue(4.5), 8); Chris@880: QCOMPARE(rm1.getPositionForValue(3.0), 6); Chris@880: QCOMPARE(rm1.getPositionForValue(3.1), 6); Chris@885: QCOMPARE(rm1.getPositionForValueUnclamped(0.1), 0); Chris@885: QCOMPARE(rm1.getPositionForValueUnclamped(3.1), 6); Chris@885: QCOMPARE(rm1.getPositionForValueUnclamped(4.5), 9); Chris@880: mappings[3.0] = 6; Chris@880: mappings[3.5] = 7; Chris@880: AutoRangeMapper rm2(mappings, "x"); Chris@880: QCOMPARE(rm2.getUnit(), QString("x")); Chris@880: QCOMPARE(rm2.getType(), AutoRangeMapper::StraightLine); Chris@880: QCOMPARE(rm2.getPositionForValue(0.5), 1); Chris@880: QCOMPARE(rm2.getPositionForValue(4.0), 8); Chris@880: QCOMPARE(rm2.getPositionForValue(3.0), 6); Chris@880: QCOMPARE(rm2.getPositionForValue(3.1), 6); Chris@880: } Chris@880: Chris@880: void autoLogForward() Chris@880: { Chris@880: AutoRangeMapper::CoordMap mappings; Chris@880: mappings[10] = 3; Chris@880: mappings[1000] = 5; Chris@880: mappings[100000] = 7; Chris@880: AutoRangeMapper rm1(mappings, "x"); Chris@880: QCOMPARE(rm1.getUnit(), QString("x")); Chris@880: QCOMPARE(rm1.getType(), AutoRangeMapper::Logarithmic); Chris@880: QCOMPARE(rm1.getPositionForValue(10.0), 3); Chris@880: QCOMPARE(rm1.getPositionForValue(100000.0), 7); Chris@880: QCOMPARE(rm1.getPositionForValue(1.0), 3); Chris@880: QCOMPARE(rm1.getPositionForValue(1000000.0), 7); Chris@880: QCOMPARE(rm1.getPositionForValue(1000.0), 5); Chris@880: QCOMPARE(rm1.getPositionForValue(900.0), 5); Chris@880: QCOMPARE(rm1.getPositionForValue(20000), 6); Chris@885: QCOMPARE(rm1.getPositionForValueUnclamped(1.0), 2); Chris@885: QCOMPARE(rm1.getPositionForValueUnclamped(900.0), 5); Chris@885: QCOMPARE(rm1.getPositionForValueUnclamped(1000000.0), 8); Chris@880: mappings[100] = 4; Chris@880: AutoRangeMapper rm2(mappings, "x"); Chris@880: QCOMPARE(rm2.getUnit(), QString("x")); Chris@880: QCOMPARE(rm2.getType(), AutoRangeMapper::Logarithmic); Chris@880: QCOMPARE(rm2.getPositionForValue(10.0), 3); Chris@880: QCOMPARE(rm2.getPositionForValue(100000.0), 7); Chris@880: QCOMPARE(rm2.getPositionForValue(1.0), 3); Chris@880: QCOMPARE(rm2.getPositionForValue(1000000.0), 7); Chris@880: QCOMPARE(rm2.getPositionForValue(1000.0), 5); Chris@880: QCOMPARE(rm2.getPositionForValue(900.0), 5); Chris@880: QCOMPARE(rm2.getPositionForValue(20000), 6); Chris@880: } Chris@880: Chris@880: void autoInterpolatingForward() Chris@880: { Chris@880: AutoRangeMapper::CoordMap mappings; Chris@880: mappings[1] = 10; Chris@880: mappings[3] = 30; Chris@880: mappings[5] = 70; Chris@880: AutoRangeMapper rm(mappings, "x"); Chris@880: QCOMPARE(rm.getUnit(), QString("x")); Chris@880: QCOMPARE(rm.getType(), AutoRangeMapper::Interpolating); Chris@880: QCOMPARE(rm.getPositionForValue(1.0), 10); Chris@880: QCOMPARE(rm.getPositionForValue(0.0), 10); Chris@880: QCOMPARE(rm.getPositionForValue(5.0), 70); Chris@880: QCOMPARE(rm.getPositionForValue(6.0), 70); Chris@880: QCOMPARE(rm.getPositionForValue(3.0), 30); Chris@880: QCOMPARE(rm.getPositionForValue(2.5), 25); Chris@880: QCOMPARE(rm.getPositionForValue(4.5), 60); Chris@885: QCOMPARE(rm.getPositionForValueUnclamped(0.0), 0); Chris@885: QCOMPARE(rm.getPositionForValueUnclamped(5.0), 70); Chris@885: QCOMPARE(rm.getPositionForValueUnclamped(6.0), 90); Chris@880: } Chris@879: }; Chris@879: Chris@879: #endif Chris@879: Chris@879: