|
| 1 | +#include "CppUnitTest.h" |
| 2 | + |
| 3 | +#include <atlstr.h> |
| 4 | +#include <Windows.h> |
| 5 | +#include <tchar.h> |
| 6 | +#include <string> |
| 7 | +#include <atltypes.h> |
| 8 | + |
| 9 | +#include <YY/Base/Containers/Span.h> |
| 10 | + |
| 11 | +using namespace Microsoft::VisualStudio::CppUnitTestFramework; |
| 12 | +using namespace YY; |
| 13 | + |
| 14 | +namespace Microsoft::VisualStudio::CppUnitTestFramework |
| 15 | +{ |
| 16 | + template<> |
| 17 | + inline std::wstring ToString<YY::Span<const YY::uchar_t>>(const YY::Span<const YY::uchar_t>& _oValue) |
| 18 | + { |
| 19 | + std::wstring _szResult; |
| 20 | + _szResult += L'{'; |
| 21 | + |
| 22 | + _szResult.append(_oValue.GetData(), _oValue.GetLength()); |
| 23 | + |
| 24 | + _szResult += L'}'; |
| 25 | + |
| 26 | + return _szResult; |
| 27 | + } |
| 28 | +} |
| 29 | + |
| 30 | +namespace UnitTest |
| 31 | +{ |
| 32 | + TEST_CLASS(Span) |
| 33 | + { |
| 34 | + public: |
| 35 | + |
| 36 | + TEST_METHOD(IndexOf) |
| 37 | + { |
| 38 | + const YY::Span<const YY::uchar_t> _sTest(_S("0123456789"), 10); |
| 39 | + { |
| 40 | + Assert::AreEqual(_sTest.IndexOf(YY::uchar_t('0')), size_t(0)); |
| 41 | + Assert::AreEqual(_sTest.IndexOf(YY::uchar_t('7')), size_t(7)); |
| 42 | + Assert::AreEqual(_sTest.IndexOf(YY::uchar_t('9')), size_t(9)); |
| 43 | + Assert::AreEqual(_sTest.IndexOf(YY::uchar_t('a')), YY::kuInvalidIndex); |
| 44 | + |
| 45 | + Assert::AreEqual(_sTest.IndexOf(YY::uchar_t('0'), 1), YY::kuInvalidIndex); |
| 46 | + Assert::AreEqual(_sTest.IndexOf(YY::uchar_t('7'), 1), size_t(7)); |
| 47 | + Assert::AreEqual(_sTest.IndexOf(YY::uchar_t('9'), 1), size_t(9)); |
| 48 | + Assert::AreEqual(_sTest.IndexOf(YY::uchar_t('a'), 1), YY::kuInvalidIndex); |
| 49 | + |
| 50 | + Assert::AreEqual(_sTest.IndexOf(YY::uchar_t('0'), 1, 7), YY::kuInvalidIndex); |
| 51 | + Assert::AreEqual(_sTest.IndexOf(YY::uchar_t('7'), 1, 6), YY::kuInvalidIndex); |
| 52 | + Assert::AreEqual(_sTest.IndexOf(YY::uchar_t('7'), 1, 7), size_t(7)); |
| 53 | + Assert::AreEqual(_sTest.IndexOf(YY::uchar_t('9'), 1, 8), YY::kuInvalidIndex); |
| 54 | + Assert::AreEqual(_sTest.IndexOf(YY::uchar_t('9'), 1, 9), size_t(9)); |
| 55 | + Assert::AreEqual(_sTest.IndexOf(YY::uchar_t('9'), 1, 10), size_t(9)); |
| 56 | + Assert::AreEqual(_sTest.IndexOf(YY::uchar_t('a'), 1), YY::kuInvalidIndex); |
| 57 | + |
| 58 | + } |
| 59 | + |
| 60 | + { |
| 61 | + Assert::AreEqual(_sTest.IndexOf(YY::Span<const YY::uchar_t>(_S("012"), 3)), size_t(0)); |
| 62 | + Assert::AreEqual(_sTest.IndexOf(YY::Span<const YY::uchar_t>(_S("123"), 3)), size_t(1)); |
| 63 | + Assert::AreEqual(_sTest.IndexOf(YY::Span<const YY::uchar_t>(_S("789"), 3)), size_t(7)); |
| 64 | + Assert::AreEqual(_sTest.IndexOf(YY::Span<const YY::uchar_t>(_S("890"), 3)), YY::kuInvalidIndex); |
| 65 | + |
| 66 | + |
| 67 | + Assert::AreEqual(_sTest.IndexOf(YY::Span<const YY::uchar_t>(_S("12"), 2), 0, 2), YY::kuInvalidIndex); |
| 68 | + Assert::AreEqual(_sTest.IndexOf(YY::Span<const YY::uchar_t>(_S("12"), 2), 0, 3), size_t(1)); |
| 69 | + Assert::AreEqual(_sTest.IndexOf(YY::Span<const YY::uchar_t>(_S("12"), 2), 1, 3), size_t(1)); |
| 70 | + } |
| 71 | + } |
| 72 | + |
| 73 | + TEST_METHOD(IndexOfAny) |
| 74 | + { |
| 75 | + YY::Span<const YY::uchar_t> _sTest(_S("0123456789"), 10); |
| 76 | + |
| 77 | + { |
| 78 | + Assert::AreEqual(_sTest.IndexOfAny(YY::Span<const YY::uchar_t>(_S("0123456789"), 10)), size_t(0)); |
| 79 | + Assert::AreEqual(_sTest.IndexOfAny(YY::Span<const YY::uchar_t>(_S("123456789"), 9)), size_t(1)); |
| 80 | + Assert::AreEqual(_sTest.IndexOfAny(YY::Span<const YY::uchar_t>(_S("9"), 1)), size_t(9)); |
| 81 | + Assert::AreEqual(_sTest.IndexOfAny(YY::Span<const YY::uchar_t>(_S("abcd"), 4)), YY::kuInvalidIndex); |
| 82 | + } |
| 83 | + } |
| 84 | + |
| 85 | + TEST_METHOD(SplitAndTakeFirst) |
| 86 | + { |
| 87 | + YY::Span<const YY::uchar_t> _szTemp(_S("01|34|6789"), 10); |
| 88 | + |
| 89 | + size_t _uNextIndex = 0; |
| 90 | + Assert::AreEqual(_szTemp.SplitAndTakeFirst(YY::uchar_t('|'), _uNextIndex, &_uNextIndex), YY::Span<const YY::uchar_t>(_S("01"), 2)); |
| 91 | + Assert::AreEqual(_uNextIndex, size_t(3)); |
| 92 | + |
| 93 | + Assert::AreEqual(_szTemp.SplitAndTakeFirst(YY::uchar_t('|'), _uNextIndex, &_uNextIndex), YY::Span<const YY::uchar_t>(_S("34"), 2)); |
| 94 | + Assert::AreEqual(_uNextIndex, size_t(6)); |
| 95 | + |
| 96 | + Assert::AreEqual(_szTemp.SplitAndTakeFirst(YY::uchar_t('|'), _uNextIndex, &_uNextIndex), YY::Span<const YY::uchar_t>(_S("6789"), 4)); |
| 97 | + Assert::AreEqual(_uNextIndex, size_t(10)); |
| 98 | + } |
| 99 | + }; |
| 100 | +} |
0 commit comments