SequenceTest.cc 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. #include "Sequence.h"
  2. #include <deque>
  3. #include <cppunit/extensions/HelperMacros.h>
  4. namespace aria2 {
  5. class SequenceTest:public CppUnit::TestFixture {
  6. CPPUNIT_TEST_SUITE(SequenceTest);
  7. CPPUNIT_TEST(testParseAndNext);
  8. CPPUNIT_TEST(testParseAndNext2);
  9. CPPUNIT_TEST(testFlush);
  10. CPPUNIT_TEST_SUITE_END();
  11. public:
  12. void testParseAndNext();
  13. void testParseAndNext2();
  14. void testFlush();
  15. };
  16. CPPUNIT_TEST_SUITE_REGISTRATION(SequenceTest);
  17. typedef Sequence<int> IntSequence;
  18. void SequenceTest::testParseAndNext()
  19. {
  20. IntSequence::Value params[] = {
  21. IntSequence::Value(1, 2),
  22. IntSequence::Value(3, 9),
  23. IntSequence::Value(10, 11),
  24. };
  25. IntSequence seq = IntSequence(IntSequence::Values(&params[0], &params[3]));
  26. CPPUNIT_ASSERT(seq.hasNext());
  27. CPPUNIT_ASSERT_EQUAL(1, seq.next());
  28. CPPUNIT_ASSERT(seq.hasNext());
  29. CPPUNIT_ASSERT_EQUAL(3, seq.next());
  30. CPPUNIT_ASSERT(seq.hasNext());
  31. CPPUNIT_ASSERT_EQUAL(4, seq.next());
  32. CPPUNIT_ASSERT(seq.hasNext());
  33. CPPUNIT_ASSERT_EQUAL(5, seq.next());
  34. CPPUNIT_ASSERT(seq.hasNext());
  35. CPPUNIT_ASSERT_EQUAL(6, seq.next());
  36. CPPUNIT_ASSERT(seq.hasNext());
  37. CPPUNIT_ASSERT_EQUAL(7, seq.next());
  38. CPPUNIT_ASSERT(seq.hasNext());
  39. CPPUNIT_ASSERT_EQUAL(8, seq.next());
  40. CPPUNIT_ASSERT(seq.hasNext());
  41. CPPUNIT_ASSERT_EQUAL(10, seq.next());
  42. CPPUNIT_ASSERT(!seq.hasNext());
  43. CPPUNIT_ASSERT_EQUAL(0, seq.next());
  44. }
  45. void SequenceTest::testParseAndNext2()
  46. {
  47. IntSequence::Value params[] = {
  48. IntSequence::Value(1, 2),
  49. };
  50. IntSequence seq = IntSequence(IntSequence::Values(&params[0], &params[1]));
  51. CPPUNIT_ASSERT(seq.hasNext());
  52. CPPUNIT_ASSERT_EQUAL(1, seq.next());
  53. CPPUNIT_ASSERT(!seq.hasNext());
  54. CPPUNIT_ASSERT_EQUAL(0, seq.next());
  55. }
  56. void SequenceTest::testFlush()
  57. {
  58. IntSequence::Value params[] = {
  59. IntSequence::Value(1, 2),
  60. IntSequence::Value(3, 9),
  61. IntSequence::Value(10, 11),
  62. };
  63. IntSequence seq = IntSequence(IntSequence::Values(&params[0], &params[3]));
  64. std::deque<int> r = seq.flush();
  65. int answers[] = { 1, 3, 4, 5, 6, 7, 8, 10 };
  66. CPPUNIT_ASSERT(std::equal(r.begin(), r.end(), &answers[0]));
  67. }
  68. } // namespace aria2