iterator_ut.cpp 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #include "iterator.h"
  2. #include <library/cpp/testing/unittest/registar.h>
  3. Y_UNIT_TEST_SUITE(TIterator) {
  4. Y_UNIT_TEST(ToForwardIteratorTest) {
  5. TVector<int> x = {1, 2};
  6. UNIT_ASSERT_VALUES_EQUAL(*std::prev(x.end()), *ToForwardIterator(x.rbegin()));
  7. UNIT_ASSERT_VALUES_EQUAL(*ToForwardIterator(std::prev(x.rend())), *x.begin());
  8. }
  9. }
  10. Y_UNIT_TEST_SUITE(TInputRangeAdaptor) {
  11. class TSquaresGenerator: public TInputRangeAdaptor<TSquaresGenerator> {
  12. public:
  13. const i64* Next() {
  14. Current_ = State_ * State_;
  15. ++State_;
  16. // Never return nullptr => we have infinite range!
  17. return &Current_;
  18. }
  19. private:
  20. i64 State_ = 0.0;
  21. i64 Current_ = 0.0;
  22. };
  23. Y_UNIT_TEST(TSquaresGenerator) {
  24. i64 cur = 0;
  25. for (i64 sqr : TSquaresGenerator{}) {
  26. UNIT_ASSERT_VALUES_EQUAL(cur * cur, sqr);
  27. if (++cur > 10) {
  28. break;
  29. }
  30. }
  31. }
  32. class TUrlPart: public TInputRangeAdaptor<TUrlPart> {
  33. public:
  34. TUrlPart(const TStringBuf& url)
  35. : Url_(url)
  36. {
  37. }
  38. NStlIterator::TProxy<TStringBuf> Next() {
  39. return Url_.NextTok('/');
  40. }
  41. private:
  42. TStringBuf Url_;
  43. };
  44. Y_UNIT_TEST(TUrlPart) {
  45. const TVector<TStringBuf> expected = {TStringBuf("yandex.ru"), TStringBuf("search?")};
  46. auto expected_part = expected.begin();
  47. for (const TStringBuf& part : TUrlPart(TStringBuf("yandex.ru/search?"))) {
  48. UNIT_ASSERT_VALUES_EQUAL(part, *expected_part);
  49. ++expected_part;
  50. }
  51. UNIT_ASSERT(expected_part == expected.end());
  52. }
  53. }