model.cpp 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. #include "model/DHT11.h"
  2. #include "model/OneWire.hpp"
  3. #include <catch2/catch_test_macros.hpp>
  4. TEST_CASE("16 bits 1-wire", "[one_wire]") {
  5. using Model = model::OneWire<2>;
  6. auto model = Model();
  7. model.toggle(5);
  8. model.toggle(22);
  9. model.toggle(40);
  10. model.toggle(70);
  11. model.toggle(40);
  12. model.toggle(10);
  13. model.toggle(40);
  14. model.toggle(10);
  15. model.toggle(40);
  16. model.toggle(70);
  17. model.toggle(40);
  18. model.toggle(10);
  19. model.toggle(40);
  20. model.toggle(10);
  21. model.toggle(40);
  22. model.toggle(10);
  23. model.toggle(40);
  24. model.toggle(70);
  25. CHECK(model.data[1] == 0b10010001);
  26. model.toggle(40);
  27. model.toggle(70);
  28. model.toggle(40);
  29. model.toggle(70);
  30. model.toggle(40);
  31. model.toggle(10);
  32. model.toggle(40);
  33. model.toggle(10);
  34. model.toggle(40);
  35. model.toggle(10);
  36. model.toggle(40);
  37. model.toggle(10);
  38. model.toggle(40);
  39. model.toggle(10);
  40. CHECK(!model.toggle(40));
  41. CHECK(model.toggle(10));
  42. CHECK(model.data[0] == 0b11000000);
  43. }
  44. TEST_CASE("40 bits 1-wire", "[one_wire]") {
  45. using Model = model::OneWire<5>;
  46. auto model = Model();
  47. model.toggle(65);
  48. model.toggle(86);
  49. model.toggle(53);
  50. model.toggle(24);
  51. model.toggle(53);
  52. model.toggle(24);
  53. model.toggle(53);
  54. model.toggle(24);
  55. model.toggle(53);
  56. model.toggle(70);
  57. model.toggle(53);
  58. model.toggle(70);
  59. model.toggle(53);
  60. model.toggle(70);
  61. model.toggle(54);
  62. model.toggle(70);
  63. model.toggle(53);
  64. model.toggle(25);
  65. model.toggle(53);
  66. model.toggle(24);
  67. model.toggle(53);
  68. model.toggle(24);
  69. model.toggle(53);
  70. model.toggle(24);
  71. model.toggle(53);
  72. model.toggle(24);
  73. model.toggle(53);
  74. model.toggle(24);
  75. model.toggle(53);
  76. model.toggle(24);
  77. model.toggle(53);
  78. model.toggle(24);
  79. model.toggle(53);
  80. model.toggle(25);
  81. model.toggle(53);
  82. model.toggle(24);
  83. model.toggle(53);
  84. model.toggle(24);
  85. model.toggle(53);
  86. model.toggle(23);
  87. model.toggle(53);
  88. model.toggle(70);
  89. model.toggle(54);
  90. model.toggle(70);
  91. model.toggle(53);
  92. model.toggle(24);
  93. model.toggle(53);
  94. model.toggle(70);
  95. model.toggle(53);
  96. model.toggle(71);
  97. model.toggle(53);
  98. model.toggle(24);
  99. model.toggle(53);
  100. model.toggle(24);
  101. model.toggle(53);
  102. model.toggle(24);
  103. model.toggle(53);
  104. model.toggle(24);
  105. model.toggle(53);
  106. model.toggle(23);
  107. model.toggle(53);
  108. model.toggle(69);
  109. model.toggle(54);
  110. model.toggle(70);
  111. model.toggle(53);
  112. model.toggle(25);
  113. model.toggle(53);
  114. model.toggle(24);
  115. model.toggle(53);
  116. model.toggle(24);
  117. model.toggle(53);
  118. model.toggle(70);
  119. model.toggle(53);
  120. model.toggle(70);
  121. model.toggle(53);
  122. model.toggle(70);
  123. model.toggle(54);
  124. model.toggle(70);
  125. model.toggle(53);
  126. model.toggle(72);
  127. model.toggle(51);
  128. auto done = model.toggle(69);
  129. CHECK(done);
  130. CHECK(model.data[4] == 0b00011110);
  131. CHECK(model.data[3] == 0);
  132. CHECK(model.data[2] == 0b00011011);
  133. CHECK(model.data[1] == 0b00000110);
  134. CHECK(model.data[0] == 0b00111111);
  135. }
  136. TEST_CASE("dht11", "[dht11]") {
  137. using Wire = model::OneWire<5>;
  138. auto wire = Wire();
  139. SECTION("valid") {
  140. wire.data[4] = 0b00011110;
  141. wire.data[3] = 0;
  142. wire.data[2] = 0b00011011;
  143. wire.data[1] = 0b00000110;
  144. wire.data[0] = 0b00111111;
  145. auto opt = model::DHT11::construct(wire);
  146. REQUIRE(opt);
  147. auto &model = opt.value();
  148. CHECK(model.humidity().integral == 30);
  149. CHECK(model.humidity().decimal == 0);
  150. CHECK(model.temperature().integral == 27);
  151. CHECK(model.temperature().decimal == 6);
  152. }
  153. SECTION("invalid") {
  154. wire.data[0] = 1;
  155. REQUIRE(!model::DHT11::construct(wire));
  156. }
  157. }