writers.cpp 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. #include<__vic/writers/push_back.h>
  2. #include<__vic/writers/iterator.h>
  3. #include<__vic/writers/string.h>
  4. #include<__vic/writers/cstream.h>
  5. #include<__vic/writers/null.h>
  6. #include<__vic/stdio_file.h>
  7. #include<vector>
  8. #include<string>
  9. #include<cstdio>
  10. #include<iostream>
  11. #include<exception>
  12. #include<cassert>
  13. namespace tests {
  14. template<class T, class Writer>
  15. void check_write(Writer w, T v)
  16. {
  17. w.write(v);
  18. }
  19. void push_back()
  20. {
  21. std::vector<int> v;
  22. const int num = 3;
  23. __vic::push_back_writer<std::vector<int> > w(v);
  24. for(int i = 0; i < num; i++)
  25. w.write(i);
  26. assert(v.size() == num);
  27. for(int i = 0; i < num; i++)
  28. assert(v[i] == i);
  29. check_write(__vic::make_push_back_writer(v), 0);
  30. check_write(__vic::make_push_back_writer_for<unsigned>(v), 0U);
  31. check_write(__vic::make_iterator_writer(v.data()), 0);
  32. check_write(__vic::make_iterator_writer_for<unsigned>(v.data()), 0U);
  33. }
  34. void string()
  35. {
  36. const char data[] = "abc";
  37. std::string str;
  38. __vic::string_writer w(str);
  39. for(const char *p = data; *p; p++)
  40. w.write(*p);
  41. assert(str == data);
  42. check_write(__vic::make_string_writer(str), 'x');
  43. }
  44. void cstream()
  45. {
  46. const char filename[] = "cstream_writer.out";
  47. __vic::stdio_file file(filename, "w");
  48. __vic::cstream_writer w(file);
  49. w.write('a');
  50. w.write('b');
  51. w.write('c');
  52. std::remove(filename);
  53. check_write(__vic::make_cstream_writer(file), 'x');
  54. }
  55. void run()
  56. {
  57. check_write(__vic::make_null_writer(), 0);
  58. push_back();
  59. string();
  60. //cstream();
  61. }
  62. } // namespace
  63. int main()
  64. {
  65. try
  66. {
  67. tests::run();
  68. return 0;
  69. }
  70. catch(const std::exception &ex)
  71. {
  72. std::cerr << ex.what() << '\n';
  73. }
  74. return 1;
  75. }