Jamoma API  0.6.0.a19
TTQuarticEaseOutFunction.test.cpp
Go to the documentation of this file.
1 /** @file
2  *
3  * @ingroup dspFunctionLib
4  *
5  * @brief Unit tests for the Jamoma DSP #TTQuarticEaseOutFunction of the #TTFunctionLib
6  *
7  * @details Derived from Sam Hocevar's public domain C/C++ implementation of Robert Penner easing functions
8  *
9  * @authors Trond Lossius
10  *
11  * @copyright Copyright © 2014 by Trond Lossius @n
12  * This code is licensed under the terms of the "New BSD License" @n
13  * http://creativecommons.org/licenses/BSD/
14  */
15 
16 
17 #include "TTFunction.h"
19 
20 
21 /*
22  * coefficients calculated in Octave using:
23 
24  x = linspace(0,1,128);
25  f = (x - 1);
26  y = f .* f .* f .* (1 - x) + 1;
27  printf("%.16e,\n", y)
28 
29  */
30 
32 {
33  int errorCount = 0;
34  int testAssertionCount = 0;
35  int badSampleCount = 0;
36  TTAudioSignalPtr input = NULL;
37  TTAudioSignalPtr output = NULL;
38  int N = 128;
39  TTValue v;
40 
41 
42  TTFloat64 inputSignal1[128] = {
43  0.0000000000000000e+00,
44  7.8740157480314960e-03,
45  1.5748031496062992e-02,
46  2.3622047244094488e-02,
47  3.1496062992125984e-02,
48  3.9370078740157480e-02,
49  4.7244094488188976e-02,
50  5.5118110236220472e-02,
51  6.2992125984251968e-02,
52  7.0866141732283464e-02,
53  7.8740157480314960e-02,
54  8.6614173228346455e-02,
55  9.4488188976377951e-02,
56  1.0236220472440945e-01,
57  1.1023622047244094e-01,
58  1.1811023622047244e-01,
59  1.2598425196850394e-01,
60  1.3385826771653542e-01,
61  1.4173228346456693e-01,
62  1.4960629921259844e-01,
63  1.5748031496062992e-01,
64  1.6535433070866140e-01,
65  1.7322834645669291e-01,
66  1.8110236220472442e-01,
67  1.8897637795275590e-01,
68  1.9685039370078738e-01,
69  2.0472440944881889e-01,
70  2.1259842519685040e-01,
71  2.2047244094488189e-01,
72  2.2834645669291337e-01,
73  2.3622047244094488e-01,
74  2.4409448818897639e-01,
75  2.5196850393700787e-01,
76  2.5984251968503935e-01,
77  2.6771653543307083e-01,
78  2.7559055118110237e-01,
79  2.8346456692913385e-01,
80  2.9133858267716534e-01,
81  2.9921259842519687e-01,
82  3.0708661417322836e-01,
83  3.1496062992125984e-01,
84  3.2283464566929132e-01,
85  3.3070866141732280e-01,
86  3.3858267716535434e-01,
87  3.4645669291338582e-01,
88  3.5433070866141730e-01,
89  3.6220472440944884e-01,
90  3.7007874015748032e-01,
91  3.7795275590551181e-01,
92  3.8582677165354329e-01,
93  3.9370078740157477e-01,
94  4.0157480314960631e-01,
95  4.0944881889763779e-01,
96  4.1732283464566927e-01,
97  4.2519685039370081e-01,
98  4.3307086614173229e-01,
99  4.4094488188976377e-01,
100  4.4881889763779526e-01,
101  4.5669291338582674e-01,
102  4.6456692913385828e-01,
103  4.7244094488188976e-01,
104  4.8031496062992124e-01,
105  4.8818897637795278e-01,
106  4.9606299212598426e-01,
107  5.0393700787401574e-01,
108  5.1181102362204722e-01,
109  5.1968503937007871e-01,
110  5.2755905511811019e-01,
111  5.3543307086614167e-01,
112  5.4330708661417326e-01,
113  5.5118110236220474e-01,
114  5.5905511811023623e-01,
115  5.6692913385826771e-01,
116  5.7480314960629919e-01,
117  5.8267716535433067e-01,
118  5.9055118110236215e-01,
119  5.9842519685039375e-01,
120  6.0629921259842523e-01,
121  6.1417322834645671e-01,
122  6.2204724409448819e-01,
123  6.2992125984251968e-01,
124  6.3779527559055116e-01,
125  6.4566929133858264e-01,
126  6.5354330708661412e-01,
127  6.6141732283464560e-01,
128  6.6929133858267720e-01,
129  6.7716535433070868e-01,
130  6.8503937007874016e-01,
131  6.9291338582677164e-01,
132  7.0078740157480313e-01,
133  7.0866141732283461e-01,
134  7.1653543307086609e-01,
135  7.2440944881889768e-01,
136  7.3228346456692917e-01,
137  7.4015748031496065e-01,
138  7.4803149606299213e-01,
139  7.5590551181102361e-01,
140  7.6377952755905509e-01,
141  7.7165354330708658e-01,
142  7.7952755905511806e-01,
143  7.8740157480314954e-01,
144  7.9527559055118113e-01,
145  8.0314960629921262e-01,
146  8.1102362204724410e-01,
147  8.1889763779527558e-01,
148  8.2677165354330706e-01,
149  8.3464566929133854e-01,
150  8.4251968503937003e-01,
151  8.5039370078740162e-01,
152  8.5826771653543310e-01,
153  8.6614173228346458e-01,
154  8.7401574803149606e-01,
155  8.8188976377952755e-01,
156  8.8976377952755903e-01,
157  8.9763779527559051e-01,
158  9.0551181102362199e-01,
159  9.1338582677165348e-01,
160  9.2125984251968507e-01,
161  9.2913385826771655e-01,
162  9.3700787401574803e-01,
163  9.4488188976377951e-01,
164  9.5275590551181100e-01,
165  9.6062992125984248e-01,
166  9.6850393700787396e-01,
167  9.7637795275590555e-01,
168  9.8425196850393704e-01,
169  9.9212598425196852e-01,
170  1.0000000000000000e+00
171  };
172 
173 
174  TTFloat64 expectedSignal1[128] = {
175  0.0000000000000000e+00,
176  3.1126011163920109e-02,
177  6.1519683582488049e-02,
178  9.1192595430016787e-02,
179  1.2015623262444974e-01,
180  1.4842198882736168e-01,
181  1.7600116544395783e-01,
182  2.0290497162307486e-01,
183  2.2914452425718035e-01,
184  2.5473084798237300e-01,
185  2.7967487517838197e-01,
186  3.0398744596856775e-01,
187  3.2767930821992231e-01,
188  3.5076111754306727e-01,
189  3.7324343729225629e-01,
190  3.9513673856537368e-01,
191  4.1645140020393501e-01,
192  4.3719770879308639e-01,
193  4.5738585866160497e-01,
194  4.7702595188189922e-01,
195  4.9612799827000842e-01,
196  5.1470191538560262e-01,
197  5.3275752853198322e-01,
198  5.5030457075608186e-01,
199  5.6735268284846196e-01,
200  5.8391141334331764e-01,
201  5.9999021851847401e-01,
202  6.1559846239538729e-01,
203  6.3074541673914408e-01,
204  6.4544026105846253e-01,
205  6.5969208260569168e-01,
206  6.7350987637681148e-01,
207  6.8690254511143278e-01,
208  6.9987889929279767e-01,
209  7.1244765714777880e-01,
210  7.2461744464688005e-01,
211  7.3639679550423631e-01,
212  7.4779415117761339e-01,
213  7.5881786086840819e-01,
214  7.6947618152164821e-01,
215  7.7977727782599215e-01,
216  7.8972922221372988e-01,
217  7.9933999486078211e-01,
218  8.0861748368670039e-01,
219  8.1756948435466725e-01,
220  8.2620370027149637e-01,
221  8.3452774258763229e-01,
222  8.4254913019715061e-01,
223  8.5027528973775790e-01,
224  8.5771355559079154e-01,
225  8.6487116988122004e-01,
226  8.7175528247764289e-01,
227  8.7837295099229040e-01,
228  8.8473114078102411e-01,
229  8.9083672494333643e-01,
230  8.9669648432235050e-01,
231  9.0231710750482075e-01,
232  9.0770519082113243e-01,
233  9.1286723834530192e-01,
234  9.1780966189497637e-01,
235  9.2253878103143405e-01,
236  9.2706082305958404e-01,
237  9.3138192302796663e-01,
238  9.3550812372875292e-01,
239  9.3944537569774500e-01,
240  9.4319953721437599e-01,
241  9.4677637430171013e-01,
242  9.5018156072644211e-01,
243  9.5342067799889829e-01,
244  9.5649921537303551e-01,
245  9.5942256984644170e-01,
246  9.6219604616033583e-01,
247  9.6482485679956786e-01,
248  9.6731412199261868e-01,
249  9.6966886971160016e-01,
250  9.7189403567225507e-01,
251  9.7399446333395734e-01,
252  9.7597490389971175e-01,
253  9.7784001631615391e-01,
254  9.7959436727355076e-01,
255  9.8124243120579990e-01,
256  9.8278859029042998e-01,
257  9.8423713444860084e-01,
258  9.8559226134510303e-01,
259  9.8685807638835810e-01,
260  9.8803859273041872e-01,
261  9.8913773126696847e-01,
262  9.9015932063732193e-01,
263  9.9110709722442447e-01,
264  9.9198470515485271e-01,
265  9.9279569629881403e-01,
266  9.9354353027014686e-01,
267  9.9423157442632082e-01,
268  9.9486310386843602e-01,
269  9.9544130144122400e-01,
270  9.9596925773304701e-01,
271  9.9644997107589850e-01,
272  9.9688634754540262e-01,
273  9.9728120096081474e-01,
274  9.9763725288502103e-01,
275  9.9795713262453867e-01,
276  9.9824337722951595e-01,
277  9.9849843149373196e-01,
278  9.9872464795459692e-01,
279  9.9892428689315182e-01,
280  9.9909951633406890e-01,
281  9.9925241204565118e-01,
282  9.9938495753983259e-01,
283  9.9949904407217827e-01,
284  9.9959647064188417e-01,
285  9.9967894399177726e-01,
286  9.9974807860831549e-01,
287  9.9980539672158764e-01,
288  9.9985232830531379e-01,
289  9.9989021107684473e-01,
290  9.9992029049716236e-01,
291  9.9994371977087926e-01,
292  9.9996155984623958e-01,
293  9.9997477941511781e-01,
294  9.9998425491301968e-01,
295  9.9999077051908214e-01,
296  9.9999501815607261e-01,
297  9.9999759749038997e-01,
298  9.9999901593206375e-01,
299  9.9999968863475452e-01,
300  9.9999993849575397e-01,
301  9.9999999615598467e-01,
302  1.0000000000000000e+00
303  };
304 
305  // setup Function
306  this->setAttributeValue(TT("function"), TT("easeOutQuartic"));
307 
308 
309  // create 1 channel audio signal objects
310  TTObjectBaseInstantiate(kTTSym_audiosignal, &input, 1);
311  TTObjectBaseInstantiate(kTTSym_audiosignal, &output, 1);
312  input->allocWithVectorSize(N);
313  output->allocWithVectorSize(N);
314 
315  // create a signal to be transformed and then process it)
316  input->clear();
317  for (int i=0; i<N; i++)
318  input->mSampleVectors[0][i] = inputSignal1[i];
319 
320  this->process(input, output);
321 
322  // now test the output
323  for (int n=0; n<N; n++)
324  {
325  TTBoolean result = !TTTestFloatEquivalence(output->mSampleVectors[0][n], expectedSignal1[n]);
326  badSampleCount += result;
327  if (result)
328  TTTestLog("BAD SAMPLE @ n=%i ( value=%.10f expected=%.10f )", n, output->mSampleVectors[0][n], expectedSignal1[n]);
329  }
330 
331  TTTestAssertion("Produces correct function values",
332  badSampleCount == 0,
333  testAssertionCount,
334  errorCount);
335  if (badSampleCount)
336  TTTestLog("badSampleCount is %i", badSampleCount);
337 
338 
339  TTObjectBaseRelease(&input);
340  TTObjectBaseRelease(&output);
341 
342  // wrap up test results and pass back to whoever called test
343  return TTTestFinish(testAssertionCount, errorCount, returnedTestInfo);
344 
345 }
virtual TTErr test(TTValue &returnedTestInfo)
Unit Tests.
bool TTBoolean
Boolean flag, same as Boolean on the Mac.
Definition: TTBase.h:167
TTErr TTObjectBaseRelease(TTObjectBasePtr *anObject)
DEPRECATED.
TTErr setAttributeValue(const TTSymbol name, TTValue &value)
Set an attribute value for an object.
double TTFloat64
64 bit floating point number
Definition: TTBase.h:188
#define TT
This macro is defined as a shortcut for doing a lookup in the symbol table.
Definition: TTSymbol.h:155
TTErr clear()
Zero out all of the sample values in the audio signal.
TTErr TTObjectBaseInstantiate(const TTSymbol className, TTObjectBasePtr *returnedObjectPtr, const TTValue arguments)
DEPRECATED.
The TTAudioSignal class represents N vectors of audio samples for M channels.
Definition: TTAudioSignal.h:57
TTSampleValue ** mSampleVectors
An array of pointers to the first sample in each vector. Declared Public for fast access...
Definition: TTAudioSignal.h:74
TTErr
Jamoma Error Codes Enumeration of error codes that might be returned by any of the TTBlue functions a...
Definition: TTBase.h:342
TTFunction is a generalized function wrapper for Jamoma DSP
TTErr allocWithVectorSize(const TTUInt16 newVectorSize)
Allocate memory for all channels at the specified vectorsize, if the vectorsize is different from the...
TTQuarticEaseOutFunction Unit for Jamoms DSP
[doxygenAppendixC_copyExample]
Definition: TTValue.h:34