changeset 176:259ef0f4622b

Add a regression test, rejig Makefiles to use a common base
author Chris Cannam
date Mon, 02 Nov 2015 15:18:39 +0000
parents d22f69c2b025
children 6bfce96d87b4
files Makefile.inc Makefile.linux Makefile.mingw Makefile.osx nnls.c regression/expected-v0.2.1.csv regression/expected.csv regression/regression.sh
diffstat 8 files changed, 416 insertions(+), 82 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Makefile.inc	Mon Nov 02 15:18:39 2015 +0000
@@ -0,0 +1,30 @@
+
+PLUGIN_LIBRARY_NAME = nnls-chroma
+
+PLUGIN_CODE_OBJECTS = chromamethods.o NNLSBase.o NNLSChroma.o Chordino.o Tuning.o plugins.o nnls.o viterbi.o
+
+CFLAGS += $(ARCHFLAGS) $(OPTFLAGS) -I$(VAMP_SDK_DIR) -Wall -fPIC
+CXXFLAGS += $(ARCHFLAGS) $(OPTFLAGS) -I$(VAMP_SDK_DIR) -I$(BOOST_ROOT) -Wall -fPIC
+
+PLUGIN = $(PLUGIN_LIBRARY_NAME)$(PLUGIN_EXT)
+
+$(PLUGIN): $(PLUGIN_CODE_OBJECTS)
+	   $(CXX) -o $@ $^ $(LDFLAGS)
+
+nnls.o:	nnls.c		# not nnls.f
+
+test:	$(PLUGIN)
+	bash regression/regression.sh
+
+clean:
+	rm -f *.o
+
+# DO NOT DELETE
+
+Chordino.o: Chordino.h NNLSBase.h chromamethods.h nnls.h viterbi.h
+chromamethods.o: chromamethods.h nnls.h
+NNLSBase.o: NNLSBase.h chromamethods.h nnls.h
+NNLSChroma.o: NNLSChroma.h NNLSBase.h chromamethods.h nnls.h
+plugins.o: NNLSChroma.h NNLSBase.h Chordino.h Tuning.h
+Tuning.o: Tuning.h NNLSBase.h chromamethods.h nnls.h
+viterbi.o: viterbi.h
--- a/Makefile.linux	Mon Nov 02 12:35:13 2015 +0000
+++ b/Makefile.linux	Mon Nov 02 15:18:39 2015 +0000
@@ -1,34 +1,10 @@
-
-PLUGIN_LIBRARY_NAME = nnls-chroma
-
-PLUGIN_CODE_OBJECTS = chromamethods.o NNLSBase.o NNLSChroma.o Chordino.o Tuning.o plugins.o nnls.o viterbi.o
 
 VAMP_SDK_DIR = ../vamp-plugin-sdk
 
-ARCHFLAGS = -O3 -ftree-vectorize -ffast-math
-#ARCHFLAGS = -g
+OPTFLAGS     = -Wall -O3 -ftree-vectorize -ffast-math
+PLUGIN_EXT   = .so
 
-CFLAGS += $(ARCHFLAGS) -I$(VAMP_SDK_DIR) -Wall -fPIC
-CXXFLAGS += $(ARCHFLAGS) -I$(VAMP_SDK_DIR) -Wall -fPIC
-PLUGIN_EXT = .so
-PLUGIN = $(PLUGIN_LIBRARY_NAME)$(PLUGIN_EXT)
-LDFLAGS += -shared -Wl,-soname=$(PLUGIN) -L$(VAMP_SDK_DIR) -lvamp-sdk -Wl,--version-script=vamp-plugin.map 
+LDFLAGS      += -shared -Wl,-soname=$(PLUGIN) -L$(VAMP_SDK_DIR) -lvamp-sdk -Wl,--version-script=vamp-plugin.map 
 
+include Makefile.inc
 
-$(PLUGIN): $(PLUGIN_CODE_OBJECTS)
-	   $(CXX) -o $@ $^ $(LDFLAGS)
-
-nnls.o:	nnls.c		# not nnls.f
-
-clean:
-	rm -f *.o
-
-# DO NOT DELETE
-
-Chordino.o: Chordino.h NNLSBase.h chromamethods.h nnls.h viterbi.h
-chromamethods.o: chromamethods.h nnls.h
-NNLSBase.o: NNLSBase.h chromamethods.h nnls.h
-NNLSChroma.o: NNLSChroma.h NNLSBase.h chromamethods.h nnls.h
-plugins.o: NNLSChroma.h NNLSBase.h Chordino.h Tuning.h
-Tuning.o: Tuning.h NNLSBase.h chromamethods.h nnls.h
-viterbi.o: viterbi.h
--- a/Makefile.mingw	Mon Nov 02 12:35:13 2015 +0000
+++ b/Makefile.mingw	Mon Nov 02 15:18:39 2015 +0000
@@ -1,29 +1,18 @@
-
-PLUGIN_LIBRARY_NAME = nnls-chroma
-
-PLUGIN_CODE_OBJECTS = chromamethods.o NNLSBase.o NNLSChroma.o Chordino.o Tuning.o plugins.o nnls.o viterbi.o
 
 VAMP_SDK_DIR = ../vamp-plugin-sdk
+BOOST_ROOT   = ../boost_1_44_0
 
 # Allow the invoker to specify a particular set of tools through
 # TOOLPREFIX, e.g. for cross-compile
-CC=$(TOOLPREFIX)gcc
-CXX=$(TOOLPREFIX)g++
+CC	      = $(TOOLPREFIX)gcc
+CXX	      = $(TOOLPREFIX)g++
 
-OPTFLAGS = -O2 -ffast-math
-
-CFLAGS += $(OPTFLAGS) -I$(VAMP_SDK_DIR) -Wall 
-CXXFLAGS += $(OPTFLAGS) -I$(VAMP_SDK_DIR) -I../boost_1_44_0 -Wall
+ARCHFLAGS     ?=
+OPTFLAGS      ?= -O2 -ffast-math
 
 PLUGIN_EXT = .dll
-PLUGIN = $(PLUGIN_LIBRARY_NAME)$(PLUGIN_EXT)
 
 LDFLAGS += -shared -static -fno-exceptions -static-libgcc -Wl,-soname=$(PLUGIN) $(VAMP_SDK_DIR)/libvamp-sdk.a -Wl,--retain-symbols-file=vamp-plugin.list
 
+include Makefile.inc
 
-$(PLUGIN): $(PLUGIN_CODE_OBJECTS)
-	   $(CXX) -o $@ $^ $(LDFLAGS)
-
-clean:
-	$(RM) *.o
-
--- a/Makefile.osx	Mon Nov 02 12:35:13 2015 +0000
+++ b/Makefile.osx	Mon Nov 02 15:18:39 2015 +0000
@@ -1,44 +1,13 @@
-PLUGIN_LIBRARY_NAME = nnls-chroma
 
-# Edit this to list one .o file for each .cpp file in your plugin project
-#
-PLUGIN_CODE_OBJECTS = NNLSBase.o NNLSChroma.o Chordino.o Tuning.o plugins.o nnls.o chromamethods.o viterbi.o
+VAMP_SDK_DIR = ../vamp-plugin-sdk
 
-# Edit this to the location of the Vamp plugin SDK, relative to your
-# project directory
-#
-VAMP_SDK_DIR = ../vamp-plugin-sdk
 BOOST_ROOT = ../boost_1_48_0
 
+ARCHFLAGS ?= -mmacosx-version-min=10.7 -arch x86_64
+OPTFLAGS  ?= -O3 -ffast-math
+PLUGIN_EXT = .dylib
 
-##  Uncomment these for an OS/X native build using command-line tools:
-ARCHFLAGS ?= -isysroot /Developer/SDKs/MacOSX10.6.sdk -mmacosx-version-min=10.6 -arch i386
-CFLAGS += $(ARCHFLAGS) -Wall -fPIC -g -O3
-CXXFLAGS += $(CFLAGS) -I$(VAMP_SDK_DIR) -I$(BOOST_ROOT)
-PLUGIN_EXT = .dylib
-PLUGIN = $(PLUGIN_LIBRARY_NAME)$(PLUGIN_EXT)
 LDFLAGS += $(ARCHFLAGS) -dynamiclib -install_name $(PLUGIN) $(VAMP_SDK_DIR)/libvamp-sdk.a  -exported_symbols_list vamp-plugin.list -framework Accelerate
 
+include Makefile.inc
 
