readers.cpp 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. #include<__vic/readers/container.h>
  2. #include<__vic/readers/iterator.h>
  3. #include<__vic/readers/string.h>
  4. #include<__vic/readers/cstring.h>
  5. #include<__vic/readers/cstream.h>
  6. #include<__vic/stdio_file.h>
  7. #include<string>
  8. #include<vector>
  9. #include<iostream>
  10. #include<exception>
  11. #include<cassert>
  12. namespace tests {
  13. template<class T, class Reader>
  14. void check_read(Reader r)
  15. {
  16. T val;
  17. r.read(val);
  18. (void) val;
  19. }
  20. void container()
  21. {
  22. std::vector<int> v;
  23. const int num = 3;
  24. v.reserve(num);
  25. for(int i = 1; i <= 3; i++) v.push_back(i);
  26. __vic::container_reader<std::vector<int> > r(v);
  27. int n;
  28. for(int i = 1; i <= 3; i++)
  29. {
  30. assert(r.read(n));
  31. assert(n == i);
  32. }
  33. assert(!r.read(n));
  34. check_read<int>(__vic::make_container_reader(v));
  35. check_read<unsigned>(__vic::make_container_reader_for<unsigned>(v));
  36. check_read<int>(__vic::make_iterator_reader(v.begin(), v.end()));
  37. check_read<unsigned>(__vic::make_iterator_reader_for<unsigned>(v.begin(), v.end()));
  38. check_read<int>(__vic::make_iterator_reader_n(v.begin(), v.size()));
  39. check_read<unsigned>(__vic::make_iterator_reader_n_for<unsigned>(v.begin(), v.size()));
  40. }
  41. void string()
  42. {
  43. const char data[] = "abc";
  44. std::string str(data);
  45. __vic::string_reader r(str);
  46. char ch;
  47. for(unsigned i = 0; i < str.length(); i++)
  48. {
  49. assert(r.read(ch));
  50. assert(ch == data[i]);
  51. }
  52. assert(!r.read(ch));
  53. check_read<char>(__vic::make_string_reader(str));
  54. }
  55. void cstring()
  56. {
  57. const char str[] = "abc";
  58. __vic::cstring_reader r(str);
  59. char ch;
  60. for(const char *p = str; *p; p++)
  61. {
  62. assert(r.read(ch));
  63. assert(ch == *p);
  64. }
  65. assert(!r.read(ch));
  66. check_read<char>(__vic::make_cstring_reader(str));
  67. }
  68. void cstream()
  69. {
  70. __vic::stdio_file file("readers.cpp", "r");
  71. __vic::cstream_reader r(file);
  72. char ch;
  73. r.read(ch);
  74. }
  75. void run()
  76. {
  77. container();
  78. string();
  79. cstring();
  80. cstream();
  81. }
  82. } // namespace
  83. int main()
  84. {
  85. try
  86. {
  87. tests::run();
  88. return 0;
  89. }
  90. catch(const std::exception &ex)
  91. {
  92. std::cerr << ex.what() << '\n';
  93. }
  94. return 1;
  95. }