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 <QObject>
Chris@879: #include <QtTest>
Chris@879: #include <QDir>
Chris@879: 
Chris@879: #include <iostream>
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@1429:         LinearRangeMapper rm(1, 8, 0.5, 4.0, "x", false);
Chris@1429:         QCOMPARE(rm.getUnit(), QString("x"));
Chris@1429:         QCOMPARE(rm.getPositionForValue(0.5), 1);
Chris@1429:         QCOMPARE(rm.getPositionForValue(4.0), 8);
Chris@1429:         QCOMPARE(rm.getPositionForValue(3.0), 6);
Chris@1429:         QCOMPARE(rm.getPositionForValue(3.1), 6);
Chris@1429:         QCOMPARE(rm.getPositionForValue(3.4), 7);
Chris@1429:         QCOMPARE(rm.getPositionForValue(0.2), 1);
Chris@1429:         QCOMPARE(rm.getPositionForValue(-12), 1);
Chris@1429:         QCOMPARE(rm.getPositionForValue(6.1), 8);
Chris@1429:         QCOMPARE(rm.getPositionForValueUnclamped(3.0), 6);
Chris@1429:         QCOMPARE(rm.getPositionForValueUnclamped(0.2), 0);
Chris@1429:         QCOMPARE(rm.getPositionForValueUnclamped(-12), -24);
Chris@1429:         QCOMPARE(rm.getPositionForValueUnclamped(6.1), 12);
Chris@879:     }
Chris@879: 
Chris@879:     void linearDownForward()
Chris@879:     {
Chris@1429:         LinearRangeMapper rm(1, 8, 0.5, 4.0, "x", true);
Chris@1429:         QCOMPARE(rm.getUnit(), QString("x"));
Chris@1429:         QCOMPARE(rm.getPositionForValue(0.5), 8);
Chris@1429:         QCOMPARE(rm.getPositionForValue(4.0), 1);
Chris@1429:         QCOMPARE(rm.getPositionForValue(3.0), 3);
Chris@1429:         QCOMPARE(rm.getPositionForValue(3.1), 3);
Chris@1429:         QCOMPARE(rm.getPositionForValue(3.4), 2);
Chris@1429:         QCOMPARE(rm.getPositionForValue(0.2), 8);
Chris@1429:         QCOMPARE(rm.getPositionForValue(-12), 8);
Chris@1429:         QCOMPARE(rm.getPositionForValue(6.1), 1);
Chris@1429:         QCOMPARE(rm.getPositionForValueUnclamped(3.0), 3);
Chris@1429:         QCOMPARE(rm.getPositionForValueUnclamped(0.2), 9);
Chris@1429:         QCOMPARE(rm.getPositionForValueUnclamped(-12), 33);
Chris@1429:         QCOMPARE(rm.getPositionForValueUnclamped(6.1), -3);
Chris@879:     }
Chris@879: 
Chris@879:     void linearUpBackward()
Chris@879:     {
Chris@1429:         LinearRangeMapper rm(1, 8, 0.5, 4.0, "x", false);
Chris@1429:         QCOMPARE(rm.getUnit(), QString("x"));
Chris@1429:         QCOMPARE(rm.getValueForPosition(1), 0.5);
Chris@1429:         QCOMPARE(rm.getValueForPosition(8), 4.0);
Chris@1429:         QCOMPARE(rm.getValueForPosition(6), 3.0);
Chris@1429:         QCOMPARE(rm.getValueForPosition(7), 3.5);
Chris@1429:         QCOMPARE(rm.getValueForPosition(0), rm.getValueForPosition(1));
Chris@1429:         QCOMPARE(rm.getValueForPosition(9), rm.getValueForPosition(8));
Chris@1429:         QCOMPARE(rm.getValueForPositionUnclamped(6), 3.0);
Chris@1429:         QCOMPARE(rm.getValueForPositionUnclamped(0) + 1.0, 0.0 + 1.0);
Chris@1429:         QCOMPARE(rm.getValueForPositionUnclamped(-24), -12.0);
Chris@1429:         QCOMPARE(rm.getValueForPositionUnclamped(12), 6.0);
Chris@879:     }
Chris@879: 
Chris@879:     void linearDownBackward()
Chris@879:     {
Chris@1429:         LinearRangeMapper rm(1, 8, 0.5, 4.0, "x", true);
Chris@1429:         QCOMPARE(rm.getUnit(), QString("x"));
Chris@1429:         QCOMPARE(rm.getValueForPosition(8), 0.5);
Chris@1429:         QCOMPARE(rm.getValueForPosition(1), 4.0);
Chris@1429:         QCOMPARE(rm.getValueForPosition(3), 3.0);
Chris@1429:         QCOMPARE(rm.getValueForPosition(2), 3.5);
Chris@1429:         QCOMPARE(rm.getValueForPosition(0), rm.getValueForPosition(1));
Chris@1429:         QCOMPARE(rm.getValueForPosition(9), rm.getValueForPosition(8));
Chris@1429:         QCOMPARE(rm.getValueForPositionUnclamped(3), 3.0);
Chris@1429:         QCOMPARE(rm.getValueForPositionUnclamped(9) + 1.0, 0.0 + 1.0);
Chris@1429:         QCOMPARE(rm.getValueForPositionUnclamped(33), -12.0);
Chris@1429:         QCOMPARE(rm.getValueForPositionUnclamped(-3), 6.0);
Chris@879:     }
Chris@879: 
Chris@879:     void logUpForward()
Chris@879:     {
Chris@1429:         LogRangeMapper rm(3, 7, 10, 100000, "x", false);
Chris@1429:         QCOMPARE(rm.getUnit(), QString("x"));
Chris@1429:         QCOMPARE(rm.getPositionForValue(10.0), 3);
Chris@1429:         QCOMPARE(rm.getPositionForValue(100000.0), 7);
Chris@1429:         QCOMPARE(rm.getPositionForValue(1.0), 3);
Chris@1429:         QCOMPARE(rm.getPositionForValue(1000000.0), 7);
Chris@1429:         QCOMPARE(rm.getPositionForValue(1000.0), 5);
Chris@1429:         QCOMPARE(rm.getPositionForValue(900.0), 5);
Chris@1429:         QCOMPARE(rm.getPositionForValue(20000), 6);
Chris@1429:         QCOMPARE(rm.getPositionForValueUnclamped(1.0), 2);
Chris@1429:         QCOMPARE(rm.getPositionForValueUnclamped(1000000.0), 8);
Chris@1429:         QCOMPARE(rm.getPositionForValueUnclamped(1000.0), 5);
Chris@879:     }
Chris@879: 
Chris@879:     void logDownForward()
Chris@879:     {
Chris@1429:         LogRangeMapper rm(3, 7, 10, 100000, "x", true);
Chris@1429:         QCOMPARE(rm.getUnit(), QString("x"));
Chris@1429:         QCOMPARE(rm.getPositionForValue(10.0), 7);
Chris@1429:         QCOMPARE(rm.getPositionForValue(100000.0), 3);
Chris@1429:         QCOMPARE(rm.getPositionForValue(1.0), 7);
Chris@1429:         QCOMPARE(rm.getPositionForValue(1000000.0), 3);
Chris@1429:         QCOMPARE(rm.getPositionForValue(1000.0), 5);
Chris@1429:         QCOMPARE(rm.getPositionForValue(900.0), 5);
Chris@1429:         QCOMPARE(rm.getPositionForValue(20000), 4);
Chris@1429:         QCOMPARE(rm.getPositionForValueUnclamped(1.0), 8);
Chris@1429:         QCOMPARE(rm.getPositionForValueUnclamped(1000000.0), 2);
Chris@1429:         QCOMPARE(rm.getPositionForValueUnclamped(1000.0), 5);
Chris@879:     }
Chris@879: 
Chris@879:     void logUpBackward()
Chris@879:     {
Chris@1429:         LogRangeMapper rm(3, 7, 10, 100000, "x", false);
Chris@1429:         QCOMPARE(rm.getUnit(), QString("x"));
Chris@1429:         QCOMPARE(rm.getValueForPosition(3), 10.0);
Chris@1429:         QCOMPARE(rm.getValueForPosition(7), 100000.0);
Chris@1429:         QCOMPARE(rm.getValueForPosition(5), 1000.0);
Chris@1429:         QCOMPARE(rm.getValueForPosition(6), 10000.0);
Chris@1429:         QCOMPARE(rm.getValueForPosition(0), rm.getValueForPosition(3));
Chris@1429:         QCOMPARE(rm.getValueForPosition(9), rm.getValueForPosition(7));
Chris@1429:         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@1429:         LogRangeMapper rm(3, 7, 10, 100000, "x", true);
Chris@1429:         QCOMPARE(rm.getUnit(), QString("x"));
Chris@1429:         QCOMPARE(rm.getValueForPosition(7), 10.0);
Chris@1429:         QCOMPARE(rm.getValueForPosition(3), 100000.0);
Chris@1429:         QCOMPARE(rm.getValueForPosition(5), 1000.0);
Chris@1429:         QCOMPARE(rm.getValueForPosition(4), 10000.0);
Chris@1429:         QCOMPARE(rm.getValueForPosition(0), rm.getValueForPosition(3));
Chris@1429:         QCOMPARE(rm.getValueForPosition(9), rm.getValueForPosition(7));
Chris@1429:         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@1429:         InterpolatingRangeMapper::CoordMap mappings;
Chris@1429:         mappings[1] = 10;
Chris@1429:         mappings[3] = 30;
Chris@1429:         mappings[5] = 70;
Chris@1429:         InterpolatingRangeMapper rm(mappings, "x");
Chris@1429:         QCOMPARE(rm.getUnit(), QString("x"));
Chris@1429:         QCOMPARE(rm.getPositionForValue(1.0), 10);
Chris@1429:         QCOMPARE(rm.getPositionForValue(0.0), 10);
Chris@1429:         QCOMPARE(rm.getPositionForValue(5.0), 70);
Chris@1429:         QCOMPARE(rm.getPositionForValue(6.0), 70);
Chris@1429:         QCOMPARE(rm.getPositionForValue(3.0), 30);
Chris@1429:         QCOMPARE(rm.getPositionForValue(2.5), 25);
Chris@1429:         QCOMPARE(rm.getPositionForValue(4.5), 60);
Chris@1429:         QCOMPARE(rm.getPositionForValueUnclamped(0.0), 0);
Chris@1429:         QCOMPARE(rm.getPositionForValueUnclamped(2.5), 25);
Chris@1429:         QCOMPARE(rm.getPositionForValueUnclamped(6.0), 90);
Chris@880:     }
Chris@880: 
Chris@880:     void interpolatingBackward()
Chris@880:     {
Chris@1429:         InterpolatingRangeMapper::CoordMap mappings;
Chris@1429:         mappings[1] = 10;
Chris@1429:         mappings[3] = 30;
Chris@1429:         mappings[5] = 70;
Chris@1429:         InterpolatingRangeMapper rm(mappings, "x");
Chris@1429:         QCOMPARE(rm.getUnit(), QString("x"));
Chris@1429:         QCOMPARE(rm.getValueForPosition(10), 1.0);
Chris@1429:         QCOMPARE(rm.getValueForPosition(9), 1.0);
Chris@1429:         QCOMPARE(rm.getValueForPosition(70), 5.0);
Chris@1429:         QCOMPARE(rm.getValueForPosition(80), 5.0);
Chris@1429:         QCOMPARE(rm.getValueForPosition(30), 3.0);
Chris@1429:         QCOMPARE(rm.getValueForPosition(25), 2.5);
Chris@1429:         QCOMPARE(rm.getValueForPosition(60), 4.5);
Chris@880:     }
Chris@880: 
Chris@880:     void autoLinearForward()
Chris@880:     {
Chris@1429:         AutoRangeMapper::CoordMap mappings;
Chris@1429:         mappings[0.5] = 1;
Chris@1429:         mappings[4.0] = 8;
Chris@1429:         AutoRangeMapper rm1(mappings, "x");
Chris@1429:         QCOMPARE(rm1.getUnit(), QString("x"));
Chris@1429:         QCOMPARE(rm1.getType(), AutoRangeMapper::StraightLine);
Chris@1429:         QCOMPARE(rm1.getPositionForValue(0.1), 1);
Chris@1429:         QCOMPARE(rm1.getPositionForValue(0.5), 1);
Chris@1429:         QCOMPARE(rm1.getPositionForValue(4.0), 8);
Chris@1429:         QCOMPARE(rm1.getPositionForValue(4.5), 8);
Chris@1429:         QCOMPARE(rm1.getPositionForValue(3.0), 6);
Chris@1429:         QCOMPARE(rm1.getPositionForValue(3.1), 6);
Chris@1429:         QCOMPARE(rm1.getPositionForValueUnclamped(0.1), 0);
Chris@1429:         QCOMPARE(rm1.getPositionForValueUnclamped(3.1), 6);
Chris@1429:         QCOMPARE(rm1.getPositionForValueUnclamped(4.5), 9);
Chris@1429:         mappings[3.0] = 6;
Chris@1429:         mappings[3.5] = 7;
Chris@1429:         AutoRangeMapper rm2(mappings, "x");
Chris@1429:         QCOMPARE(rm2.getUnit(), QString("x"));
Chris@1429:         QCOMPARE(rm2.getType(), AutoRangeMapper::StraightLine);
Chris@1429:         QCOMPARE(rm2.getPositionForValue(0.5), 1);
Chris@1429:         QCOMPARE(rm2.getPositionForValue(4.0), 8);
Chris@1429:         QCOMPARE(rm2.getPositionForValue(3.0), 6);
Chris@1429:         QCOMPARE(rm2.getPositionForValue(3.1), 6);
Chris@880:     }
Chris@880: 
Chris@880:     void autoLogForward()
Chris@880:     {
Chris@1429:         AutoRangeMapper::CoordMap mappings;
Chris@1429:         mappings[10] = 3;
Chris@1429:         mappings[1000] = 5;
Chris@1429:         mappings[100000] = 7;
Chris@1429:         AutoRangeMapper rm1(mappings, "x");
Chris@1429:         QCOMPARE(rm1.getUnit(), QString("x"));
Chris@1429:         QCOMPARE(rm1.getType(), AutoRangeMapper::Logarithmic);
Chris@1429:         QCOMPARE(rm1.getPositionForValue(10.0), 3);
Chris@1429:         QCOMPARE(rm1.getPositionForValue(100000.0), 7);
Chris@1429:         QCOMPARE(rm1.getPositionForValue(1.0), 3);
Chris@1429:         QCOMPARE(rm1.getPositionForValue(1000000.0), 7);
Chris@1429:         QCOMPARE(rm1.getPositionForValue(1000.0), 5);
Chris@1429:         QCOMPARE(rm1.getPositionForValue(900.0), 5);
Chris@1429:         QCOMPARE(rm1.getPositionForValue(20000), 6);
Chris@1429:         QCOMPARE(rm1.getPositionForValueUnclamped(1.0), 2);
Chris@1429:         QCOMPARE(rm1.getPositionForValueUnclamped(900.0), 5);
Chris@1429:         QCOMPARE(rm1.getPositionForValueUnclamped(1000000.0), 8);
Chris@1429:         mappings[100] = 4;
Chris@1429:         AutoRangeMapper rm2(mappings, "x");
Chris@1429:         QCOMPARE(rm2.getUnit(), QString("x"));
Chris@1429:         QCOMPARE(rm2.getType(), AutoRangeMapper::Logarithmic);
Chris@1429:         QCOMPARE(rm2.getPositionForValue(10.0), 3);
Chris@1429:         QCOMPARE(rm2.getPositionForValue(100000.0), 7);
Chris@1429:         QCOMPARE(rm2.getPositionForValue(1.0), 3);
Chris@1429:         QCOMPARE(rm2.getPositionForValue(1000000.0), 7);
Chris@1429:         QCOMPARE(rm2.getPositionForValue(1000.0), 5);
Chris@1429:         QCOMPARE(rm2.getPositionForValue(900.0), 5);
Chris@1429:         QCOMPARE(rm2.getPositionForValue(20000), 6);
Chris@880:     }
Chris@880: 
Chris@880:     void autoInterpolatingForward()
Chris@880:     {
Chris@1429:         AutoRangeMapper::CoordMap mappings;
Chris@1429:         mappings[1] = 10;
Chris@1429:         mappings[3] = 30;
Chris@1429:         mappings[5] = 70;
Chris@1429:         AutoRangeMapper rm(mappings, "x");
Chris@1429:         QCOMPARE(rm.getUnit(), QString("x"));
Chris@1429:         QCOMPARE(rm.getType(), AutoRangeMapper::Interpolating);
Chris@1429:         QCOMPARE(rm.getPositionForValue(1.0), 10);
Chris@1429:         QCOMPARE(rm.getPositionForValue(0.0), 10);
Chris@1429:         QCOMPARE(rm.getPositionForValue(5.0), 70);
Chris@1429:         QCOMPARE(rm.getPositionForValue(6.0), 70);
Chris@1429:         QCOMPARE(rm.getPositionForValue(3.0), 30);
Chris@1429:         QCOMPARE(rm.getPositionForValue(2.5), 25);
Chris@1429:         QCOMPARE(rm.getPositionForValue(4.5), 60);
Chris@1429:         QCOMPARE(rm.getPositionForValueUnclamped(0.0), 0);
Chris@1429:         QCOMPARE(rm.getPositionForValueUnclamped(5.0), 70);
Chris@1429:         QCOMPARE(rm.getPositionForValueUnclamped(6.0), 90);
Chris@880:     }
Chris@879: };
Chris@879: 
Chris@879: #endif
Chris@879: 
Chris@879: