CMSIS-DSP:Added tests for arm_linear_interp f32, q31, q15 and q7.
diff --git a/CMSIS/DSP/Testing/CMakeLists.txt b/CMSIS/DSP/Testing/CMakeLists.txt
index e0285b0..40b1453 100644
--- a/CMSIS/DSP/Testing/CMakeLists.txt
+++ b/CMSIS/DSP/Testing/CMakeLists.txt
@@ -194,6 +194,10 @@
   Source/Tests/BIQUADQ15.cpp
   Source/Tests/Pooling.cpp
   Source/Tests/Softmax.cpp
+  Source/Tests/InterpolationTestsF32.cpp
+  Source/Tests/InterpolationTestsQ31.cpp
+  Source/Tests/InterpolationTestsQ15.cpp
+  Source/Tests/InterpolationTestsQ7.cpp
   Source/Tests/NNSupport.cpp
   Source/Tests/ExampleCategoryF32.cpp
   Source/Tests/ExampleCategoryQ31.cpp
diff --git a/CMSIS/DSP/Testing/Include/Tests/InterpolationTestsF32.h b/CMSIS/DSP/Testing/Include/Tests/InterpolationTestsF32.h
new file mode 100755
index 0000000..535782f
--- /dev/null
+++ b/CMSIS/DSP/Testing/Include/Tests/InterpolationTestsF32.h
@@ -0,0 +1,19 @@
+#include "Test.h"
+#include "Pattern.h"
+class InterpolationTestsF32:public Client::Suite
+    {
+        public:
+            InterpolationTestsF32(Testing::testID_t id);
+            virtual void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
+            virtual void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+        private:
+            #include "InterpolationTestsF32_decl.h"
+            
+            Client::Pattern<float32_t> input;
+            Client::Pattern<float32_t> y;
+            Client::LocalPattern<float32_t> output;
+            // Reference patterns are not loaded when we are in dump mode
+            Client::RefPattern<float32_t> ref;
+
+            arm_linear_interp_instance_f32 S;
+    };
diff --git a/CMSIS/DSP/Testing/Include/Tests/InterpolationTestsQ15.h b/CMSIS/DSP/Testing/Include/Tests/InterpolationTestsQ15.h
new file mode 100755
index 0000000..5fd0036
--- /dev/null
+++ b/CMSIS/DSP/Testing/Include/Tests/InterpolationTestsQ15.h
@@ -0,0 +1,18 @@
+#include "Test.h"
+#include "Pattern.h"
+class InterpolationTestsQ15:public Client::Suite
+    {
+        public:
+            InterpolationTestsQ15(Testing::testID_t id);
+            virtual void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
+            virtual void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+        private:
+            #include "InterpolationTestsQ15_decl.h"
+            
+            Client::Pattern<q31_t> input;
+            Client::Pattern<q15_t> y;
+            Client::LocalPattern<q15_t> output;
+            // Reference patterns are not loaded when we are in dump mode
+            Client::RefPattern<q15_t> ref;
+
+    };
diff --git a/CMSIS/DSP/Testing/Include/Tests/InterpolationTestsQ31.h b/CMSIS/DSP/Testing/Include/Tests/InterpolationTestsQ31.h
new file mode 100755
index 0000000..96a376f
--- /dev/null
+++ b/CMSIS/DSP/Testing/Include/Tests/InterpolationTestsQ31.h
@@ -0,0 +1,18 @@
+#include "Test.h"
+#include "Pattern.h"
+class InterpolationTestsQ31:public Client::Suite
+    {
+        public:
+            InterpolationTestsQ31(Testing::testID_t id);
+            virtual void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
+            virtual void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+        private:
+            #include "InterpolationTestsQ31_decl.h"
+            
+            Client::Pattern<q31_t> input;
+            Client::Pattern<q31_t> y;
+            Client::LocalPattern<q31_t> output;
+            // Reference patterns are not loaded when we are in dump mode
+            Client::RefPattern<q31_t> ref;
+
+    };
diff --git a/CMSIS/DSP/Testing/Include/Tests/InterpolationTestsQ7.h b/CMSIS/DSP/Testing/Include/Tests/InterpolationTestsQ7.h
new file mode 100755
index 0000000..e2dee59
--- /dev/null
+++ b/CMSIS/DSP/Testing/Include/Tests/InterpolationTestsQ7.h
@@ -0,0 +1,18 @@
+#include "Test.h"
+#include "Pattern.h"
+class InterpolationTestsQ7:public Client::Suite
+    {
+        public:
+            InterpolationTestsQ7(Testing::testID_t id);
+            virtual void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
+            virtual void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+        private:
+            #include "InterpolationTestsQ7_decl.h"
+            
+            Client::Pattern<q31_t> input;
+            Client::Pattern<q7_t> y;
+            Client::LocalPattern<q7_t> output;
+            // Reference patterns are not loaded when we are in dump mode
+            Client::RefPattern<q7_t> ref;
+
+    };
diff --git a/CMSIS/DSP/Testing/PatternGeneration/GenAll.py b/CMSIS/DSP/Testing/PatternGeneration/GenAll.py
index ecdd3bc..c26ff7b 100755
--- a/CMSIS/DSP/Testing/PatternGeneration/GenAll.py
+++ b/CMSIS/DSP/Testing/PatternGeneration/GenAll.py
@@ -25,6 +25,7 @@
 Distance.generatePatterns()
 FastMath.generatePatterns()
 FIR.generatePatterns()
+Interpolate.generatePatterns()
 Matrix.generatePatterns()
 Softmax.generatePatterns()
 Stats.generatePatterns()
diff --git a/CMSIS/DSP/Testing/PatternGeneration/Interpolate.py b/CMSIS/DSP/Testing/PatternGeneration/Interpolate.py
new file mode 100755
index 0000000..ba6e873
--- /dev/null
+++ b/CMSIS/DSP/Testing/PatternGeneration/Interpolate.py
@@ -0,0 +1,53 @@
+import os.path
+import numpy as np
+import itertools
+import Tools
+from scipy.interpolate import interp1d
+
+# Those patterns are used for tests and benchmarks.
+# For tests, there is the need to add tests for saturation
+
+
+def writeTests(config,format):
+    NBSAMPLES=40
+
+    x = np.linspace(0, NBSAMPLES, num=NBSAMPLES+1, endpoint=True)
+    y = np.cos(-x**2/(NBSAMPLES - 1))
+    f = interp1d(x, y)
+    data=x+0.5
+    data=data[:-1]
+    z = f(data)
+
+    if format != 0:
+       data = data / 2.0**11
+    if format != 0:
+       config.writeInputQ31(1, data,"Input")
+    else:
+       config.writeInput(1, data)
+    config.writeInput(1, y,"YVals")
+    
+    ref = z
+    config.writeReference(1, ref)
+    
+ 
+
+
+
+
+def generatePatterns():
+    PATTERNDIR = os.path.join("Patterns","DSP","Interpolation","Interpolation")
+    PARAMDIR = os.path.join("Parameters","DSP","Interpolation","Interpolation")
+    
+    configf32=Tools.Config(PATTERNDIR,PARAMDIR,"f32")
+    configq31=Tools.Config(PATTERNDIR,PARAMDIR,"q31")
+    configq15=Tools.Config(PATTERNDIR,PARAMDIR,"q15")
+    configq7=Tools.Config(PATTERNDIR,PARAMDIR,"q7")
+    
+    writeTests(configf32,0)
+    writeTests(configq31,31)
+    writeTests(configq15,15)
+    writeTests(configq7,7)
+
+
+if __name__ == '__main__':
+  generatePatterns()
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/Interpolation/InterpolationF32/Input1_f32.txt b/CMSIS/DSP/Testing/Patterns/DSP/Interpolation/InterpolationF32/Input1_f32.txt
new file mode 100755
index 0000000..f18898b
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/Interpolation/InterpolationF32/Input1_f32.txt
@@ -0,0 +1,82 @@
+W
+40
+// 0.500000
+0x3f000000
+// 1.500000
+0x3fc00000
+// 2.500000
+0x40200000
+// 3.500000
+0x40600000
+// 4.500000
+0x40900000
+// 5.500000
+0x40b00000
+// 6.500000
+0x40d00000
+// 7.500000
+0x40f00000
+// 8.500000
+0x41080000
+// 9.500000
+0x41180000
+// 10.500000
+0x41280000
+// 11.500000
+0x41380000
+// 12.500000
+0x41480000
+// 13.500000
+0x41580000
+// 14.500000
+0x41680000
+// 15.500000
+0x41780000
+// 16.500000
+0x41840000
+// 17.500000
+0x418c0000
+// 18.500000
+0x41940000
+// 19.500000
+0x419c0000
+// 20.500000
+0x41a40000
+// 21.500000
+0x41ac0000
+// 22.500000
+0x41b40000
+// 23.500000
+0x41bc0000
+// 24.500000
+0x41c40000
+// 25.500000
+0x41cc0000
+// 26.500000
+0x41d40000
+// 27.500000
+0x41dc0000
+// 28.500000
+0x41e40000
+// 29.500000
+0x41ec0000
+// 30.500000
+0x41f40000
+// 31.500000
+0x41fc0000
+// 32.500000
+0x42020000
+// 33.500000
+0x42060000
+// 34.500000
+0x420a0000
+// 35.500000
+0x420e0000
+// 36.500000
+0x42120000
+// 37.500000
+0x42160000
+// 38.500000
+0x421a0000
+// 39.500000
+0x421e0000
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/Interpolation/InterpolationF32/Reference1_f32.txt b/CMSIS/DSP/Testing/Patterns/DSP/Interpolation/InterpolationF32/Reference1_f32.txt
new file mode 100755
index 0000000..e0f98ec
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/Interpolation/InterpolationF32/Reference1_f32.txt
@@ -0,0 +1,82 @@
+W
+40
+// 0.999836
+0x3f7ff53b
+// 0.997208
+0x3f7f4908
+// 0.984118
+0x3f7bef25
+// 0.945255
+0x3f71fc36
+// 0.859251
+0x3f5bf7db
+// 0.702426
+0x3f33d232
+// 0.456301
+0x3ee9a049
+// 0.119531
+0x3df4cc6e
+// -0.277482
+0xbe8e122d
+// -0.661314
+0xbf294be6
+// -0.918537
+0xbf6b253e
+// -0.925695
+0xbf6cfa51
+// -0.611097
+0xbf1c70d9
+// -0.030945
+0xbcfd7f9a
+// 0.589481
+0x3f16e834
+// 0.915804
+0x3f6a7228
+// 0.695054
+0x3f31ef13
+// -0.004498
+0xbb9367b4
+// -0.712082
+0xbf364afd
+// -0.829765
+0xbf546b7a
+// -0.183298
+0xbe3bb262
+// 0.647457
+0x3f25bfbd
+// 0.765024
+0x3f43d8a0
+// -0.024301
+0xbcc71299
+// -0.770387
+0xbf453819
+// -0.447708
+0xbee53a07
+// 0.521104
+0x3f056717
+// 0.650064
+0x3f266a9a
+// -0.298863
+0xbe9904a3
+// -0.688210
+0xbf302e8f
+// 0.207648
+0x3e54a1be
+// 0.656951
+0x3f282dea
+// -0.253282
+0xbe81ae2d
+// -0.570816
+0xbf1220fa
+// 0.398647
+0x3ecc1b6e
+// 0.379176
+0x3ec2236a
+// -0.548368
+0xbf0c61d1
+// -0.036721
+0xbd1668f6
+// 0.524152
+0x3f062ed8
+// -0.358152
+0xbeb75fc4
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/Interpolation/InterpolationF32/YVals1_f32.txt b/CMSIS/DSP/Testing/Patterns/DSP/Interpolation/InterpolationF32/YVals1_f32.txt
new file mode 100755
index 0000000..d72a580
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/Interpolation/InterpolationF32/YVals1_f32.txt
@@ -0,0 +1,84 @@
+W
+41
+// 1.000000
+0x3f800000
+// 0.999671
+0x3f7fea75
+// 0.994745
+0x3f7ea79a
+// 0.973491
+0x3f7936b0
+// 0.917019
+0x3f6ac1bb
+// 0.801483
+0x3f4d2dfb
+// 0.603369
+0x3f1a7669
+// 0.309233
+0x3e9e53bf
+// -0.070172
+0xbd8fb620
+// -0.484793
+0xbef836d2
+// -0.837836
+0xbf567c63
+// -0.999238
+0xbf7fce18
+// -0.852151
+0xbf5a268a
+// -0.370043
+0xbebd7651
+// 0.308154
+0x3e9dc65e
+// 0.870807
+0x3f5eed38
+// 0.960802
+0x3f75f717
+// 0.429307
+0x3edbce1d
+// -0.438304
+0xbee0695b
+// -0.985860
+0xbf7c614c
+// -0.673670
+0xbf2c75a9
+// 0.307075
+0x3e9d38f0
+// 0.987839
+0x3f7ce303
+// 0.542209
+0x3f0ace3c
+// -0.590811
+0xbf173f66
+// -0.949963
+0xbf7330cc
+// 0.054547
+0x3d5f6c50
+// 0.987662
+0x3f7cd76a
+// 0.312466
+0x3e9ffb93
+// -0.910193
+0xbf69026c
+// -0.466228
+0xbeeeb565
+// 0.881524
+0x3f61ab91
+// 0.432377
+0x3edd6086
+// -0.938941
+0xbf705e6f
+// -0.202690
+0xbe4f8e12
+// 0.999984
+0x3f7ffef2
+// -0.241631
+0xbe776e22
+// -0.855104
+0xbf5ae819
+// 0.781662
+0x3f481afa
+// 0.266643
+0x3e88856c
+// -0.982948
+0xbf7ba27a
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/Interpolation/InterpolationQ15/Input1_q31.txt b/CMSIS/DSP/Testing/Patterns/DSP/Interpolation/InterpolationQ15/Input1_q31.txt
new file mode 100755
index 0000000..0ab532f
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/Interpolation/InterpolationQ15/Input1_q31.txt
@@ -0,0 +1,82 @@
+W
+40
+// 0.000244
+0x00080000
+// 0.000732
+0x00180000
+// 0.001221
+0x00280000
+// 0.001709
+0x00380000
+// 0.002197
+0x00480000
+// 0.002686
+0x00580000
+// 0.003174
+0x00680000
+// 0.003662
+0x00780000
+// 0.004150
+0x00880000
+// 0.004639
+0x00980000
+// 0.005127
+0x00A80000
+// 0.005615
+0x00B80000
+// 0.006104
+0x00C80000
+// 0.006592
+0x00D80000
+// 0.007080
+0x00E80000
+// 0.007568
+0x00F80000
+// 0.008057
+0x01080000
+// 0.008545
+0x01180000
+// 0.009033
+0x01280000
+// 0.009521
+0x01380000
+// 0.010010
+0x01480000
+// 0.010498
+0x01580000
+// 0.010986
+0x01680000
+// 0.011475
+0x01780000
+// 0.011963
+0x01880000
+// 0.012451
+0x01980000
+// 0.012939
+0x01A80000
+// 0.013428
+0x01B80000
+// 0.013916
+0x01C80000
+// 0.014404
+0x01D80000
+// 0.014893
+0x01E80000
+// 0.015381
+0x01F80000
+// 0.015869
+0x02080000
+// 0.016357
+0x02180000
+// 0.016846
+0x02280000
+// 0.017334
+0x02380000
+// 0.017822
+0x02480000
+// 0.018311
+0x02580000
+// 0.018799
+0x02680000
+// 0.019287
+0x02780000
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/Interpolation/InterpolationQ15/Reference1_q15.txt b/CMSIS/DSP/Testing/Patterns/DSP/Interpolation/InterpolationQ15/Reference1_q15.txt
new file mode 100755
index 0000000..991ee8b
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/Interpolation/InterpolationQ15/Reference1_q15.txt
@@ -0,0 +1,82 @@
+H
+40
+// 0.999836
+0x7FFB
+// 0.997208
+0x7FA5
+// 0.984118
+0x7DF8
+// 0.945255
+0x78FE
+// 0.859251
+0x6DFC
+// 0.702426
+0x59E9
+// 0.456301
+0x3A68
+// 0.119531
+0x0F4D
+// -0.277482
+0xDC7B
+// -0.661314
+0xAB5A
+// -0.918537
+0x8A6D
+// -0.925695
+0x8983
+// -0.611097
+0xB1C8
+// -0.030945
+0xFC0A
+// 0.589481
+0x4B74
+// 0.915804
+0x7539
+// 0.695054
+0x58F8
+// -0.004498
+0xFF6D
+// -0.712082
+0xA4DB
+// -0.829765
+0x95CA
+// -0.183298
+0xE88A
+// 0.647457
+0x52E0
+// 0.765024
+0x61EC
+// -0.024301
+0xFCE4
+// -0.770387
+0x9D64
+// -0.447708
+0xC6B1
+// 0.521104
+0x42B4
+// 0.650064
+0x5335
+// -0.298863
+0xD9BF
+// -0.688210
+0xA7E9
+// 0.207648
+0x1A94
+// 0.656951
+0x5417
+// -0.253282
+0xDF94
+// -0.570816
+0xB6F0
+// 0.398647
+0x3307
+// 0.379176
+0x3089
+// -0.548368
+0xB9CF
+// -0.036721
+0xFB4D
+// 0.524152
+0x4317
+// -0.358152
+0xD228
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/Interpolation/InterpolationQ15/YVals1_q15.txt b/CMSIS/DSP/Testing/Patterns/DSP/Interpolation/InterpolationQ15/YVals1_q15.txt
new file mode 100755
index 0000000..daa3a02
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/Interpolation/InterpolationQ15/YVals1_q15.txt
@@ -0,0 +1,84 @@
+H
+41
+// 1.000000
+0x7FFF
+// 0.999671
+0x7FF5
+// 0.994745
+0x7F54
+// 0.973491
+0x7C9B
+// 0.917019
+0x7561
+// 0.801483
+0x6697
+// 0.603369
+0x4D3B
+// 0.309233
+0x2795
+// -0.070172
+0xF705
+// -0.484793
+0xC1F2
+// -0.837836
+0x94C2
+// -0.999238
+0x8019
+// -0.852151
+0x92ED
+// -0.370043
+0xD0A2
+// 0.308154
+0x2772
+// 0.870807
+0x6F77
+// 0.960802
+0x7AFC
+// 0.429307
+0x36F4
+// -0.438304
+0xC7E6
+// -0.985860
+0x81CF
+// -0.673670
+0xA9C5
+// 0.307075
+0x274E
+// 0.987839
+0x7E72
+// 0.542209
+0x4567
+// -0.590811
+0xB460
+// -0.949963
+0x8668
+// 0.054547
+0x06FB
+// 0.987662
+0x7E6C
+// 0.312466
+0x27FF
+// -0.910193
+0x8B7F
+// -0.466228
+0xC453
+// 0.881524
+0x70D6
+// 0.432377
+0x3758
+// -0.938941
+0x87D1
+// -0.202690
+0xE60E
+// 0.999984
+0x7FFF
+// -0.241631
+0xE112
+// -0.855104
+0x928C
+// 0.781662
+0x640D
+// 0.266643
+0x2221
+// -0.982948
+0x822F
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/Interpolation/InterpolationQ31/Input1_q31.txt b/CMSIS/DSP/Testing/Patterns/DSP/Interpolation/InterpolationQ31/Input1_q31.txt
new file mode 100755
index 0000000..0ab532f
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/Interpolation/InterpolationQ31/Input1_q31.txt
@@ -0,0 +1,82 @@
+W
+40
+// 0.000244
+0x00080000
+// 0.000732
+0x00180000
+// 0.001221
+0x00280000
+// 0.001709
+0x00380000
+// 0.002197
+0x00480000
+// 0.002686
+0x00580000
+// 0.003174
+0x00680000
+// 0.003662
+0x00780000
+// 0.004150
+0x00880000
+// 0.004639
+0x00980000
+// 0.005127
+0x00A80000
+// 0.005615
+0x00B80000
+// 0.006104
+0x00C80000
+// 0.006592
+0x00D80000
+// 0.007080
+0x00E80000
+// 0.007568
+0x00F80000
+// 0.008057
+0x01080000
+// 0.008545
+0x01180000
+// 0.009033
+0x01280000
+// 0.009521
+0x01380000
+// 0.010010
+0x01480000
+// 0.010498
+0x01580000
+// 0.010986
+0x01680000
+// 0.011475
+0x01780000
+// 0.011963
+0x01880000
+// 0.012451
+0x01980000
+// 0.012939
+0x01A80000
+// 0.013428
+0x01B80000
+// 0.013916
+0x01C80000
+// 0.014404
+0x01D80000
+// 0.014893
+0x01E80000
+// 0.015381
+0x01F80000
+// 0.015869
+0x02080000
+// 0.016357
+0x02180000
+// 0.016846
+0x02280000
+// 0.017334
+0x02380000
+// 0.017822
+0x02480000
+// 0.018311
+0x02580000
+// 0.018799
+0x02680000
+// 0.019287
+0x02780000
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/Interpolation/InterpolationQ31/Reference1_q31.txt b/CMSIS/DSP/Testing/Patterns/DSP/Interpolation/InterpolationQ31/Reference1_q31.txt
new file mode 100755
index 0000000..503602f
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/Interpolation/InterpolationQ31/Reference1_q31.txt
@@ -0,0 +1,82 @@
+W
+40
+// 0.999836
+0x7FFA9D47
+// 0.997208
+0x7FA483D7
+// 0.984118
+0x7DF792AA
+// 0.945255
+0x78FE1AD3
+// 0.859251
+0x6DFBED5A
+// 0.702426
+0x59E918D9
+// 0.456301
+0x3A681221
+// 0.119531
+0x0F4CC6E6
+// -0.277482
+0xDC7B74C7
+// -0.661314
+0xAB5A0CFB
+// -0.918537
+0x8A6D613A
+// -0.925695
+0x8982D786
+// -0.611097
+0xB1C79353
+// -0.030945
+0xFC0A0199
+// 0.589481
+0x4B7419C6
+// 0.915804
+0x753913C6
+// 0.695054
+0x58F7896E
+// -0.004498
+0xFF6C984C
+// -0.712082
+0xA4DA81BA
+// -0.829765
+0x95CA42E6
+// -0.183298
+0xE889B3C1
+// 0.647457
+0x52DFDEA1
+// 0.765024
+0x61EC4FCA
+// -0.024301
+0xFCE3B59E
+// -0.770387
+0x9D63F365
+// -0.447708
+0xC6B17E22
+// 0.521104
+0x42B38BB9
+// 0.650064
+0x53354CCE
+// -0.298863
+0xD9BED74A
+// -0.688210
+0xA7E8B864
+// 0.207648
+0x1A9437BE
+// 0.656951
+0x5416F502
+// -0.253282
+0xDF9474DD
+// -0.570816
+0xB6EF8307
+// 0.398647
+0x3306DB70
+// 0.379176
+0x3088DA74
+// -0.548368
+0xB9CF17B9
+// -0.036721
+0xFB4CB84E
+// 0.524152
+0x43176BFA
+// -0.358152
+0xD2280F1C
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/Interpolation/InterpolationQ31/YVals1_q31.txt b/CMSIS/DSP/Testing/Patterns/DSP/Interpolation/InterpolationQ31/YVals1_q31.txt
new file mode 100755
index 0000000..5dcb39f
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/Interpolation/InterpolationQ31/YVals1_q31.txt
@@ -0,0 +1,84 @@
+W
+41
+// 1.000000
+0x7FFFFFFF
+// 0.999671
+0x7FF53A8E
+// 0.994745
+0x7F53CD1F
+// 0.973491
+0x7C9B5835
+// 0.917019
+0x7560DD71
+// 0.801483
+0x6696FD43
+// 0.603369
+0x4D3B346F
+// 0.309233
+0x2794EFD3
+// -0.070172
+0xF7049DF8
+// -0.484793
+0xC1F24B95
+// -0.837836
+0x94C1CE62
+// -0.999238
+0x8018F412
+// -0.852151
+0x92ECBAF9
+// -0.370043
+0xD0A26BAC
+// 0.308154
+0x27719787
+// 0.870807
+0x6F769C05
+// 0.960802
+0x7AFB8B87
+// 0.429307
+0x36F38755
+// -0.438304
+0xC7E5A942
+// -0.985860
+0x81CF5A32
+// -0.673670
+0xA9C52B9A
+// 0.307075
+0x274E3BE8
+// 0.987839
+0x7E71815B
+// 0.542209
+0x45671E38
+// -0.590811
+0xB4604D03
+// -0.949963
+0x866799C7
+// 0.054547
+0x06FB627E
+// 0.987662
+0x7E6BB4F4
+// 0.312466
+0x27FEE4A7
+// -0.910193
+0x8B7EC9ED
+// -0.466228
+0xC452A6DC
+// 0.881524
+0x70D5C8A0
+// 0.432377
+0x37582165
+// -0.938941
+0x87D0C855
+// -0.202690
+0xE60E3DB9
+// 0.999984
+0x7FFF7927
+// -0.241631
+0xE1123BC0
+// -0.855104
+0x928BF3B1
+// 0.781662
+0x640D7CEB
+// 0.266643
+0x22215B09
+// -0.982948
+0x822EC32F
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/Interpolation/InterpolationQ7/Input1_q31.txt b/CMSIS/DSP/Testing/Patterns/DSP/Interpolation/InterpolationQ7/Input1_q31.txt
new file mode 100755
index 0000000..0ab532f
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/Interpolation/InterpolationQ7/Input1_q31.txt
@@ -0,0 +1,82 @@
+W
+40
+// 0.000244
+0x00080000
+// 0.000732
+0x00180000
+// 0.001221
+0x00280000
+// 0.001709
+0x00380000
+// 0.002197
+0x00480000
+// 0.002686
+0x00580000
+// 0.003174
+0x00680000
+// 0.003662
+0x00780000
+// 0.004150
+0x00880000
+// 0.004639
+0x00980000
+// 0.005127
+0x00A80000
+// 0.005615
+0x00B80000
+// 0.006104
+0x00C80000
+// 0.006592
+0x00D80000
+// 0.007080
+0x00E80000
+// 0.007568
+0x00F80000
+// 0.008057
+0x01080000
+// 0.008545
+0x01180000
+// 0.009033
+0x01280000
+// 0.009521
+0x01380000
+// 0.010010
+0x01480000
+// 0.010498
+0x01580000
+// 0.010986
+0x01680000
+// 0.011475
+0x01780000
+// 0.011963
+0x01880000
+// 0.012451
+0x01980000
+// 0.012939
+0x01A80000
+// 0.013428
+0x01B80000
+// 0.013916
+0x01C80000
+// 0.014404
+0x01D80000
+// 0.014893
+0x01E80000
+// 0.015381
+0x01F80000
+// 0.015869
+0x02080000
+// 0.016357
+0x02180000
+// 0.016846
+0x02280000
+// 0.017334
+0x02380000
+// 0.017822
+0x02480000
+// 0.018311
+0x02580000
+// 0.018799
+0x02680000
+// 0.019287
+0x02780000
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/Interpolation/InterpolationQ7/Reference1_q7.txt b/CMSIS/DSP/Testing/Patterns/DSP/Interpolation/InterpolationQ7/Reference1_q7.txt
new file mode 100755
index 0000000..036d961
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/Interpolation/InterpolationQ7/Reference1_q7.txt
@@ -0,0 +1,82 @@
+B
+40
+// 0.999836
+0x7F
+// 0.997208
+0x7F
+// 0.984118
+0x7E
+// 0.945255
+0x79
+// 0.859251
+0x6E
+// 0.702426
+0x5A
+// 0.456301
+0x3A
+// 0.119531
+0x0F
+// -0.277482
+0xDC
+// -0.661314
+0xAB
+// -0.918537
+0x8A
+// -0.925695
+0x8A
+// -0.611097
+0xB2
+// -0.030945
+0xFC
+// 0.589481
+0x4B
+// 0.915804
+0x75
+// 0.695054
+0x59
+// -0.004498
+0xFF
+// -0.712082
+0xA5
+// -0.829765
+0x96
+// -0.183298
+0xE9
+// 0.647457
+0x53
+// 0.765024
+0x62
+// -0.024301
+0xFD
+// -0.770387
+0x9D
+// -0.447708
+0xC7
+// 0.521104
+0x43
+// 0.650064
+0x53
+// -0.298863
+0xDA
+// -0.688210
+0xA8
+// 0.207648
+0x1B
+// 0.656951
+0x54
+// -0.253282
+0xE0
+// -0.570816
+0xB7
+// 0.398647
+0x33
+// 0.379176
+0x31
+// -0.548368
+0xBA
+// -0.036721
+0xFB
+// 0.524152
+0x43
+// -0.358152
+0xD2
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/Interpolation/InterpolationQ7/YVals1_q7.txt b/CMSIS/DSP/Testing/Patterns/DSP/Interpolation/InterpolationQ7/YVals1_q7.txt
new file mode 100755
index 0000000..50b12dd
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/Interpolation/InterpolationQ7/YVals1_q7.txt
@@ -0,0 +1,84 @@
+B
+41
+// 1.000000
+0x7F
+// 0.999671
+0x7F
+// 0.994745
+0x7F
+// 0.973491
+0x7D
+// 0.917019
+0x75
+// 0.801483
+0x67
+// 0.603369
+0x4D
+// 0.309233
+0x28
+// -0.070172
+0xF7
+// -0.484793
+0xC2
+// -0.837836
+0x95
+// -0.999238
+0x80
+// -0.852151
+0x93
+// -0.370043
+0xD1
+// 0.308154
+0x27
+// 0.870807
+0x6F
+// 0.960802
+0x7B
+// 0.429307
+0x37
+// -0.438304
+0xC8
+// -0.985860
+0x82
+// -0.673670
+0xAA
+// 0.307075
+0x27
+// 0.987839
+0x7E
+// 0.542209
+0x45
+// -0.590811
+0xB4
+// -0.949963
+0x86
+// 0.054547
+0x07
+// 0.987662
+0x7E
+// 0.312466
+0x28
+// -0.910193
+0x8B
+// -0.466228
+0xC4
+// 0.881524
+0x71
+// 0.432377
+0x37
+// -0.938941
+0x88
+// -0.202690
+0xE6
+// 0.999984
+0x7F
+// -0.241631
+0xE1
+// -0.855104
+0x93
+// 0.781662
+0x64
+// 0.266643
+0x22
+// -0.982948
+0x82
diff --git a/CMSIS/DSP/Testing/Source/Tests/InterpolationTestsF32.cpp b/CMSIS/DSP/Testing/Source/Tests/InterpolationTestsF32.cpp
new file mode 100755
index 0000000..8cfa0c0
--- /dev/null
+++ b/CMSIS/DSP/Testing/Source/Tests/InterpolationTestsF32.cpp
@@ -0,0 +1,69 @@
+#include "InterpolationTestsF32.h"
+#include <stdio.h>
+#include "Error.h"
+
+#define SNR_THRESHOLD 120
+
+/* 
+
+Reference patterns are generated with
+a double precision computation.
+
+*/
+#define REL_ERROR (8.0e-6)
+
+
+
+    void InterpolationTestsF32::test_linear_interp_f32()
+    {
+       const float32_t *inp = input.ptr();
+       float32_t *outp = output.ptr();
+
+       int nb;
+       for(nb = 0; nb < input.nbSamples(); nb++)
+       {
+          outp[nb] = arm_linear_interp_f32(&S,inp[nb]);
+       }
+
+       ASSERT_EMPTY_TAIL(output);
+
+       ASSERT_SNR(output,ref,(float32_t)SNR_THRESHOLD);
+
+       ASSERT_REL_ERROR(output,ref,REL_ERROR);
+
+    } 
+
+ 
+    void InterpolationTestsF32::setUp(Testing::testID_t id,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr)
+    {
+      
+       Testing::nbSamples_t nb=MAX_NB_SAMPLES; 
+
+       
+       switch(id)
+       {
+        case InterpolationTestsF32::TEST_LINEAR_INTERP_F32_1:
+          input.reload(InterpolationTestsF32::INPUT_F32_ID,mgr,nb);
+          y.reload(InterpolationTestsF32::YVAL_F32_ID,mgr,nb);
+          ref.reload(InterpolationTestsF32::REF_LINEAR_F32_ID,mgr,nb);
+
+           
+          S.nValues=y.nbSamples();           /**< nValues */
+          /* Those values must be coherent with the ones in the 
+          Python script generating the patterns */
+          S.x1=0.0;               /**< x1 */
+          S.xSpacing=1.0;         /**< xSpacing */
+          S.pYData=y.ptr();          /**< pointer to the table of Y values */
+          break;
+
+       }
+      
+
+
+       output.create(ref.nbSamples(),InterpolationTestsF32::OUT_SAMPLES_F32_ID,mgr);
+    }
+
+    void InterpolationTestsF32::tearDown(Testing::testID_t id,Client::PatternMgr *mgr)
+    {
+        output.dump(mgr);
+    }
diff --git a/CMSIS/DSP/Testing/Source/Tests/InterpolationTestsQ15.cpp b/CMSIS/DSP/Testing/Source/Tests/InterpolationTestsQ15.cpp
new file mode 100755
index 0000000..ce1c9e2
--- /dev/null
+++ b/CMSIS/DSP/Testing/Source/Tests/InterpolationTestsQ15.cpp
@@ -0,0 +1,62 @@
+#include "InterpolationTestsQ15.h"
+#include <stdio.h>
+#include "Error.h"
+
+#define SNR_THRESHOLD 70
+
+/* 
+
+Reference patterns are generated with
+a double precision computation.
+
+*/
+#define ABS_ERROR_Q15 ((q15_t)2)
+
+
+
+    void InterpolationTestsQ15::test_linear_interp_q15()
+    {
+       const q31_t *inp = input.ptr();
+       q15_t *outp = output.ptr();
+
+       int nb;
+       for(nb = 0; nb < input.nbSamples(); nb++)
+       {
+          outp[nb] = arm_linear_interp_q15(y.ptr(),inp[nb],y.nbSamples());
+       }
+
+       ASSERT_EMPTY_TAIL(output);
+
+       ASSERT_SNR(output,ref,(float32_t)SNR_THRESHOLD);
+
+       ASSERT_NEAR_EQ(output,ref,ABS_ERROR_Q15);
+
+    } 
+
+ 
+    void InterpolationTestsQ15::setUp(Testing::testID_t id,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr)
+    {
+      
+       Testing::nbSamples_t nb=MAX_NB_SAMPLES; 
+
+       
+       switch(id)
+       {
+        case InterpolationTestsQ15::TEST_LINEAR_INTERP_Q15_1:
+          input.reload(InterpolationTestsQ15::INPUT_Q31_ID,mgr,nb);
+          y.reload(InterpolationTestsQ15::YVAL_Q15_ID,mgr,nb);
+          ref.reload(InterpolationTestsQ15::REF_LINEAR_Q15_ID,mgr,nb);
+
+          break;
+
+       }
+      
+
+
+       output.create(ref.nbSamples(),InterpolationTestsQ15::OUT_SAMPLES_Q15_ID,mgr);
+    }
+
+    void InterpolationTestsQ15::tearDown(Testing::testID_t id,Client::PatternMgr *mgr)
+    {
+        output.dump(mgr);
+    }
diff --git a/CMSIS/DSP/Testing/Source/Tests/InterpolationTestsQ31.cpp b/CMSIS/DSP/Testing/Source/Tests/InterpolationTestsQ31.cpp
new file mode 100755
index 0000000..b80e495
--- /dev/null
+++ b/CMSIS/DSP/Testing/Source/Tests/InterpolationTestsQ31.cpp
@@ -0,0 +1,62 @@
+#include "InterpolationTestsQ31.h"
+#include <stdio.h>
+#include "Error.h"
+
+#define SNR_THRESHOLD 100
+
+/* 
+
+Reference patterns are generated with
+a double precision computation.
+
+*/
+#define ABS_ERROR_Q31 ((q31_t)5)
+
+
+
+    void InterpolationTestsQ31::test_linear_interp_q31()
+    {
+       const q31_t *inp = input.ptr();
+       q31_t *outp = output.ptr();
+
+       int nb;
+       for(nb = 0; nb < input.nbSamples(); nb++)
+       {
+          outp[nb] = arm_linear_interp_q31(y.ptr(),inp[nb],y.nbSamples());
+       }
+
+       ASSERT_EMPTY_TAIL(output);
+
+       ASSERT_SNR(output,ref,(float32_t)SNR_THRESHOLD);
+
+       ASSERT_NEAR_EQ(output,ref,ABS_ERROR_Q31);
+
+    } 
+
+ 
+    void InterpolationTestsQ31::setUp(Testing::testID_t id,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr)
+    {
+      
+       Testing::nbSamples_t nb=MAX_NB_SAMPLES; 
+
+       
+       switch(id)
+       {
+        case InterpolationTestsQ31::TEST_LINEAR_INTERP_Q31_1:
+          input.reload(InterpolationTestsQ31::INPUT_Q31_ID,mgr,nb);
+          y.reload(InterpolationTestsQ31::YVAL_Q31_ID,mgr,nb);
+          ref.reload(InterpolationTestsQ31::REF_LINEAR_Q31_ID,mgr,nb);
+
+          break;
+
+       }
+      
+
+
+       output.create(ref.nbSamples(),InterpolationTestsQ31::OUT_SAMPLES_Q31_ID,mgr);
+    }
+
+    void InterpolationTestsQ31::tearDown(Testing::testID_t id,Client::PatternMgr *mgr)
+    {
+        output.dump(mgr);
+    }
diff --git a/CMSIS/DSP/Testing/Source/Tests/InterpolationTestsQ7.cpp b/CMSIS/DSP/Testing/Source/Tests/InterpolationTestsQ7.cpp
new file mode 100755
index 0000000..c8502ac
--- /dev/null
+++ b/CMSIS/DSP/Testing/Source/Tests/InterpolationTestsQ7.cpp
@@ -0,0 +1,62 @@
+#include "InterpolationTestsQ7.h"
+#include <stdio.h>
+#include "Error.h"
+
+#define SNR_THRESHOLD 20
+
+/* 
+
+Reference patterns are generated with
+a double precision computation.
+
+*/
+#define ABS_ERROR_Q7 ((q7_t)2)
+
+
+
+    void InterpolationTestsQ7::test_linear_interp_q7()
+    {
+       const q31_t *inp = input.ptr();
+       q7_t *outp = output.ptr();
+
+       int nb;
+       for(nb = 0; nb < input.nbSamples(); nb++)
+       {
+          outp[nb] = arm_linear_interp_q7(y.ptr(),inp[nb],y.nbSamples());
+       }
+
+       ASSERT_EMPTY_TAIL(output);
+
+       ASSERT_SNR(output,ref,(float32_t)SNR_THRESHOLD);
+
+       ASSERT_NEAR_EQ(output,ref,ABS_ERROR_Q7);
+
+    } 
+
+ 
+    void InterpolationTestsQ7::setUp(Testing::testID_t id,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr)
+    {
+      
+       Testing::nbSamples_t nb=MAX_NB_SAMPLES; 
+
+       
+       switch(id)
+       {
+        case InterpolationTestsQ7::TEST_LINEAR_INTERP_Q7_1:
+          input.reload(InterpolationTestsQ7::INPUT_Q31_ID,mgr,nb);
+          y.reload(InterpolationTestsQ7::YVAL_Q7_ID,mgr,nb);
+          ref.reload(InterpolationTestsQ7::REF_LINEAR_Q7_ID,mgr,nb);
+
+          break;
+
+       }
+      
+
+
+       output.create(ref.nbSamples(),InterpolationTestsQ7::OUT_SAMPLES_Q7_ID,mgr);
+    }
+
+    void InterpolationTestsQ7::tearDown(Testing::testID_t id,Client::PatternMgr *mgr)
+    {
+        output.dump(mgr);
+    }
diff --git a/CMSIS/DSP/Testing/desc.txt b/CMSIS/DSP/Testing/desc.txt
index 0a0accc..eaf7de4 100644
--- a/CMSIS/DSP/Testing/desc.txt
+++ b/CMSIS/DSP/Testing/desc.txt
@@ -453,6 +453,75 @@
 
         }
 
