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.

276 lines
8.2KB

  1. #include "arptest.hpp"
  2. #include "../src/controller/ClockDivider.hpp"
  3. uint8_t test_clock_divider_initial_clock() {
  4. ClockDividerModule *m = new ClockDividerModule();
  5. check(m, "clock divider is instantiated");
  6. m->inputs[0].value = 1.7f;
  7. m->step();
  8. check(m->outputs[0].value == 0.0f, "output 1 is not active");
  9. check(m->outputs[1].value == 0.0f, "output 2 is not active");
  10. check(m->outputs[2].value == 0.0f, "output 3 is not active");
  11. check(m->outputs[3].value == 0.0f, "output 4 is not active");
  12. check(m->outputs[4].value == 0.0f, "output 5 is not active");
  13. check(m->outputs[5].value == 0.0f, "output 6 is not active");
  14. check(m->outputs[6].value == 0.0f, "output 7 is not active");
  15. check(m->outputs[7].value == 0.0f, "output 8 is not active");
  16. done();
  17. }
  18. uint8_t test_clock_divider_first_clock() {
  19. ClockDividerModule *m = new ClockDividerModule();
  20. check(m, "clock divider is instantiated");
  21. // initial
  22. m->inputs[0].value = 1.7f;
  23. m->step();
  24. for (uint8_t i = 0; i < 1; i++) {
  25. m->inputs[0].value = 0.0f;
  26. m->step();
  27. m->inputs[0].value = 1.7f;
  28. m->step();
  29. }
  30. check(m->outputs[0].value == 1.7f, "output 1 is active");
  31. check(m->outputs[1].value == 0.0f, "output 2 is not active");
  32. check(m->outputs[2].value == 0.0f, "output 3 is not active");
  33. check(m->outputs[3].value == 0.0f, "output 4 is not active");
  34. check(m->outputs[4].value == 0.0f, "output 5 is not active");
  35. check(m->outputs[5].value == 0.0f, "output 6 is not active");
  36. check(m->outputs[6].value == 0.0f, "output 7 is not active");
  37. check(m->outputs[7].value == 0.0f, "output 8 is not active");
  38. done();
  39. }
  40. uint8_t test_clock_divider_second_clock() {
  41. ClockDividerModule *m = new ClockDividerModule();
  42. check(m, "clock divider is instantiated");
  43. // initial
  44. m->inputs[0].value = 1.7f;
  45. m->step();
  46. for (uint8_t i = 0; i < 2; i++) {
  47. m->inputs[0].value = 0.0f;
  48. m->step();
  49. m->inputs[0].value = 1.7f;
  50. m->step();
  51. }
  52. check(m->outputs[0].value == 1.7f, "output 1 is active");
  53. check(m->outputs[1].value == 1.7f, "output 2 is active");
  54. check(m->outputs[2].value == 0.0f, "output 3 is not active");
  55. check(m->outputs[3].value == 0.0f, "output 4 is not active");
  56. check(m->outputs[4].value == 0.0f, "output 5 is not active");
  57. check(m->outputs[5].value == 0.0f, "output 6 is not active");
  58. check(m->outputs[6].value == 0.0f, "output 7 is not active");
  59. check(m->outputs[7].value == 0.0f, "output 8 is not active");
  60. done();
  61. }
  62. uint8_t test_clock_divider_third_clock() {
  63. ClockDividerModule *m = new ClockDividerModule();
  64. check(m, "clock divider is instantiated");
  65. // initial
  66. m->inputs[0].value = 1.7f;
  67. m->step();
  68. for (uint8_t i = 0; i < 3; i++) {
  69. m->inputs[0].value = 0.0f;
  70. m->step();
  71. m->inputs[0].value = 1.7f;
  72. m->step();
  73. }
  74. check(m->outputs[0].value == 1.7f, "output 1 is active");
  75. check(m->outputs[1].value == 0.0f, "output 2 is not active");
  76. check(m->outputs[2].value == 1.7f, "output 3 is active");
  77. check(m->outputs[3].value == 0.0f, "output 4 is not active");
  78. check(m->outputs[4].value == 0.0f, "output 5 is not active");
  79. check(m->outputs[5].value == 0.0f, "output 6 is not active");
  80. check(m->outputs[6].value == 0.0f, "output 7 is not active");
  81. check(m->outputs[7].value == 0.0f, "output 8 is not active");
  82. done();
  83. }
  84. uint8_t test_clock_divider_fourth_clock() {
  85. ClockDividerModule *m = new ClockDividerModule();
  86. check(m, "clock divider is instantiated");
  87. // initial
  88. m->inputs[0].value = 1.7f;
  89. m->step();
  90. for (uint8_t i = 0; i < 4; i++) {
  91. m->inputs[0].value = 0.0f;
  92. m->step();
  93. m->inputs[0].value = 1.7f;
  94. m->step();
  95. }
  96. check(m->outputs[0].value == 1.7f, "output 1 is active");
  97. check(m->outputs[1].value == 1.7f, "output 2 is active");
  98. check(m->outputs[2].value == 0.0f, "output 3 is not active");
  99. check(m->outputs[3].value == 1.7f, "output 4 is active");
  100. check(m->outputs[4].value == 0.0f, "output 5 is not active");
  101. check(m->outputs[5].value == 0.0f, "output 6 is not active");
  102. check(m->outputs[6].value == 0.0f, "output 7 is not active");
  103. check(m->outputs[7].value == 0.0f, "output 8 is not active");
  104. done();
  105. }
  106. uint8_t test_clock_divider_fifth_clock() {
  107. ClockDividerModule *m = new ClockDividerModule();
  108. check(m, "clock divider is instantiated");
  109. // initial
  110. m->inputs[0].value = 1.7f;
  111. m->step();
  112. for (uint8_t i = 0; i < 5; i++) {
  113. m->inputs[0].value = 0.0f;
  114. m->step();
  115. m->inputs[0].value = 1.7f;
  116. m->step();
  117. }
  118. check(m->outputs[0].value == 1.7f, "output 1 is active");
  119. check(m->outputs[1].value == 0.0f, "output 2 is not active");
  120. check(m->outputs[2].value == 0.0f, "output 3 is not active");
  121. check(m->outputs[3].value == 0.0f, "output 4 is not active");
  122. check(m->outputs[4].value == 1.7f, "output 5 is active");
  123. check(m->outputs[5].value == 0.0f, "output 6 is not active");
  124. check(m->outputs[6].value == 0.0f, "output 7 is not active");
  125. check(m->outputs[7].value == 0.0f, "output 8 is not active");
  126. done();
  127. }
  128. uint8_t test_clock_divider_sixth_clock() {
  129. ClockDividerModule *m = new ClockDividerModule();
  130. check(m, "clock divider is instantiated");
  131. // initial
  132. m->inputs[0].value = 1.7f;
  133. m->step();
  134. for (uint8_t i = 0; i < 6; i++) {
  135. m->inputs[0].value = 0.0f;
  136. m->step();
  137. m->inputs[0].value = 1.7f;
  138. m->step();
  139. }
  140. check(m->outputs[0].value == 1.7f, "output 1 is active");
  141. check(m->outputs[1].value == 1.7f, "output 2 is active");
  142. check(m->outputs[2].value == 1.7f, "output 3 is active");
  143. check(m->outputs[3].value == 0.0f, "output 4 is not active");
  144. check(m->outputs[4].value == 0.0f, "output 5 is not active");
  145. check(m->outputs[5].value == 1.7f, "output 6 is active");
  146. check(m->outputs[6].value == 0.0f, "output 7 is not active");
  147. check(m->outputs[7].value == 0.0f, "output 8 is not active");
  148. done();
  149. }
  150. uint8_t test_clock_divider_seventh_clock() {
  151. ClockDividerModule *m = new ClockDividerModule();
  152. check(m, "clock divider is instantiated");
  153. // initial
  154. m->inputs[0].value = 1.7f;
  155. m->step();
  156. for (uint8_t i = 0; i < 7; i++) {
  157. m->inputs[0].value = 0.0f;
  158. m->step();
  159. m->inputs[0].value = 1.7f;
  160. m->step();
  161. }
  162. check(m->outputs[0].value == 1.7f, "output 1 is active");
  163. check(m->outputs[1].value == 0.0f, "output 2 is not active");
  164. check(m->outputs[2].value == 0.0f, "output 3 is not active");
  165. check(m->outputs[3].value == 0.0f, "output 4 is not active");
  166. check(m->outputs[4].value == 0.0f, "output 5 is not active");
  167. check(m->outputs[5].value == 0.0f, "output 6 is not active");
  168. check(m->outputs[6].value == 1.7f, "output 7 is active");
  169. check(m->outputs[7].value == 0.0f, "output 8 is not active");
  170. done();
  171. }
  172. uint8_t test_clock_divider_eighth_clock() {
  173. ClockDividerModule *m = new ClockDividerModule();
  174. check(m, "clock divider is instantiated");
  175. // initial
  176. m->inputs[0].value = 1.7f;
  177. m->step();
  178. for (uint8_t i = 0; i < 8; i++) {
  179. m->inputs[0].value = 0.0f;
  180. m->step();
  181. m->inputs[0].value = 1.7f;
  182. m->step();
  183. }
  184. check(m->outputs[0].value == 1.7f, "output 1 is active");
  185. check(m->outputs[1].value == 1.7f, "output 2 is active");
  186. check(m->outputs[2].value == 0.0f, "output 3 is not active");
  187. check(m->outputs[3].value == 1.7f, "output 4 is active");
  188. check(m->outputs[4].value == 0.0f, "output 5 is not active");
  189. check(m->outputs[5].value == 0.0f, "output 6 is not active");
  190. check(m->outputs[6].value == 0.0f, "output 7 is not active");
  191. check(m->outputs[7].value == 1.7f, "output 8 is active");
  192. done();
  193. }
  194. uint8_t test_clock_divider_ninth_clock() {
  195. ClockDividerModule *m = new ClockDividerModule();
  196. check(m, "clock divider is instantiated");
  197. // initial
  198. m->inputs[0].value = 1.7f;
  199. m->step();
  200. for (uint8_t i = 0; i < 9; i++) {
  201. m->inputs[0].value = 0.0f;
  202. m->step();
  203. m->inputs[0].value = 1.7f;
  204. m->step();
  205. }
  206. check(m->outputs[0].value == 1.7f, "output 1 is active");
  207. check(m->outputs[1].value == 0.0f, "output 2 is not active");
  208. check(m->outputs[2].value == 0.0f, "output 3 is not active");
  209. check(m->outputs[3].value == 0.0f, "output 4 is not active");
  210. check(m->outputs[4].value == 0.0f, "output 5 is not active");
  211. check(m->outputs[5].value == 0.0f, "output 6 is not active");
  212. check(m->outputs[6].value == 0.0f, "output 7 is not active");
  213. check(m->outputs[7].value == 0.0f, "output 8 is not active");
  214. done();
  215. }