Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

istreamTest.ino 9.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261
  1. #include <SPI.h>
  2. #include <SdFat.h>
  3. #include <SdFatTestSuite.h>
  4. char buf[100];
  5. ibufstream ib;
  6. #define ibInit(s) ibInit_P(PSTR(s))
  7. //----------------------------------------------------------
  8. void ibInit_P(PGM_P p) {
  9. if (strlen_P(p) >= sizeof(buf)) {
  10. ib.init("");
  11. ib.setstate(ios::badbit);
  12. } else {
  13. ib.clear();
  14. strncpy_P(buf, p, sizeof(buf));
  15. ib.init(buf);
  16. }
  17. }
  18. //------------------------------------------------------------------------------
  19. void istreamBool() {
  20. bool b;
  21. ibInit(" 0 1 2");
  22. testVerifyBool((ib >> b) && !b);
  23. testVerifyBool((ib >> b) && b);
  24. testVerifyBool(!(ib >> b) && !ib.good());
  25. ibInit(" true false err");
  26. testVerifyBool((ib >> boolalpha >> b) && b && ib.good());
  27. testVerifyBool((ib >> b) && !b && ib.good());
  28. testVerifyBool(!(ib >> b) && ib.fail());
  29. ibInit("1");
  30. testVerifyBool((ib >> noboolalpha >> b) && b && ib.eof());
  31. }
  32. //------------------------------------------------------------------------------
  33. void istreamChar() {
  34. char c;
  35. signed char sc;
  36. unsigned char uc;
  37. ibInit("c s u g");
  38. testVerifyBool((ib >> c) && ib.good() && c == 'c');
  39. testVerifyBool((ib >> sc) && ib.good() && sc == 's');
  40. testVerifyBool((ib >> uc) && ib.good() && uc == 'u');
  41. testVerifyBool(ib.get() == ' ');
  42. testVerifyBool(ib.peek() == 'g' && ib.good());
  43. testVerifyBool(ib.get() == 'g' && ib.good());
  44. testVerifyBool(ib.get() == -1 && ib.eof());
  45. }
  46. //------------------------------------------------------------------------------
  47. void istreamDouble() {
  48. double f;
  49. ibInit("0 .1 1. 2 3.4 .1e5 1e5 -1E6 +2.3e-3 -123.4567");
  50. testVerifyBool((ib >> f) && f == 0 && ib.good());
  51. testVerifyBool((ib >> f) && f == 0.1 && ib.good());
  52. testVerifyBool((ib >> f) && f == 1.0 && ib.good());
  53. testVerifyBool((ib >> f) && f == 2.0 && ib.good());
  54. testVerifyBool((ib >> f) && f == 3.4 && ib.good());
  55. testVerifyBool((ib >> f) && f == 10000.0 && ib.good());
  56. testVerifyBool((ib >> f) && f == 1e5 && ib.good());
  57. testVerifyBool((ib >> f) && f == -1E6 && ib.good());
  58. testVerifyBool((ib >> f) && f == 2.3e-3 && ib.good());
  59. testVerifyBool((ib >> f) && fabs(f + 123.4567) < 1e-5 && ib.eof());
  60. if (fabs(f + 123.4567) >= 1e-5) Serial.println(f, 8);
  61. }
  62. //------------------------------------------------------------------------------
  63. void istreamFloat() {
  64. float f;
  65. ibInit("0 .1 1. 2 3.4 .1e5 1e5 -1E6 +2.3e-3 -123.4567");
  66. testVerifyBool((ib >> f) && f == 0 && ib.good());
  67. testVerifyBool((ib >> f) && f == 0.1f && ib.good());
  68. testVerifyBool((ib >> f) && f == 1.0 && ib.good());
  69. testVerifyBool((ib >> f) && f == 2.0 && ib.good());
  70. testVerifyBool((ib >> f) && f == 3.4f && ib.good());
  71. testVerifyBool((ib >> f) && f == 10000.0 && ib.good());
  72. testVerifyBool((ib >> f) && f == 1e5 && ib.good());
  73. testVerifyBool((ib >> f) && f == -1E6 && ib.good());
  74. testVerifyBool((ib >> f) && f == 2.3e-3f && ib.good());
  75. testVerifyBool((ib >> f) && fabs(f + 123.4567f) < 1e-5 && ib.eof());
  76. if (fabs(f + 123.4567) >= 1e-5) Serial.println(f, 8);
  77. }
  78. //------------------------------------------------------------------------------
  79. void istreamGet() {
  80. char s[4];
  81. ibInit("ab c");
  82. testVerifyBool(ib.get() == 'a' && ib.good() && ib.gcount() == 1);
  83. testVerifyBool(ib.get() == 'b' && ib.good() && ib.gcount() == 1);
  84. testVerifyBool(ib.get() == ' ' && ib.good() && ib.gcount() == 1);
  85. testVerifyBool(ib.get() == 'c' && ib.good() && ib.gcount() == 1);
  86. testVerifyBool(ib.get() == -1 && ib.eof() && ib.gcount() == 0);
  87. ibInit("ab\ncdef");
  88. ib.get(s, sizeof(s));
  89. testVerifyBool(ib.good() && ib.gcount() == 2);
  90. testVerifyStr(s, "ab");
  91. testVerifyBool(ib.get() == '\n' && ib.good() && ib.gcount() == 1);
  92. ib.get(s, sizeof(s));
  93. testVerifyBool(ib.good() && ib.gcount() == 3);
  94. testVerifyStr(s, "cde");
  95. ib.get(s, sizeof(s));
  96. testVerifyBool(ib.eof() && ib.gcount() == 1);
  97. testVerifyStr(s, "f");
  98. ibInit(
  99. "short line\n"
  100. "\n"
  101. "17 character line\n"
  102. "too long for buffer\n"
  103. "line with no nl"
  104. );
  105. char buf[18];
  106. ib.getline(buf, sizeof(buf));
  107. testVerifyBool(ib.good() && ib.gcount() == 11);
  108. testVerifyStr(buf, "short line");
  109. ib.getline(buf, sizeof(buf));
  110. testVerifyBool(ib.good() && ib.gcount() == 1 && buf[0] == '\0');
  111. ib.getline(buf, sizeof(buf));
  112. testVerifyBool(ib.good() && ib.gcount() == 18);
  113. testVerifyStr(buf, "17 character line");
  114. ib.getline(buf, sizeof(buf));
  115. testVerifyBool(ib.fail() && !ib.eof() && ib.gcount() == 17);
  116. testVerifyStr(buf, "too long for buff");
  117. ib.clear();
  118. ib.getline(buf, sizeof(buf));
  119. testVerifyBool(ib.good() && !ib.eof() && ib.gcount() == 3);
  120. testVerifyStr(buf, "er");
  121. ib.getline(buf, sizeof(buf));
  122. testVerifyBool(!ib.fail() && ib.eof() && ib.gcount() == 15);
  123. testVerifyStr(buf, "line with no nl");
  124. }
  125. //------------------------------------------------------------------------------
  126. void istreamNumber() {
  127. short s;
  128. signed short ss;
  129. unsigned short us;
  130. int i;
  131. signed int si;
  132. unsigned int ui;
  133. long l;
  134. signed long sl;
  135. unsigned long ul;
  136. ibInit("-32769");
  137. testVerifyBool(!(ib >> s) && ib.fail());
  138. ibInit("-32768 0 32767 32768");
  139. testVerifyBool((ib >> s) && s == -32768 && ib.good());
  140. testVerifyBool((ib >> s) && s == 0 && ib.good());
  141. testVerifyBool((ib >> s) && s == 32767 && ib.good());
  142. testVerifyBool(!(ib >> s) && ib.fail());
  143. ibInit("-32769");
  144. testVerifyBool(!(ib >> ss) && ib.fail());
  145. ibInit("-32768 0 32767 32768");
  146. testVerifyBool((ib >> ss) && ss == -32768 && ib.good());
  147. testVerifyBool((ib >> ss) && ss == 0 && ib.good());
  148. testVerifyBool((ib >> ss) && ss == 32767 && ib.good());
  149. testVerifyBool(!(ib >> ss) && ib.fail());
  150. ibInit("0 65535 65536");
  151. testVerifyBool((ib >> us) && us == 0 && ib.good());
  152. testVerifyBool((ib >> us) && us == 65535 && ib.good());
  153. testVerifyBool(!(ib >> us) && ib.fail());
  154. if (sizeof(int) == 2) {
  155. ibInit("-32769");
  156. testVerifyBool(!(ib >> i) && ib.fail());
  157. ibInit("-32768 0 32767 32768");
  158. testVerifyBool((ib >> i) && i == -32768 && ib.good());
  159. testVerifyBool((ib >> i) && i == 0 && ib.good());
  160. testVerifyBool((ib >> i) && i == 32767 && ib.good());
  161. testVerifyBool(!(ib >> i) && ib.fail());
  162. ibInit("-32769");
  163. testVerifyBool(!(ib >> si) && ib.fail());
  164. ibInit("-32768 0 32767 32768");
  165. testVerifyBool((ib >> si) && si == -32768 && ib.good());
  166. testVerifyBool((ib >> si) && si == 0 && ib.good());
  167. testVerifyBool((ib >> si) && si == 32767 && ib.good());
  168. testVerifyBool(!(ib >> si) && ib.fail());
  169. ibInit("0 65535 65536");
  170. testVerifyBool((ib >> ui) && ui == 0 && ib.good());
  171. testVerifyBool((ib >> ui) && ui == 65535 && ib.good());
  172. testVerifyBool(!(ib >> ui) && ib.fail());
  173. } else {
  174. ibInit("-2147483649");
  175. testVerifyBool(!(ib >> i) && ib.fail());
  176. ibInit("-2147483648 0 2147483647 2147483648");
  177. testVerifyBool((ib >> i) && i == -2147483648 && ib.good());
  178. testVerifyBool((ib >> i) && i == 0 && ib.good());
  179. testVerifyBool((ib >> i) && i == 2147483647 && ib.good());
  180. testVerifyBool(!(ib >> i) && ib.fail());
  181. ibInit("-2147483649");
  182. testVerifyBool(!(ib >> si) && ib.fail());
  183. ibInit("-2147483648 0 2147483647 2147483648");
  184. testVerifyBool((ib >> si) && si == -2147483648 && ib.good());
  185. testVerifyBool((ib >> si) && si == 0 && ib.good());
  186. testVerifyBool((ib >> si) && si == 2147483647 && ib.good());
  187. testVerifyBool(!(ib >> si) && ib.fail());
  188. ibInit("0 4294967295 4294967296");
  189. testVerifyBool((ib >> ui) && ui == 0 && ib.good());
  190. testVerifyBool((ib >> ui) && ui == 4294967295 && ib.good());
  191. testVerifyBool(!(ib >> ui) && ib.fail());
  192. }
  193. ibInit("-2147483649");
  194. testVerifyBool(!(ib >> l) && ib.fail());
  195. ibInit("-2147483648 0 2147483647 2147483648");
  196. testVerifyBool((ib >> l) && l == -2147483648 && ib.good());
  197. testVerifyBool((ib >> l) && l == 0 && ib.good());
  198. testVerifyBool((ib >> l) && l == 2147483647 && ib.good());
  199. testVerifyBool(!(ib >> l) && ib.fail());
  200. ibInit("-2147483649");
  201. testVerifyBool(!(ib >> sl) && ib.fail());
  202. ibInit("-2147483648 0 2147483647 2147483648");
  203. testVerifyBool((ib >> sl) && sl == -2147483648 && ib.good());
  204. testVerifyBool((ib >> sl) && sl == 0 && ib.good());
  205. testVerifyBool((ib >> sl) && sl == 2147483647 && ib.good());
  206. testVerifyBool(!(ib >> sl) && ib.fail());
  207. ibInit("0 4294967295 4294967296");
  208. testVerifyBool((ib >> ul) && ul == 0 && ib.good());
  209. testVerifyBool((ib >> ul) && ul == 4294967295 && ib.good());
  210. testVerifyBool(!(ib >> ul) && ib.fail());
  211. // octal hex
  212. ibInit("123 abc 0xdef 0XABC 567");
  213. testVerifyBool((ib >> oct >> i) && i == 83);
  214. testVerifyBool((ib >> hex >> i) && i == 0xabc);
  215. testVerifyBool((ib >> i) && i == 0xdef);
  216. testVerifyBool((ib >> i) && i == 0xabc);
  217. testVerifyBool((ib >> dec >> i) && i ==567);
  218. }
  219. //------------------------------------------------------------------------------
  220. void istreamStr() {
  221. char str[20];
  222. ibInit("abc def\r\n hij");
  223. testVerifyBool((ib >> str) && ib.good());
  224. testVerifyStr(str, "abc");
  225. testVerifyBool((ib >> str) && ib.good());
  226. testVerifyStr(str, "def");
  227. testVerifyBool((ib >> str) && ib.eof());
  228. testVerifyStr(str, "hij");
  229. }
  230. //------------------------------------------------------------------------------
  231. void setup() {
  232. testBegin();
  233. istreamBool();
  234. istreamChar();
  235. istreamDouble();
  236. istreamFloat();
  237. istreamGet();
  238. istreamNumber();
  239. istreamStr();
  240. testEnd();
  241. }
  242. //------------------------------------------------------------------------------
  243. void loop() {}