diff base/test/TestScaleTickIntervals.h @ 1407:25ed6dde2ce0 scale-ticks

Scale tick labeller, and tests (some failing so far)
author Chris Cannam
date Wed, 03 May 2017 13:02:08 +0100
parents
children f89365917d02
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/base/test/TestScaleTickIntervals.h	Wed May 03 13:02:08 2017 +0100
@@ -0,0 +1,142 @@
+/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*-  vi:set ts=8 sts=4 sw=4: */
+
+/*
+    Sonic Visualiser
+    An audio file viewer and annotation editor.
+    Centre for Digital Music, Queen Mary, University of London.
+    
+    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.  See the file
+    COPYING included with this distribution for more information.
+*/
+
+#ifndef TEST_SCALE_TICK_INTERVALS_H
+#define TEST_SCALE_TICK_INTERVALS_H
+
+#include "../ScaleTickIntervals.h"
+
+#include <QObject>
+#include <QtTest>
+#include <QDir>
+
+#include <iostream>
+
+using namespace std;
+
+class TestScaleTickIntervals : public QObject
+{
+    Q_OBJECT
+
+    void printDiff(vector<ScaleTickIntervals::Tick> ticks,
+		   vector<ScaleTickIntervals::Tick> expected) {
+
+	cerr << "Have " << ticks.size() << " ticks, expected "
+	     << expected.size() << endl;
+	for (int i = 0; i < int(expected.size()); ++i) {
+	    if (i < int(ticks.size())) {
+		cerr << i << ": have " << ticks[i].value << " \""
+		     << ticks[i].label << "\", expected "
+		     << expected[i].value << " \"" << expected[i].label
+		     << "\"" << endl;
+	    }
+	}
+    }
+    
+    void compareTicks(vector<ScaleTickIntervals::Tick> ticks,
+		      vector<ScaleTickIntervals::Tick> expected)
+    {
+	for (int i = 0; i < int(expected.size()); ++i) {
+	    if (i < int(ticks.size())) {
+		if (ticks[i].label != expected[i].label ||
+		    ticks[i].value != expected[i].value) {
+		    printDiff(ticks, expected);
+		}
+		QCOMPARE(ticks[i].label, expected[i].label);
+		QCOMPARE(ticks[i].value, expected[i].value);
+	    }
+	}
+	QCOMPARE(ticks.size(), expected.size());
+    }
+    
+private slots:
+    void linear_0_1_10()
+    {
+	auto ticks = ScaleTickIntervals::linear({ 0, 1, 10 });
+	vector<ScaleTickIntervals::Tick> expected {
+	    { 0.0, "0.00" },
+	    { 0.1, "0.10" },
+	    { 0.2, "0.20" },
+	    { 0.3, "0.30" },
+	    { 0.4, "0.40" },
+	    { 0.5, "0.50" },
+	    { 0.6, "0.60" },
+	    { 0.7, "0.70" },
+	    { 0.8, "0.80" },
+	    { 0.9, "0.90" },
+	    { 1.0, "1.00" }
+	};
+	compareTicks(ticks.ticks, expected);
+    }
+
+    void linear_0_0p1_5()
+    {
+	auto ticks = ScaleTickIntervals::linear({ 0, 0.1, 5 });
+	vector<ScaleTickIntervals::Tick> expected {
+	    { 0.0, "0.00" },
+	    { 0.02, "0.02" },
+	    { 0.04, "0.04" },
+	    { 0.06, "0.06" },
+	    { 0.08, "0.08" },
+	    { 0.1, "0.10" }
+	};
+	compareTicks(ticks.ticks, expected);
+    }
+
+    void linear_0_0p01_5()
+    {
+	auto ticks = ScaleTickIntervals::linear({ 0, 0.01, 5 });
+	vector<ScaleTickIntervals::Tick> expected {
+	    { 0.00, "0.000" },
+	    { 0.002, "0.002" },
+	    { 0.004, "0.004" },
+	    { 0.006, "0.006" },
+	    { 0.008, "0.008" },
+	    { 0.01, "0.010" }
+	};
+	compareTicks(ticks.ticks, expected);
+    }
+
+    void linear_0_0p001_5()
+    {
+	auto ticks = ScaleTickIntervals::linear({ 0, 0.001, 5 });
+	vector<ScaleTickIntervals::Tick> expected {
+	    { 0.000, "0.0e+00" },
+	    { 0.0002, "2.0e-04" },
+	    { 0.0004, "4.0e-04" },
+	    { 0.0006, "6.0e-04" },
+	    { 0.0008, "8.0e-04" },
+	    { 0.001, "1.0e-03" }
+	};
+	compareTicks(ticks.ticks, expected);
+    }
+    
+    void linear_1_1p001_5()
+    {
+	auto ticks = ScaleTickIntervals::linear({ 1, 1.001, 5 });
+	vector<ScaleTickIntervals::Tick> expected {
+	    { 1.000, "1.0000" },
+	    { 1.0002, "1.0002" },
+	    { 1.0004, "1.0004" },
+	    { 1.0006, "1.0006" },
+	    { 1.0008, "1.0008" },
+	    { 1.001, "1.0010" }
+	};
+	compareTicks(ticks.ticks, expected);
+    }
+};
+
+#endif
+
+