You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

136 lines
2.9KB

  1. #include "LookupTable.h"
  2. #include "MultiLag.h"
  3. #include "ObjectCache.h"
  4. #include "MeasureTime.h"
  5. extern double overheadOutOnly;
  6. extern double overheadInOut;
  7. static void testMultiLPF()
  8. {
  9. MultiLPF<8> lpf;
  10. lpf.setCutoff(.01f);
  11. float input[8];
  12. MeasureTime<float>::run(overheadInOut, "multi lpf", [&lpf, &input]() {
  13. float x = TestBuffers<float>::get();
  14. for (int i = 0; i < 8; ++i) {
  15. input[i] = x;
  16. }
  17. lpf.step(input);
  18. return lpf.get(3);
  19. }, 1);
  20. }
  21. static void testMultiLag()
  22. {
  23. MultiLag<8> lpf;
  24. lpf.setAttack(.01f);
  25. lpf.setRelease(.02f);
  26. float input[8];
  27. MeasureTime<float>::run(overheadInOut, "multi lag", [&lpf, &input]() {
  28. float x = TestBuffers<float>::get();
  29. for (int i = 0; i < 8; ++i) {
  30. input[i] = x;
  31. }
  32. lpf.step(input);
  33. return lpf.get(3);
  34. }, 1);
  35. }
  36. static void testMultiLPFMod()
  37. {
  38. MultiLPF<8> lpf;
  39. lpf.setCutoff(.01f);
  40. float input[8];
  41. MeasureTime<float>::run(overheadInOut, "multi lpf mod", [&lpf, &input]() {
  42. float x = TestBuffers<float>::get();
  43. float y = TestBuffers<float>::get();
  44. y = std::abs(y) + .1f;
  45. while (y > .49f) {
  46. y -= .48f;
  47. }
  48. assert(y > 0);
  49. assert(y < .5);
  50. lpf.setCutoff(y);
  51. for (int i = 0; i < 8; ++i) {
  52. input[i] = x;
  53. }
  54. lpf.step(input);
  55. return lpf.get(3);
  56. }, 1);
  57. }
  58. static void testMultiLagMod()
  59. {
  60. MultiLag<8> lag;
  61. lag.setAttack(.01f);
  62. lag.setRelease(.02f);
  63. float input[8];
  64. MeasureTime<float>::run(overheadInOut, "multi lag mod", [&lag, &input]() {
  65. float x = TestBuffers<float>::get();
  66. float y = TestBuffers<float>::get();
  67. y = std::abs(y) + .1f;
  68. while (y > .49f) {
  69. y -= .48f;
  70. }
  71. assert(y > 0);
  72. assert(y < .5);
  73. lag.setAttack(y);
  74. lag.setRelease(y/2);
  75. for (int i = 0; i < 8; ++i) {
  76. input[i] = x;
  77. }
  78. lag.step(input);
  79. return lag.get(3);
  80. }, 1);
  81. }
  82. static void testUniformLookup()
  83. {
  84. std::shared_ptr<LookupTableParams<float>> lookup = ObjectCache<float>::getSinLookup();
  85. MeasureTime<float>::run(overheadInOut, "uniform", [lookup]() {
  86. float x = TestBuffers<float>::get();
  87. return LookupTable<float>::lookup(*lookup, x, true);
  88. }, 1);
  89. }
  90. static void testNonUniform()
  91. {
  92. std::shared_ptr<NonUniformLookupTableParams<float>> lookup = makeLPFilterL_Lookup<float>();
  93. MeasureTime<float>::run(overheadInOut, "non-uniform", [lookup]() {
  94. float x = TestBuffers<float>::get();
  95. return NonUniformLookupTable<float>::lookup(*lookup, x);
  96. }, 1);
  97. }
  98. void perfTest2()
  99. {
  100. testUniformLookup();
  101. testNonUniform();
  102. testMultiLPF();
  103. testMultiLPFMod();
  104. testMultiLag();
  105. testMultiLagMod();
  106. }