+        group Interpolation Tests{
+          class = InterpolationTests
+          folder = Interpolation
+
+          suite Interpolation Tests F32{
+              class = InterpolationTestsF32
+              folder = InterpolationF32
+
+              Pattern INPUT_F32_ID : Input1_f32.txt 
+              Pattern YVAL_F32_ID : YVals1_f32.txt 
+
+              Pattern REF_LINEAR_F32_ID : Reference1_f32.txt
+
+              Output  OUT_SAMPLES_F32_ID : Output
+
+              Functions {
+                Test arm_linear_interp_f32:test_linear_interp_f32
+              }
+          }
+
+          suite Interpolation Tests Q31{
+              class = InterpolationTestsQ31
+              folder = InterpolationQ31
+
+              Pattern INPUT_Q31_ID : Input1_q31.txt 
+              Pattern YVAL_Q31_ID : YVals1_q31.txt 
+
+              Pattern REF_LINEAR_Q31_ID : Reference1_q31.txt
+
+              Output  OUT_SAMPLES_Q31_ID : Output
+
+              Functions {
+                Test arm_linear_interp_q31:test_linear_interp_q31
+              }
+          }
+
+          suite Interpolation Tests Q15{
+              class = InterpolationTestsQ15
+              folder = InterpolationQ15
+
+              Pattern INPUT_Q31_ID : Input1_q31.txt 
+              Pattern YVAL_Q15_ID : YVals1_q15.txt 
+
+              Pattern REF_LINEAR_Q15_ID : Reference1_q15.txt
+
+              Output  OUT_SAMPLES_Q15_ID : Output
+
+              Functions {
+                Test arm_linear_interp_q15:test_linear_interp_q15
+              }
+          }
+
+          suite Interpolation Tests Q7{
+              class = InterpolationTestsQ7
+              folder = InterpolationQ7
+
+              Pattern INPUT_Q31_ID : Input1_q31.txt 
+              Pattern YVAL_Q7_ID : YVals1_q7.txt 
+
+              Pattern REF_LINEAR_Q7_ID : Reference1_q7.txt
+
+              Output  OUT_SAMPLES_Q7_ID : Output
+
+              Functions {
+                Test arm_linear_interp_q7:test_linear_interp_q7
+              }
+          }
+        }
+
         group Basic Tests {
            class = BasicTests
            folder = BasicMaths
diff --git a/CMSIS/DSP/Testing/runAllTests.py b/CMSIS/DSP/Testing/runAllTests.py
index 40bed12..9459e2f 100755
--- a/CMSIS/DSP/Testing/runAllTests.py
+++ b/CMSIS/DSP/Testing/runAllTests.py
@@ -79,6 +79,9 @@
 msg("Basic Tests")
 processAndRun(BUILDFOLDER,FVP,"BasicTests",custom=custom)
 
+msg("Interpolation Tests")
+processAndRun(BUILDFOLDER,FVP,"InterpolationTests",custom=custom)
+
 msg("Complex Tests")
 processAndRun(BUILDFOLDER,FVP,"ComplexTests",custom=custom)