Subversion Repositories Games.Descent

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. #include "d_range.h"
  2. #include "d_zip.h"
  3. #include <array>
  4. #include <vector>
  5.  
  6. #define BOOST_TEST_DYN_LINK
  7. #define BOOST_TEST_MODULE Rebirth zip
  8. #include <boost/test/unit_test.hpp>
  9.  
  10. /* Test that a zipped range is empty when the component range is empty.
  11.  */
  12. BOOST_AUTO_TEST_CASE(zip_empty)
  13. {
  14.         bool empty = true;
  15.         std::array<int, 0> a;
  16.         for (auto &&v : zip(a))
  17.         {
  18.                 (void)v;
  19.                 empty = false;
  20.         }
  21.         BOOST_TEST(empty);
  22. }
  23.  
  24. /* Test that a zipped range is the length of the first sequence.
  25.  *
  26.  * Note that there is no test for when the first sequence is longer than
  27.  * the later ones, since such a test would increment some iterators past
  28.  * their end.
  29.  */
  30. BOOST_AUTO_TEST_CASE(zip_length)
  31. {
  32.         unsigned count = 0;
  33.         std::array<int, 2> a;
  34.         short b[4];
  35.         for (auto &&v : zip(a, b))
  36.         {
  37.                 (void)v;
  38.                 ++ count;
  39.         }
  40.         BOOST_TEST(count == a.size());
  41. }
  42.  
  43. /* Test that a zipped value references the underlying storage.
  44.  */
  45. BOOST_AUTO_TEST_CASE(zip_passthrough_modifications)
  46. {
  47.         std::array<int, 1> a{{1}};
  48.         short b[1]{2};
  49.         for (auto &&v : zip(a, b))
  50.         {
  51.                 ++ std::get<0>(v);
  52.                 ++ std::get<1>(v);
  53.         }
  54.         BOOST_TEST(a[0] == 2);
  55.         BOOST_TEST(b[0] == 3);
  56. }
  57.  
  58. /* Test that a zipped range can zip an xrange, and produce the correct
  59.  * underlying value.
  60.  */
  61. BOOST_AUTO_TEST_CASE(zip_xrange)
  62. {
  63.         for (auto &&v : zip(xrange(1u)))
  64.         {
  65.                 BOOST_TEST(std::get<0>(v) == 0);
  66.         }
  67. }
  68.