-$(PLUGIN): $(PLUGIN_CODE_OBJECTS)
-	   $(CXX) -o $@ $^ $(LDFLAGS)
-
-nnls.o:	nnls.c		# not nnls.f
-
-clean:
-	rm -f *.o
-
-# DO NOT DELETE
-
-nnls.o: nnls.h
-Chordino.o: Chordino.h NNLSBase.h chromamethods.h nnls.h
-chromamethods.o: chromamethods.h nnls.h 
-NNLSBase.o: NNLSBase.h chromamethods.h nnls.h
-NNLSChroma.o: NNLSChroma.h NNLSBase.h chromamethods.h nnls.h
-plugins.o: NNLSChroma.h NNLSBase.h Chordino.h Tuning.h
-Tuning.o: Tuning.h NNLSBase.h chromamethods.h nnls.h
-Chordino.o: NNLSBase.h
-chromamethods.o: nnls.h
-NNLSChroma.o: NNLSBase.h
-Tuning.o: NNLSBase.h
-viterbi.o: viterbi.h
--- a/nnls.c	Mon Nov 02 12:35:13 2015 +0000
+++ b/nnls.c	Mon Nov 02 15:18:39 2015 +0000
@@ -212,7 +212,7 @@
   float temp, wmax;
   int i__, j, l;
   float t, alpha, asave;
-  int itmax, izmax, nsetp;
+  int itmax, izmax = 0, nsetp;
   float unorm, ztest, cc;
   float dummy[2];
   int ii, jj, ip;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/regression/expected-v0.2.1.csv	Mon Nov 02 15:18:39 2015 +0000
