| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261 | 
							- #include <SPI.h>
 
- #include <SdFat.h>
 
- #include <SdFatTestSuite.h>
 
- char buf[100];
 
- ibufstream ib;
 
- #define ibInit(s) ibInit_P(PSTR(s))
 
- //----------------------------------------------------------
 
- void ibInit_P(PGM_P p) {
 
-   if (strlen_P(p) >= sizeof(buf)) {
 
-     ib.init("");
 
-     ib.setstate(ios::badbit);
 
-   } else {
 
-     ib.clear();
 
-     strncpy_P(buf, p, sizeof(buf));
 
-     ib.init(buf);
 
-   }
 
- }
 
- //------------------------------------------------------------------------------
 
- void istreamBool() {
 
-   bool b;
 
-   ibInit(" 0 1 2");
 
-   testVerifyBool((ib >> b) && !b);
 
-   testVerifyBool((ib >> b) && b);
 
-   testVerifyBool(!(ib >> b) && !ib.good());
 
-   ibInit(" true false err");
 
-   testVerifyBool((ib >> boolalpha >> b) && b && ib.good());
 
-   testVerifyBool((ib >> b) && !b && ib.good());
 
-   testVerifyBool(!(ib >> b) && ib.fail());
 
-   ibInit("1");
 
-   testVerifyBool((ib >> noboolalpha >> b) && b && ib.eof());
 
- }
 
- //------------------------------------------------------------------------------
 
- void istreamChar() {
 
-   char c;
 
-   signed char sc;
 
-   unsigned char uc;
 
-   ibInit("c s u g");
 
-   testVerifyBool((ib >> c) && ib.good() && c == 'c');
 
-   testVerifyBool((ib >> sc) && ib.good() && sc == 's');
 
-   testVerifyBool((ib >> uc) && ib.good() && uc == 'u');
 
-   testVerifyBool(ib.get() == ' ');
 
-   testVerifyBool(ib.peek() == 'g' && ib.good());
 
-   testVerifyBool(ib.get() == 'g' && ib.good());
 
-   testVerifyBool(ib.get() == -1 && ib.eof());
 
- }
 
- //------------------------------------------------------------------------------
 
- void istreamDouble() {
 
-   double f;
 
-   ibInit("0 .1 1. 2 3.4 .1e5 1e5 -1E6 +2.3e-3 -123.4567");
 
-   testVerifyBool((ib >> f) && f == 0 && ib.good());
 
-   testVerifyBool((ib >> f) && f == 0.1 && ib.good());
 
-   testVerifyBool((ib >> f) && f == 1.0 && ib.good());
 
-   testVerifyBool((ib >> f) && f == 2.0 && ib.good());
 
-   testVerifyBool((ib >> f) && f == 3.4 && ib.good());
 
-   testVerifyBool((ib >> f) && f == 10000.0 && ib.good());
 
-   testVerifyBool((ib >> f) && f == 1e5 && ib.good());
 
-   testVerifyBool((ib >> f) && f == -1E6 && ib.good());
 
-   testVerifyBool((ib >> f) && f == 2.3e-3 && ib.good());
 
-   testVerifyBool((ib >> f) && fabs(f + 123.4567) < 1e-5 && ib.eof());
 
-   if (fabs(f + 123.4567) >= 1e-5) Serial.println(f, 8);
 
- }
 
- //------------------------------------------------------------------------------
 
- void istreamFloat() {
 
-   float f;
 
-   ibInit("0 .1 1. 2 3.4 .1e5 1e5 -1E6 +2.3e-3 -123.4567");
 
-   testVerifyBool((ib >> f) && f == 0 && ib.good());
 
-   testVerifyBool((ib >> f) && f == 0.1f && ib.good());
 
-   testVerifyBool((ib >> f) && f == 1.0 && ib.good());
 
-   testVerifyBool((ib >> f) && f == 2.0 && ib.good());
 
-   testVerifyBool((ib >> f) && f == 3.4f && ib.good());
 
-   testVerifyBool((ib >> f) && f == 10000.0 && ib.good());
 
-   testVerifyBool((ib >> f) && f == 1e5 && ib.good());
 
-   testVerifyBool((ib >> f) && f == -1E6 && ib.good());
 
-   testVerifyBool((ib >> f) && f == 2.3e-3f && ib.good());
 
-   testVerifyBool((ib >> f) && fabs(f + 123.4567f) < 1e-5 && ib.eof());
 
-   if (fabs(f + 123.4567) >= 1e-5) Serial.println(f, 8);
 
- }
 
- //------------------------------------------------------------------------------
 
