posix_basename.cpp 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. #include<__vic/posix/fs.h>
  2. #include<iostream>
  3. #include<exception>
  4. #include<cassert>
  5. // WARNING: no brackets around macro arguments
  6. #define test_basename(src, expected_res) \
  7. { \
  8. std::string res = __vic::posix::basename(src); \
  9. std::cout << "basename " << (*src ? src : "\"\"") << " -> " \
  10. << (res.empty() ? "\"\"" : res.c_str()) << std::endl; \
  11. assert(__vic::posix::basename(src) == expected_res); \
  12. \
  13. __vic::posix::basename(src, res); \
  14. std::cout << "basename (out) " << (*src ? src : "\"\"") << " -> " \
  15. << (res.empty() ? "\"\"" : res.c_str()) << std::endl; \
  16. assert(res == expected_res); \
  17. \
  18. res = ">>>"; \
  19. __vic::posix::append_basename(src, res); \
  20. std::cout << "append_basename " << (*src ? src : "\"\"") << " -> " \
  21. << res << std::endl; \
  22. assert(res == std::string(">>>") + expected_res); \
  23. }
  24. #define test_dirname(src, expected_res) \
  25. { \
  26. std::string res = __vic::posix::dirname(src); \
  27. std::cout << "dirname " << (*src ? src : "\"\"") << " -> " \
  28. << (res.empty() ? "\"\"" : res.c_str()) << std::endl; \
  29. assert(__vic::posix::dirname(src) == expected_res); \
  30. \
  31. __vic::posix::dirname(src, res); \
  32. std::cout << "dirname (out) " << (*src ? src : "\"\"") << " -> " \
  33. << (res.empty() ? "\"\"" : res.c_str()) << std::endl; \
  34. assert(res == expected_res); \
  35. \
  36. res = ">>>"; \
  37. __vic::posix::append_dirname(src, res); \
  38. std::cout << "append_dirname " << (*src ? src : "\"\"") << " -> " \
  39. << res << std::endl; \
  40. assert(res == std::string(">>>") + expected_res); \
  41. }
  42. void dirname_tests()
  43. {
  44. test_dirname("", ".");
  45. test_dirname("/usr/lib", "/usr");
  46. test_dirname("/usr/", "/");
  47. test_dirname("usr", ".");
  48. test_dirname("/", "/");
  49. test_dirname("..", ".");
  50. }
  51. void basename_tests()
  52. {
  53. test_basename("", "");
  54. test_basename("/usr/lib", "lib");
  55. test_basename("/usr/lib/", "lib");
  56. test_basename("usr", "usr");
  57. test_basename("/", "/");
  58. test_basename("..", "..");
  59. }
  60. void run_tests()
  61. {
  62. dirname_tests();
  63. basename_tests();
  64. }
  65. int main()
  66. {
  67. try
  68. {
  69. run_tests();
  70. return 0;
  71. }
  72. catch(const std::exception &ex)
  73. {
  74. std::cerr << ex.what() << '\n';
  75. }
  76. return 1;
  77. }