@@ -0,0 +1,162 @@
+0.000000000,"N"
+0.046439909,"Ab"
+1.671836734,"Bm6"
+2.972154195,"Cm"
+4.411791383,"C#"
+7.523265306,"Cm"
+8.173424036,"D7"
+8.823582766,"Gaug"
+10.123900226,"Cm"
+11.006258503,"F7"
+11.377777777,"G"
+15.836009070,"D7/F#"
+17.229206349,"Cm7"
+19.504761904,"Fm7"
+20.619319727,"Ddim"
+20.944399092,"Cm"
+23.173514739,"Fm7"
+25.077551020,"Cm"
+26.563628117,"G"
+28.467664399,"Cm"
+29.442902494,"F7"
+29.814421768,"Gmaj7"
+31.997097505,"Eb6"
+33.901133786,"Fm7"
+36.037369614,"Cm7"
+37.894965986,"Fm7"
+39.752562358,"Cm"
+41.145759637,"G"
+42.956916099,"Cm"
+43.885714285,"F7"
+44.303673469,"G7"
+44.721632653,"D7"
+45.603990929,"G7"
+46.347029478,"Cm7"
+48.622585034,"Fm7"
+49.644263038,"D"
+49.922902494,"Cm"
+52.059138321,"Fm"
+53.730975056,"Cm"
+54.613333333,"F6"
+55.913650793,"G"
+57.121088435,"Cm"
+58.653605442,"G"
+61.068480725,"Cm7"
+62.926077097,"Fm7"
+63.994195011,"Ddim"
+64.412154195,"Eb"
+65.573151927,"Cmaj7"
+67.059229024,"Cdim"
+67.941587301,"Cm"
+69.938503401,"Gmaj7"
+71.981859410,"Cm"
+73.700136054,"D7"
+74.443174603,"Ebmaj7"
+74.954013605,"D7"
+75.418412698,"G"
+79.040725623,"C"
+80.944761904,"Dm"
+82.709478458,"Ebmaj7"
+84.381315192,"Gmaj7"
+86.331791383,"Abmaj7"
+88.421587301,"D7"
+90.139863945,"G7"
+93.855056689,"Cm"
+95.712653061,"Fm"
+97.523809523,"Cm"
+98.452607709,"D"
+98.777687074,"C7"
+99.288526077,"G"
+103.746757369,"Gm6"
+105.279274376,"Fm7"
+106.440272108,"Fm6"
+107.322630385,"Cmaj7"
+108.297868480,"Cm"
+108.808707482,"C#dim"
+109.644625850,"Ab"
+110.480544217,"G"
+112.338140589,"Fm7"
+113.917097505,"Cm"
+114.567256235,"Cmaj7"
+115.217414965,"C#"
+118.375328798,"Emaj7"
+119.025487528,"Gmaj7"
+120.279365079,"Cm"
+123.762358276,"Ab6"
+124.226757369,"G7"
+124.691156462,"Eb6"
+128.174149659,"Ab6"
+128.684988662,"G7"
+129.195827664,"Cm"
+132.632380952,"Ab6"
+133.236099773,"G7"
+133.793378684,"Ab6"
+134.350657596,"G7"
+134.722176870,"Eb6"
+136.394013605,"G7"
+141.595283446,"Bbm"
+142.616961451,"Cm7"
+144.846077097,"Fm"
+146.610793650,"Cm"
+148.375510204,"Fm7"
+150.372426303,"Cm"
+150.976145124,"Dm7"
+153.437460317,"Cm7"
+154.784217687,"F7"
+155.155736961,"G"
+156.827573696,"Cm"
+159.381768707,"Fm7"
+161.192925170,"Cm"
+163.236281179,"Ddim7/C"
+164.861678004,"Cm"
+166.626394557,"Gmaj7"
+168.344671201,"Cm"
+169.412789115,"F7"
+169.737868480,"Gaug"
+170.341587301,"D7"
+171.316825396,"Cmaj7"
+173.917460317,"Caug"
+175.078458049,"Fm6"
+175.542857142,"Cm"
+176.332335600,"C"
+177.354013605,"Fm"
+177.864852607,"Cmaj7"
+178.979410430,"Cm"
+180.140408163,"D7"
+180.976326530,"Gmaj7"
+182.415963718,"Cm"
+183.809160997,"G"
+186.038276643,"C"
+191.285986394,"Fm"
+193.143582766,"C"
+194.351020408,"Bb7/D"
+194.954739229,"G"
+196.673015873,"Cm"
+199.970249433,"F#dim7"
+200.388208616,"Fm7"
+202.245804988,"Cmaj7"
+202.803083900,"Cdim"
+203.964081632,"C#dim"
+204.521360544,"C#aug"
+204.800000000,"Ab"
+205.682358276,"G"
+207.586394557,"Fm7"
+208.933151927,"G7/B"
+209.397551020,"Cm"
+210.372789115,"C#"
+214.180861678,"Cm7"
+214.738140589,"Gm7"
+215.852698412,"Cm"
+219.335691609,"Ab/Eb"
+219.846530612,"G7"
+220.310929705,"Cm"
+223.840362811,"Ab6"
+224.304761904,"G7"
+224.815600907,"Cm"
+228.298594104,"Ab6"
+228.809433106,"G7"
+229.366712018,"Ab6"
+229.877551020,"G7"
+230.388390022,"Cm"
+236.889977324,"N"
+236.889977324,"N"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/regression/expected.csv	Mon Nov 02 15:18:39 2015 +0000
@@ -0,0 +1,161 @@
+0.000000000,"N"
+0.046439909,"Ab"
+1.671836734,"Bm6"
+2.972154195,"Cm"
+4.411791383,"C#"
+7.523265306,"Cm"
+8.173424036,"D7"
+8.823582766,"Gaug"
+10.123900226,"Cm"
+11.006258503,"F7"
+11.377777777,"G"
+15.836009070,"D7/F#"
+17.229206349,"Cm7"
+19.504761904,"Fm7"
+20.619319727,"Ddim"
+20.944399092,"Cm"
+23.173514739,"Fm7"
+25.077551020,"Cm"
+26.563628117,"G"
+28.467664399,"Cm"
+29.442902494,"F7"
+29.814421768,"Gmaj7"
+31.997097505,"Eb6"
+33.901133786,"Fm7"
+36.037369614,"Cm7"
+37.894965986,"Fm7"
+39.752562358,"Cm"
+41.145759637,"G"
+42.956916099,"Cm"
+43.885714285,"F7"
+44.303673469,"G7"
+44.721632653,"D7"
+45.603990929,"G7"
+46.347029478,"Cm7"
+48.622585034,"Fm7"
+49.644263038,"D"
+49.922902494,"Cm"
+52.059138321,"Fm"
+53.730975056,"Cm"
+54.613333333,"F6"
+55.913650793,"G"
+57.121088435,"Cm"
+58.653605442,"G"
+61.068480725,"Cm7"
+62.926077097,"Fm7"
+63.994195011,"Ddim"
+64.412154195,"Eb"
+65.573151927,"Cmaj7"
+67.059229024,"Cdim"
+67.941587301,"Cm"
+69.938503401,"Gmaj7"
+71.981859410,"Cm"
+73.700136054,"D7"
+74.443174603,"Ebmaj7"
+74.954013605,"D7"
+75.418412698,"G"
+79.040725623,"C"
+80.944761904,"Dm"
+82.709478458,"Ebmaj7"
+84.381315192,"Gmaj7"
+86.331791383,"Abmaj7"
+88.421587301,"D7"
+90.139863945,"G7"
+93.855056689,"Cm"
+95.712653061,"Fm"
+97.523809523,"Cm"
+98.452607709,"D"
+98.777687074,"C7"
+99.288526077,"G"
+103.746757369,"Gm6"
+105.279274376,"Fm7"
+106.440272108,"Fm6"
+107.322630385,"Cmaj7"
+108.297868480,"Cm"
+108.808707482,"C#dim"
+109.644625850,"Ab"
+110.480544217,"G"
+112.338140589,"Fm7"
+113.917097505,"Cm"
+114.567256235,"Cmaj7"
+115.217414965,"C#"
+118.375328798,"Emaj7"
+119.025487528,"Gmaj7"
+120.279365079,"Cm"
+123.762358276,"Ab6"
+124.226757369,"G7"
+124.691156462,"Eb6"
+128.174149659,"Ab6"
+128.684988662,"G7"
+129.195827664,"Cm"
+132.632380952,"Ab6"
+133.236099773,"G7"
+133.793378684,"Ab6"
+134.350657596,"G7"
+134.722176870,"Eb6"
+136.394013605,"G7"
+141.595283446,"Bbm"
+142.616961451,"Cm7"
+144.846077097,"Fm"
+146.610793650,"Cm"
+148.375510204,"Fm7"
+150.372426303,"Cm"
+150.976145124,"Dm7"
+153.437460317,"Cm7"
+154.784217687,"F7"
+155.155736961,"G"
+156.827573696,"Cm"
+159.381768707,"Fm7"
+161.192925170,"Cm"
+163.236281179,"Dm7b5/C"
+164.861678004,"Cm"
+166.626394557,"Gmaj7"
+168.344671201,"Cm"
+169.412789115,"F7"
+169.737868480,"Gaug"
+170.341587301,"D7"
+171.316825396,"Cmaj7"
+173.917460317,"Caug"
+175.078458049,"Fm6"
+175.542857142,"Cm"
+176.332335600,"C"
+177.354013605,"Fm"
+177.864852607,"Cmaj7"
+178.979410430,"Cm"
+180.140408163,"D7"
+180.976326530,"Gmaj7"
+182.415963718,"Cm"
+183.809160997,"G"
+186.038276643,"C"
+191.285986394,"Fm"
+193.143582766,"C"
+194.351020408,"Bb7/D"
+194.954739229,"G"
+196.673015873,"Cm"
+199.970249433,"F#m7b5"
+200.388208616,"Fm7"
+202.245804988,"Cmaj7"
+202.803083900,"Cdim"
+203.964081632,"C#dim"
+204.521360544,"C#aug"
+204.800000000,"Ab"
+205.682358276,"G"
+207.586394557,"Fm7"
+208.933151927,"G7/B"
+209.397551020,"Cm"
+210.372789115,"C#"
+214.180861678,"Cm7"
+214.738140589,"Gm7"
+215.852698412,"Cm"
+219.335691609,"Ab/Eb"
+219.846530612,"G7"
+220.310929705,"Cm"
+223.840362811,"Ab6"
+224.304761904,"G7"
+224.815600907,"Cm"
+228.298594104,"Ab6"
+228.809433106,"G7"
+229.366712018,"Ab6"
+229.877551020,"G7"
+230.388390022,"Cm"
+236.889977324,"N"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/regression/regression.sh	Mon Nov 02 15:18:39 2015 +0000
@@ -0,0 +1,47 @@
+#!/bin/bash
+
+set -eu
+
+mydir=$(dirname "$0")
+
+source_url=https://code.soundsoftware.ac.uk/attachments/download/1696/Zweieck-Duell.mp3
+
+testfile="$mydir/input.mp3"
+outfile="$mydir/output.csv"
+expfile="$mydir/expected.csv"
+
+if sonic-annotator -v >/dev/null ; then
+    :
+else
+    echo "Failed to find required binary sonic-annotator"
+    exit 1
+fi
+
+if wget --version >/dev/null ; then
+    wget -O "$testfile" "$source_url"
+else
+    curl -o "$testfile" "$source_url"
+fi
+
+VAMP_PATH="$mydir/.." \
+	 sonic-annotator \
+	 -d vamp:nnls-chroma:chordino:simplechord \
+	 -w csv \
+	 --csv-omit-filename \
+	 --csv-one-file "$outfile" \
+	 --csv-force \
+	 "$testfile"
+
+if cmp "$outfile" "$expfile" ; then
+    echo 
+    echo PASS
+    exit 0
+else
+    echo
+    echo "*** FAIL: Result does not match expected output. Diff follows:"
+    echo
+    diff "$outfile" "$expfile"
+    exit 1
+fi
+
+