- void istreamGet() {
 
-   char s[4];
 
-   ibInit("ab c");
 
-   testVerifyBool(ib.get() == 'a' && ib.good() && ib.gcount() == 1);
 
-   testVerifyBool(ib.get() == 'b' && ib.good() && ib.gcount() == 1);
 
-   testVerifyBool(ib.get() == ' ' && ib.good() && ib.gcount() == 1);
 
-   testVerifyBool(ib.get() == 'c' && ib.good() && ib.gcount() == 1);
 
-   testVerifyBool(ib.get() == -1 && ib.eof() && ib.gcount() == 0);
 
-   ibInit("ab\ncdef");
 
-   ib.get(s, sizeof(s));
 
-   testVerifyBool(ib.good() && ib.gcount() == 2);
 
-   testVerifyStr(s, "ab");
 
-   testVerifyBool(ib.get() == '\n' && ib.good() && ib.gcount() == 1);
 
-   ib.get(s, sizeof(s));
 
-   testVerifyBool(ib.good() && ib.gcount() == 3);
 
-   testVerifyStr(s, "cde");
 
-   ib.get(s, sizeof(s));
 
-   testVerifyBool(ib.eof() && ib.gcount() == 1);
 
-   testVerifyStr(s, "f");
 
-   ibInit(
 
-     "short line\n"
 
-     "\n"
 
-     "17 character line\n"
 
-     "too long for buffer\n"
 
-     "line with no nl"
 
-   );
 
-   char buf[18];
 
-   ib.getline(buf, sizeof(buf));
 
-   testVerifyBool(ib.good() && ib.gcount() == 11);
 
-   testVerifyStr(buf, "short line");
 
-   ib.getline(buf, sizeof(buf));
 
-   testVerifyBool(ib.good() && ib.gcount() == 1 && buf[0] == '\0');
 
-   ib.getline(buf, sizeof(buf));
 
-   testVerifyBool(ib.good() && ib.gcount() == 18);
 
-   testVerifyStr(buf, "17 character line");
 
-   ib.getline(buf, sizeof(buf));
 
-   testVerifyBool(ib.fail() && !ib.eof() && ib.gcount() == 17);
 
-   testVerifyStr(buf, "too long for buff");
 
-   ib.clear();
 
-   ib.getline(buf, sizeof(buf));
 
-   testVerifyBool(ib.good() && !ib.eof() && ib.gcount() == 3);
 
-   testVerifyStr(buf, "er");
 
-   ib.getline(buf, sizeof(buf));
 
-   testVerifyBool(!ib.fail() && ib.eof() && ib.gcount() == 15);
 
-   testVerifyStr(buf, "line with no nl");
 
- }
 
- //------------------------------------------------------------------------------
 
