TestFlatten.cpp (2498B)
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 "Flatten.h" 8 #include "gtest/gtest.h" 9 #include "nsTArray.h" 10 11 namespace mozilla::dom::quota { 12 13 #ifdef __clang__ 14 # pragma clang diagnostic push 15 # pragma clang diagnostic ignored "-Wunreachable-code-loop-increment" 16 #endif 17 TEST(DOM_Quota_Flatten, FlatEmpty) 18 { 19 auto range = Flatten<int>(nsTArray<int>{}); 20 21 EXPECT_EQ(std::distance(range.begin(), range.end()), 0); 22 23 for (const auto& item : range) { 24 (void)item; 25 FAIL(); // should never execute 26 } 27 } 28 29 TEST(DOM_Quota_Flatten, NestedOuterEmpty) 30 { 31 auto range = Flatten<int>(nsTArray<CopyableTArray<int>>{}); 32 33 EXPECT_EQ(std::distance(range.begin(), range.end()), 0); 34 35 for (const auto& item : range) { 36 (void)item; 37 FAIL(); 38 } 39 } 40 41 TEST(DOM_Quota_Flatten, NestedInnerEmpty) 42 { 43 auto range = 44 Flatten<int>(nsTArray<CopyableTArray<int>>{CopyableTArray<int>{}}); 45 46 EXPECT_EQ(std::distance(range.begin(), range.end()), 0); 47 48 for (const auto& item : range) { 49 (void)item; 50 FAIL(); 51 } 52 } 53 #ifdef __clang__ 54 # pragma clang diagnostic pop 55 #endif 56 57 TEST(DOM_Quota_Flatten, NestedInnerSingular) 58 { 59 auto range = 60 Flatten<int>(nsTArray<CopyableTArray<int>>{CopyableTArray<int>{1}}); 61 62 EXPECT_EQ(std::distance(range.begin(), range.end()), 1); 63 64 nsTArray<int> flattened; 65 for (const auto& item : range) { 66 flattened.AppendElement(item); 67 } 68 69 EXPECT_EQ(nsTArray{1}, flattened); 70 } 71 72 TEST(DOM_Quota_Flatten, NestedInnerSingulars) 73 { 74 auto range = Flatten<int>(nsTArray<CopyableTArray<int>>{ 75 CopyableTArray<int>{1}, CopyableTArray<int>{2}}); 76 77 EXPECT_EQ(std::distance(range.begin(), range.end()), 2); 78 79 nsTArray<int> flattened; 80 for (const auto& item : range) { 81 flattened.AppendElement(item); 82 } 83 84 EXPECT_EQ((nsTArray<int>{{1, 2}}), flattened); 85 } 86 87 TEST(DOM_Quota_Flatten, NestedInnerNonSingulars) 88 { 89 auto range = Flatten<int>(nsTArray<CopyableTArray<int>>{ 90 CopyableTArray<int>{1, 2}, CopyableTArray<int>{3, 4}}); 91 92 EXPECT_EQ(std::distance(range.begin(), range.end()), 4); 93 94 nsTArray<int> flattened; 95 for (const auto& item : range) { 96 flattened.AppendElement(item); 97 } 98 99 EXPECT_EQ((nsTArray<int>{{1, 2, 3, 4}}), flattened); 100 } 101 102 } // namespace mozilla::dom::quota