array_funTest.cc 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. #include "array_fun.h"
  2. #include <cppunit/extensions/HelperMacros.h>
  3. using namespace aria2::expr;
  4. namespace aria2 {
  5. class array_funTest : public CppUnit::TestFixture {
  6. CPPUNIT_TEST_SUITE(array_funTest);
  7. CPPUNIT_TEST(testArray_negate);
  8. CPPUNIT_TEST(testArray_and);
  9. CPPUNIT_TEST(testArrayLength);
  10. CPPUNIT_TEST(testArrayWrapper);
  11. CPPUNIT_TEST_SUITE_END();
  12. public:
  13. void testBit_negate();
  14. void testBit_and();
  15. void testArray_negate();
  16. void testArray_and();
  17. void testArrayLength();
  18. void testArrayWrapper();
  19. struct X {
  20. int m;
  21. };
  22. };
  23. CPPUNIT_TEST_SUITE_REGISTRATION(array_funTest);
  24. void array_funTest::testArray_negate()
  25. {
  26. unsigned char a[] = {0xaa, 0x55};
  27. CPPUNIT_ASSERT_EQUAL((unsigned char)0x55, (~array(a))[0]);
  28. CPPUNIT_ASSERT_EQUAL((unsigned char)0xaa, (~array((unsigned char*)a))[1]);
  29. CPPUNIT_ASSERT_EQUAL((unsigned char)0xaa, (~~array(a))[0]);
  30. CPPUNIT_ASSERT_EQUAL((unsigned char)0x55, (~~array(a))[1]);
  31. }
  32. void array_funTest::testArray_and()
  33. {
  34. unsigned char a1[] = {0xaa, 0x55};
  35. unsigned char a2[] = {0x1a, 0x25};
  36. CPPUNIT_ASSERT_EQUAL((unsigned char)0x0a, (array(a1) & array(a2))[0]);
  37. CPPUNIT_ASSERT_EQUAL((unsigned char)0x05, (array(a1) & array(a2))[1]);
  38. CPPUNIT_ASSERT_EQUAL((unsigned char)0xa0, (array(a1) & ~array(a2))[0]);
  39. CPPUNIT_ASSERT_EQUAL((unsigned char)0x50, (array(a1) & ~array(a2))[1]);
  40. CPPUNIT_ASSERT_EQUAL((unsigned char)0xa0, (~array(a2) & array(a1))[0]);
  41. CPPUNIT_ASSERT_EQUAL((unsigned char)0x50, (~array(a2) & array(a1))[1]);
  42. CPPUNIT_ASSERT_EQUAL((unsigned char)0x45, (~array(a1) & ~array(a2))[0]);
  43. CPPUNIT_ASSERT_EQUAL((unsigned char)0x8a, (~array(a1) & ~array(a2))[1]);
  44. }
  45. void array_funTest::testArrayLength()
  46. {
  47. int64_t ia[] = {1, 2, 3, 4, 5};
  48. CPPUNIT_ASSERT_EQUAL((size_t)5, arraySize(ia));
  49. // This causes compile error under clang and gcc v3.4.3 opensolaris
  50. // 5.11
  51. // int64_t zeroLengthArray[] = {};
  52. // CPPUNIT_ASSERT_EQUAL((size_t)0, arraySize(zeroLengthArray));
  53. }
  54. namespace {
  55. void arrayPtrCast(struct array_funTest::X* x) {}
  56. } // namespace
  57. namespace {
  58. void arrayPtrConstCast(const struct array_funTest::X* x) {}
  59. } // namespace
  60. namespace {
  61. void arrayWrapperConst(const array_wrapper<int, 10>& array)
  62. {
  63. CPPUNIT_ASSERT_EQUAL(9, array[9]);
  64. }
  65. } // namespace
  66. void array_funTest::testArrayWrapper()
  67. {
  68. array_wrapper<int, 10> a1;
  69. CPPUNIT_ASSERT_EQUAL((size_t)10, a1.size());
  70. for (size_t i = 0; i < a1.size(); ++i) {
  71. a1[i] = i;
  72. }
  73. CPPUNIT_ASSERT_EQUAL(9, a1[9]);
  74. array_wrapper<int, 10> a2 = a1;
  75. CPPUNIT_ASSERT_EQUAL(9, a2[9]);
  76. arrayWrapperConst(a2);
  77. array_wrapper<struct X, 10> x1;
  78. arrayPtrCast(x1);
  79. arrayPtrConstCast(x1);
  80. }
  81. } // namespace aria2