Line data Source code
1 : // Copyright 2017 the V8 project authors. All rights reserved.
2 : // Use of this source code is governed by a BSD-style license that can be
3 : // found in the LICENSE file.
4 :
5 : #ifdef V8_INTL_SUPPORT
6 :
7 : #include "src/builtins/builtins-intl.h"
8 : #include "test/cctest/cctest.h"
9 :
10 : namespace v8 {
11 : namespace internal {
12 :
13 : // This operator overloading enables CHECK_EQ to be used with
14 : // std::vector<NumberFormatSpan>
15 0 : bool operator==(const NumberFormatSpan& lhs, const NumberFormatSpan& rhs) {
16 168 : return memcmp(&lhs, &rhs, sizeof(lhs)) == 0;
17 : }
18 : template <typename _CharT, typename _Traits, typename T>
19 : std::basic_ostream<_CharT, _Traits>& operator<<(
20 : std::basic_ostream<_CharT, _Traits>& self, const std::vector<T>& v) {
21 : self << "[";
22 : for (auto it = v.begin(); it < v.end();) {
23 : self << *it;
24 : it++;
25 : if (it < v.end()) self << ", ";
26 : }
27 : return self << "]";
28 : }
29 : template <typename _CharT, typename _Traits>
30 : std::basic_ostream<_CharT, _Traits>& operator<<(
31 : std::basic_ostream<_CharT, _Traits>& self, const NumberFormatSpan& part) {
32 : return self << "{" << part.field_id << "," << part.begin_pos << ","
33 : << part.end_pos << "}";
34 : }
35 :
36 36 : void test_flatten_regions_to_parts(
37 : const std::vector<NumberFormatSpan>& regions,
38 : const std::vector<NumberFormatSpan>& expected_parts) {
39 36 : std::vector<NumberFormatSpan> mutable_regions = regions;
40 36 : std::vector<NumberFormatSpan> parts = FlattenRegionsToParts(&mutable_regions);
41 36 : CHECK_EQ(expected_parts, parts);
42 36 : }
43 :
44 23724 : TEST(FlattenRegionsToParts) {
45 : test_flatten_regions_to_parts(
46 : std::vector<NumberFormatSpan>{
47 : NumberFormatSpan(-1, 0, 10), NumberFormatSpan(1, 2, 8),
48 : NumberFormatSpan(2, 2, 4), NumberFormatSpan(3, 6, 8),
49 : },
50 : std::vector<NumberFormatSpan>{
51 : NumberFormatSpan(-1, 0, 2), NumberFormatSpan(2, 2, 4),
52 : NumberFormatSpan(1, 4, 6), NumberFormatSpan(3, 6, 8),
53 : NumberFormatSpan(-1, 8, 10),
54 18 : });
55 : test_flatten_regions_to_parts(
56 : std::vector<NumberFormatSpan>{
57 : NumberFormatSpan(0, 0, 1),
58 : },
59 : std::vector<NumberFormatSpan>{
60 : NumberFormatSpan(0, 0, 1),
61 18 : });
62 : test_flatten_regions_to_parts(
63 : std::vector<NumberFormatSpan>{
64 : NumberFormatSpan(-1, 0, 1), NumberFormatSpan(0, 0, 1),
65 : },
66 : std::vector<NumberFormatSpan>{
67 : NumberFormatSpan(0, 0, 1),
68 18 : });
69 : test_flatten_regions_to_parts(
70 : std::vector<NumberFormatSpan>{
71 : NumberFormatSpan(0, 0, 1), NumberFormatSpan(-1, 0, 1),
72 : },
73 : std::vector<NumberFormatSpan>{
74 : NumberFormatSpan(0, 0, 1),
75 18 : });
76 : test_flatten_regions_to_parts(
77 : std::vector<NumberFormatSpan>{
78 : NumberFormatSpan(-1, 0, 10), NumberFormatSpan(1, 0, 1),
79 : NumberFormatSpan(2, 0, 2), NumberFormatSpan(3, 0, 3),
80 : NumberFormatSpan(4, 0, 4), NumberFormatSpan(5, 0, 5),
81 : NumberFormatSpan(15, 5, 10), NumberFormatSpan(16, 6, 10),
82 : NumberFormatSpan(17, 7, 10), NumberFormatSpan(18, 8, 10),
83 : NumberFormatSpan(19, 9, 10),
84 : },
85 : std::vector<NumberFormatSpan>{
86 : NumberFormatSpan(1, 0, 1), NumberFormatSpan(2, 1, 2),
87 : NumberFormatSpan(3, 2, 3), NumberFormatSpan(4, 3, 4),
88 : NumberFormatSpan(5, 4, 5), NumberFormatSpan(15, 5, 6),
89 : NumberFormatSpan(16, 6, 7), NumberFormatSpan(17, 7, 8),
90 : NumberFormatSpan(18, 8, 9), NumberFormatSpan(19, 9, 10),
91 18 : });
92 :
93 : // : 4
94 : // : 22 33 3
95 : // : 11111 22
96 : // input regions: 0000000 111
97 : // : ------------
98 : // output parts: 0221340--231
99 : test_flatten_regions_to_parts(
100 : std::vector<NumberFormatSpan>{
101 : NumberFormatSpan(-1, 0, 12), NumberFormatSpan(0, 0, 7),
102 : NumberFormatSpan(1, 9, 12), NumberFormatSpan(1, 1, 6),
103 : NumberFormatSpan(2, 9, 11), NumberFormatSpan(2, 1, 3),
104 : NumberFormatSpan(3, 10, 11), NumberFormatSpan(3, 4, 6),
105 : NumberFormatSpan(4, 5, 6),
106 : },
107 : std::vector<NumberFormatSpan>{
108 : NumberFormatSpan(0, 0, 1), NumberFormatSpan(2, 1, 3),
109 : NumberFormatSpan(1, 3, 4), NumberFormatSpan(3, 4, 5),
110 : NumberFormatSpan(4, 5, 6), NumberFormatSpan(0, 6, 7),
111 : NumberFormatSpan(-1, 7, 9), NumberFormatSpan(2, 9, 10),
112 : NumberFormatSpan(3, 10, 11), NumberFormatSpan(1, 11, 12),
113 18 : });
114 6 : }
115 :
116 : } // namespace internal
117 71154 : } // namespace v8
118 :
119 : #endif // V8_INTL_SUPPORT
|