TestAlgorithm.cpp (2317B)
1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */ 3 /* This Source Code Form is subject to the terms of the Mozilla Public 4 * License, v. 2.0. If a copy of the MPL was not distributed with this file, 5 * You can obtain one at http://mozilla.org/MPL/2.0/. */ 6 7 #include "mozilla/Algorithm.h" 8 #include "mozilla/Assertions.h" 9 10 #include <iterator> 11 12 static constexpr bool even(int32_t n) { return !(n & 1); } 13 static constexpr bool odd(int32_t n) { return (n & 1); } 14 15 using namespace mozilla; 16 17 void TestAllOf() { 18 using std::begin; 19 using std::end; 20 21 constexpr static int32_t arr1[3] = {1, 2, 3}; 22 MOZ_RELEASE_ASSERT(!AllOf(begin(arr1), end(arr1), even)); 23 MOZ_RELEASE_ASSERT(!AllOf(begin(arr1), end(arr1), odd)); 24 static_assert(!AllOf(arr1, arr1 + std::size(arr1), even), "1-1"); 25 static_assert(!AllOf(arr1, arr1 + std::size(arr1), odd), "1-2"); 26 27 constexpr static int32_t arr2[3] = {1, 3, 5}; 28 MOZ_RELEASE_ASSERT(!AllOf(begin(arr2), end(arr2), even)); 29 MOZ_RELEASE_ASSERT(AllOf(begin(arr2), end(arr2), odd)); 30 static_assert(!AllOf(arr2, arr2 + std::size(arr2), even), "2-1"); 31 static_assert(AllOf(arr2, arr2 + std::size(arr2), odd), "2-2"); 32 33 constexpr static int32_t arr3[3] = {2, 4, 6}; 34 MOZ_RELEASE_ASSERT(AllOf(begin(arr3), end(arr3), even)); 35 MOZ_RELEASE_ASSERT(!AllOf(begin(arr3), end(arr3), odd)); 36 static_assert(AllOf(arr3, arr3 + std::size(arr3), even), "3-1"); 37 static_assert(!AllOf(arr3, arr3 + std::size(arr3), odd), "3-2"); 38 } 39 40 void TestAnyOf() { 41 using std::begin; 42 using std::end; 43 44 // The Android NDK's STL doesn't support `constexpr` `std::array::begin`, see 45 // bug 1677484. Hence using a raw array here. 46 constexpr int32_t arr1[1] = {0}; 47 static_assert(!AnyOf(arr1, arr1, even)); 48 static_assert(!AnyOf(arr1, arr1, odd)); 49 50 constexpr int32_t arr2[] = {1}; 51 static_assert(!AnyOf(begin(arr2), end(arr2), even)); 52 static_assert(AnyOf(begin(arr2), end(arr2), odd)); 53 54 constexpr int32_t arr3[] = {2}; 55 static_assert(AnyOf(begin(arr3), end(arr3), even)); 56 static_assert(!AnyOf(begin(arr3), end(arr3), odd)); 57 58 constexpr int32_t arr4[] = {1, 2}; 59 static_assert(AnyOf(begin(arr4), end(arr4), even)); 60 static_assert(AnyOf(begin(arr4), end(arr4), odd)); 61 } 62 63 int main() { 64 TestAllOf(); 65 TestAnyOf(); 66 return 0; 67 }