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.

144 lines
2.3KB

  1. #include "asserts.h"
  2. #include "GateTrigger.h"
  3. #include "SchmidtTrigger.h"
  4. #include "TriggerOutput.h"
  5. #include <stdio.h>
  6. static void sc0()
  7. {
  8. SchmidtTrigger sc(-10, 10);
  9. bool b = sc.go(-20);
  10. assert(!b);
  11. }
  12. static void sc1()
  13. {
  14. SchmidtTrigger sc(-10, 10);
  15. bool b = sc.go(20);
  16. assert(b);
  17. }
  18. static void sc2()
  19. {
  20. SchmidtTrigger sc(-10, 10);
  21. bool b = sc.go(20);
  22. assert(b);
  23. b = sc.go(9);
  24. assert(b);
  25. b = sc.go(-9);
  26. assert(b);
  27. b = sc.go(-11);
  28. assert(!b);
  29. b = sc.go(-999);
  30. assert(!b);
  31. b = sc.go(9);
  32. assert(!b);
  33. b = sc.go(11);
  34. assert(b);
  35. }
  36. // check defaults for schmidt
  37. static void sc3()
  38. {
  39. SchmidtTrigger sc;
  40. bool b = sc.go(cGateHi + .1f);
  41. assert(b);
  42. b = sc.go(cGateLow + .1f);
  43. assert(b);
  44. b = sc.go(cGateLow - .1f);
  45. assert(!b);
  46. b = sc.go(cGateHi - .1f);
  47. assert(!b);
  48. b = sc.go(cGateHi + .1f);
  49. assert(b);
  50. }
  51. // check that threshold accessors are sane
  52. void g_1()
  53. {
  54. GateTrigger g(true);
  55. assert(g.thlo() > 0);
  56. assert(g.thhi() > g.thlo());
  57. assert(g.thhi() < 10.f);
  58. assert(g.thhi() > 1.f);
  59. }
  60. void testAfterReset(GateTrigger& g)
  61. {
  62. g.go(10.f); // right after "reset", start with gate
  63. assert(!g.gate());
  64. assert(!g.trigger());
  65. g.go(0.f);
  66. assert(!g.gate());
  67. assert(!g.trigger());
  68. g.go(10.f);
  69. assert(g.gate());
  70. assert(g.trigger());
  71. }
  72. void grst1()
  73. {
  74. GateTrigger g(true);
  75. testAfterReset(g);
  76. g.go(10.f);
  77. g.reset();
  78. testAfterReset(g);
  79. }
  80. void to0()
  81. {
  82. TriggerOutput t;
  83. // const int ghigh = DACVoltage::xcodeForGateHi();
  84. t.go(false);
  85. assert(t.get() == 0);
  86. t.go(true);
  87. assert(t.get() == cGateOutHi);
  88. int duration = 0;
  89. for (int i = 0; i < 100000; ++i) {
  90. t.go(true);
  91. if (t.get() == 0)
  92. break;
  93. ++duration;
  94. }
  95. const int micros = (duration * 1000 * 1000) / 44100; // TODO: rationalize
  96. //printf("duration = %d micros = %d\n", duration, micros);
  97. assert(micros > 4900);
  98. assert(micros < 5100);
  99. }
  100. // test that we work immediately on startup - no reset delay
  101. void to1()
  102. {
  103. TriggerOutput t;
  104. t.go(true);
  105. assertEQ(t.get(), cGateOutHi);
  106. }
  107. void testGateTrigger()
  108. {
  109. sc0();
  110. sc1();
  111. sc2();
  112. sc3();
  113. g_1();
  114. grst1();
  115. to0();
  116. to1();
  117. }