- void istreamNumber() {
 
-   short s;
 
-   signed short ss;
 
-   unsigned short us;
 
-   int i;
 
-   signed int si;
 
-   unsigned int ui;
 
-   long l;
 
-   signed long sl;
 
-   unsigned long ul;
 
-   ibInit("-32769");
 
-   testVerifyBool(!(ib >> s) && ib.fail());
 
-   ibInit("-32768 0 32767 32768");
 
-   testVerifyBool((ib >> s) && s == -32768 && ib.good());
 
-   testVerifyBool((ib >> s) && s == 0 && ib.good());
 
-   testVerifyBool((ib >> s) && s == 32767 && ib.good());
 
-   testVerifyBool(!(ib >> s) && ib.fail());
 
-   ibInit("-32769");
 
-   testVerifyBool(!(ib >> ss) && ib.fail());
 
-   ibInit("-32768 0 32767 32768");
 
-   testVerifyBool((ib >> ss) && ss == -32768 && ib.good());
 
-   testVerifyBool((ib >> ss) && ss == 0 && ib.good());
 
-   testVerifyBool((ib >> ss) && ss == 32767 && ib.good());
 
-   testVerifyBool(!(ib >> ss) && ib.fail());
 
-   ibInit("0 65535 65536");
 
-   testVerifyBool((ib >> us) && us == 0 && ib.good());
 
-   testVerifyBool((ib >> us) && us == 65535 && ib.good());
 
-   testVerifyBool(!(ib >> us) && ib.fail());
 
-   
 
- if (sizeof(int) == 2) {
 
-     ibInit("-32769");
 
-     testVerifyBool(!(ib >> i) && ib.fail());
 
-     ibInit("-32768 0 32767 32768");
 
-     testVerifyBool((ib >> i) && i == -32768 && ib.good());
 
-     testVerifyBool((ib >> i) && i == 0 && ib.good());
 
-     testVerifyBool((ib >> i) && i == 32767 && ib.good());
 
-     testVerifyBool(!(ib >> i) && ib.fail());
 
-     ibInit("-32769");
 
-     testVerifyBool(!(ib >> si) && ib.fail());
 
-     ibInit("-32768 0 32767 32768");
 
-     testVerifyBool((ib >> si) && si == -32768 && ib.good());
 
-     testVerifyBool((ib >> si) && si == 0 && ib.good());
 
-     testVerifyBool((ib >> si) && si == 32767 && ib.good());
 
-     testVerifyBool(!(ib >> si) && ib.fail());
 
-     ibInit("0 65535 65536");
 
-     testVerifyBool((ib >> ui) && ui == 0 && ib.good());
 
-     testVerifyBool((ib >> ui) && ui == 65535 && ib.good());
 
-     testVerifyBool(!(ib >> ui) && ib.fail());
 
-   } else {
 
-     ibInit("-2147483649");
 
-     testVerifyBool(!(ib >> i) && ib.fail());
 
-     ibInit("-2147483648 0 2147483647 2147483648");
 
-     testVerifyBool((ib >> i) && i == -2147483648 && ib.good());
 
-     testVerifyBool((ib >> i) && i == 0 && ib.good());
 
-     testVerifyBool((ib >> i) && i == 2147483647 && ib.good());
 
-     testVerifyBool(!(ib >> i) && ib.fail());
 
-     ibInit("-2147483649");
 
-     testVerifyBool(!(ib >> si) && ib.fail());
 
-     ibInit("-2147483648 0 2147483647 2147483648");
 
-     testVerifyBool((ib >> si) && si == -2147483648 && ib.good());
 
-     testVerifyBool((ib >> si) && si == 0 && ib.good());
 
-     testVerifyBool((ib >> si) && si == 2147483647 && ib.good());
 
-     testVerifyBool(!(ib >> si) && ib.fail());
 
-     ibInit("0 4294967295 4294967296");
 
-     testVerifyBool((ib >> ui) && ui == 0 && ib.good());
 
-     testVerifyBool((ib >> ui) && ui == 4294967295 && ib.good());
 
-     testVerifyBool(!(ib >> ui) && ib.fail());
 
-   }
 
-   ibInit("-2147483649");
 
-   testVerifyBool(!(ib >> l) && ib.fail());
 
-   ibInit("-2147483648 0 2147483647 2147483648");
 
-   testVerifyBool((ib >> l) && l == -2147483648 && ib.good());
 
-   testVerifyBool((ib >> l) && l == 0 && ib.good());
 
-   testVerifyBool((ib >> l) && l == 2147483647 && ib.good());
 
-   testVerifyBool(!(ib >> l) && ib.fail());
 
-   ibInit("-2147483649");
 
-   testVerifyBool(!(ib >> sl) && ib.fail());
 
-   ibInit("-2147483648 0 2147483647 2147483648");
 
-   testVerifyBool((ib >> sl) && sl == -2147483648 && ib.good());
 
-   testVerifyBool((ib >> sl) && sl == 0 && ib.good());
 
-   testVerifyBool((ib >> sl) && sl == 2147483647 && ib.good());
 
-   testVerifyBool(!(ib >> sl) && ib.fail());
 
-   ibInit("0 4294967295 4294967296");
 
-   testVerifyBool((ib >> ul) && ul == 0 && ib.good());
 
-   testVerifyBool((ib >> ul) && ul == 4294967295 && ib.good());
 
-   testVerifyBool(!(ib >> ul) && ib.fail());
 
-   // octal hex
 
-   ibInit("123 abc 0xdef 0XABC 567");
 
-   testVerifyBool((ib >> oct >> i) && i == 83);
 
-   testVerifyBool((ib >> hex >> i) && i == 0xabc);
 
-   testVerifyBool((ib >> i) && i == 0xdef);
 
-   testVerifyBool((ib >> i) && i == 0xabc);
 
-   testVerifyBool((ib >> dec >> i) && i ==567);
 
- }
 
- //------------------------------------------------------------------------------
 
- void istreamStr() {
 
-   char str[20];
 
-   ibInit("abc def\r\n hij");
 
-   testVerifyBool((ib >> str) && ib.good());
 
-   testVerifyStr(str, "abc");
 
-   testVerifyBool((ib >> str) && ib.good());
 
-   testVerifyStr(str, "def");
 
-   testVerifyBool((ib >> str) && ib.eof());
 
-   testVerifyStr(str, "hij");
 
- }
 
- //------------------------------------------------------------------------------
 
- void setup() {
 
-   testBegin();
 
-   istreamBool();
 
-   istreamChar();
 
-   istreamDouble();
 
-   istreamFloat();
 
-   istreamGet();
 
-   istreamNumber();
 
-   istreamStr();
 
-   testEnd();
 
- }
 
- //------------------------------------------------------------------------------
 
- void loop() {}
 
 
  |