Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(278)

Side by Side Diff: pkg/matcher/lib/src/numeric_matchers.dart

Issue 313563002: pkg/matcher: Reverting 36881,36896 while investigating dart2js checked crash (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « pkg/matcher/lib/src/map_matchers.dart ('k') | pkg/matcher/lib/src/operator_matchers.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library matcher.numeric_matchers; 5 part of matcher;
6 6
7 import 'interfaces.dart'; 7 /**
8 8 * Returns a matcher which matches if the match argument is greater
9 /// Returns a matcher which matches if the match argument is greater 9 * than the given [value].
10 /// than the given [value]. 10 */
11 Matcher greaterThan(value) => 11 Matcher greaterThan(value) =>
12 new _OrderingComparison(value, false, false, true, 'a value greater than'); 12 new _OrderingComparison(value, false, false, true, 'a value greater than');
13 13
14 /// Returns a matcher which matches if the match argument is greater 14 /**
15 /// than or equal to the given [value]. 15 * Returns a matcher which matches if the match argument is greater
16 * than or equal to the given [value].
17 */
16 Matcher greaterThanOrEqualTo(value) => 18 Matcher greaterThanOrEqualTo(value) =>
17 new _OrderingComparison(value, true, false, true, 19 new _OrderingComparison(value, true, false, true,
18 'a value greater than or equal to'); 20 'a value greater than or equal to');
19 21
20 /// Returns a matcher which matches if the match argument is less 22 /**
21 /// than the given [value]. 23 * Returns a matcher which matches if the match argument is less
24 * than the given [value].
25 */
22 Matcher lessThan(value) => 26 Matcher lessThan(value) =>
23 new _OrderingComparison(value, false, true, false, 'a value less than'); 27 new _OrderingComparison(value, false, true, false, 'a value less than');
24 28
25 /// Returns a matcher which matches if the match argument is less 29 /**
26 /// than or equal to the given [value]. 30 * Returns a matcher which matches if the match argument is less
31 * than or equal to the given [value].
32 */
27 Matcher lessThanOrEqualTo(value) => 33 Matcher lessThanOrEqualTo(value) =>
28 new _OrderingComparison(value, true, true, false, 34 new _OrderingComparison(value, true, true, false,
29 'a value less than or equal to'); 35 'a value less than or equal to');
30 36
31 /// A matcher which matches if the match argument is zero. 37 /**
38 * A matcher which matches if the match argument is zero.
39 */
32 const Matcher isZero = 40 const Matcher isZero =
33 const _OrderingComparison(0, true, false, false, 'a value equal to'); 41 const _OrderingComparison(0, true, false, false, 'a value equal to');
34 42
35 43
36 /// A matcher which matches if the match argument is non-zero. 44 /**
45 * A matcher which matches if the match argument is non-zero.
46 */
37 const Matcher isNonZero = 47 const Matcher isNonZero =
38 const _OrderingComparison(0, false, true, true, 'a value not equal to'); 48 const _OrderingComparison(0, false, true, true, 'a value not equal to');
39 49
40 /// A matcher which matches if the match argument is positive. 50 /**
51 * A matcher which matches if the match argument is positive.
52 */
41 const Matcher isPositive = 53 const Matcher isPositive =
42 const _OrderingComparison(0, false, false, true, 'a positive value', false); 54 const _OrderingComparison(0, false, false, true, 'a positive value', false);
43 55
44 /// A matcher which matches if the match argument is zero or negative. 56 /**
57 * A matcher which matches if the match argument is zero or negative.
58 */
45 const Matcher isNonPositive = 59 const Matcher isNonPositive =
46 const _OrderingComparison(0, true, true, false, 60 const _OrderingComparison(0, true, true, false,
47 'a non-positive value', false); 61 'a non-positive value', false);
48 62
49 /// A matcher which matches if the match argument is negative. 63 /**
64 * A matcher which matches if the match argument is negative.
65 */
50 const Matcher isNegative = 66 const Matcher isNegative =
51 const _OrderingComparison(0, false, true, false, 'a negative value', false); 67 const _OrderingComparison(0, false, true, false, 'a negative value', false);
52 68
53 /// A matcher which matches if the match argument is zero or positive. 69 /**
70 * A matcher which matches if the match argument is zero or positive.
71 */
54 const Matcher isNonNegative = 72 const Matcher isNonNegative =
55 const _OrderingComparison(0, true, false, true, 73 const _OrderingComparison(0, true, false, true,
56 'a non-negative value', false); 74 'a non-negative value', false);
57 75
58 bool _isNumeric(value) { 76 bool _isNumeric(value) {
59 return value is num; 77 return value is num;
60 } 78 }
61 79
62 // TODO(kevmoo) Note that matchers that use _OrderingComparison only use
63 // `==` and `<` operators to evaluate the match. Or change the matcher.
64 class _OrderingComparison extends Matcher { 80 class _OrderingComparison extends Matcher {
65 /// Expected value. 81 /** Expected value. */
66 final _value; 82 final _value;
67 /// What to return if actual == expected 83 /** What to return if actual == expected */
68 final bool _equalValue; 84 final bool _equalValue;
69 /// What to return if actual < expected 85 /** What to return if actual < expected */
70 final bool _lessThanValue; 86 final bool _lessThanValue;
71 /// What to return if actual > expected 87 /** What to return if actual > expected */
72 final bool _greaterThanValue; 88 final bool _greaterThanValue;
73 /// Textual name of the inequality 89 /** Textual name of the inequality */
74 final String _comparisonDescription; 90 final String _comparisonDescription;
75 /// Whether to include the expected value in the description 91 /** Whether to include the expected value in the description */
76 final bool _valueInDescription; 92 final bool _valueInDescription;
77 93
78 const _OrderingComparison( 94 const _OrderingComparison(
79 this._value, 95 this._value,
80 this._equalValue, 96 this._equalValue,
81 this._lessThanValue, 97 this._lessThanValue,
82 this._greaterThanValue, 98 this._greaterThanValue,
83 this._comparisonDescription, 99 this._comparisonDescription,
84 [bool valueInDescription = true]) : 100 [valueInDescription = true]) :
85 this._valueInDescription = valueInDescription; 101 this._valueInDescription = valueInDescription;
86 102
87 bool matches(item, Map matchState) { 103 bool matches(item, Map matchState) {
88 if (item == _value) { 104 if (item == _value) {
89 return _equalValue; 105 return _equalValue;
90 } else if (item < _value) { 106 } else if (item < _value) {
91 return _lessThanValue; 107 return _lessThanValue;
92 } else { 108 } else {
93 return _greaterThanValue; 109 return _greaterThanValue;
94 } 110 }
95 } 111 }
96 112
97 Description describe(Description description) { 113 Description describe(Description description) {
98 if (_valueInDescription) { 114 if (_valueInDescription) {
99 return description.add(_comparisonDescription).add(' '). 115 return description.add(_comparisonDescription).add(' ').
100 addDescriptionOf(_value); 116 addDescriptionOf(_value);
101 } else { 117 } else {
102 return description.add(_comparisonDescription); 118 return description.add(_comparisonDescription);
103 } 119 }
104 } 120 }
105 121
106 Description describeMismatch(item, Description mismatchDescription, 122 Description describeMismatch(item, Description mismatchDescription,
107 Map matchState, bool verbose) { 123 Map matchState, bool verbose) {
108 mismatchDescription.add('is not '); 124 mismatchDescription.add('is not ');
109 return describe(mismatchDescription); 125 return describe(mismatchDescription);
110 } 126 }
111 } 127 }
112 128
113 /// Returns a matcher which matches if the match argument is within [delta] 129 /**
114 /// of some [value]; i.e. if the match argument is greater than 130 * Returns a matcher which matches if the match argument is within [delta]
115 /// than or equal [value]-[delta] and less than or equal to [value]+[delta]. 131 * of some [value]; i.e. if the match argument is greater than
116 Matcher closeTo(num value, num delta) => new _IsCloseTo(value, delta); 132 * than or equal [value]-[delta] and less than or equal to [value]+[delta].
133 */
134 Matcher closeTo(value, delta) => new _IsCloseTo(value, delta);
117 135
118 class _IsCloseTo extends Matcher { 136 class _IsCloseTo extends Matcher {
119 final num _value, _delta; 137 final num _value, _delta;
120 138
121 const _IsCloseTo(this._value, this._delta); 139 const _IsCloseTo(this._value, this._delta);
122 140
123 bool matches(item, Map matchState) { 141 bool matches(item, Map matchState) {
124 if (!_isNumeric(item)) { 142 if (!_isNumeric(item)) {
125 return false; 143 return false;
126 } 144 }
(...skipping 15 matching lines...) Expand all
142 } else { 160 } else {
143 var diff = item - _value; 161 var diff = item - _value;
144 if (diff < 0) diff = -diff; 162 if (diff < 0) diff = -diff;
145 return mismatchDescription. 163 return mismatchDescription.
146 add(' differs by '). 164 add(' differs by ').
147 addDescriptionOf(diff); 165 addDescriptionOf(diff);
148 } 166 }
149 } 167 }
150 } 168 }
151 169
152 /// Returns a matcher which matches if the match argument is greater 170 /**
153 /// than or equal to [low] and less than or equal to [high]. 171 * Returns a matcher which matches if the match argument is greater
154 Matcher inInclusiveRange(num low, num high) => 172 * than or equal to [low] and less than or equal to [high].
155 new _InRange(low, high, true, true); 173 */
174 Matcher inInclusiveRange(low, high) => new _InRange(low, high, true, true);
156 175
157 /// Returns a matcher which matches if the match argument is greater 176 /**
158 /// than [low] and less than [high]. 177 * Returns a matcher which matches if the match argument is greater
159 Matcher inExclusiveRange(num low, num high) => 178 * than [low] and less than [high].
160 new _InRange(low, high, false, false); 179 */
180 Matcher inExclusiveRange(low, high) => new _InRange(low, high, false, false);
161 181
162 /// Returns a matcher which matches if the match argument is greater 182 /**
163 /// than [low] and less than or equal to [high]. 183 * Returns a matcher which matches if the match argument is greater
164 Matcher inOpenClosedRange(num low, num high) => 184 * than [low] and less than or equal to [high].
165 new _InRange(low, high, false, true); 185 */
186 Matcher inOpenClosedRange(low, high) => new _InRange(low, high, false, true);
166 187
167 /// Returns a matcher which matches if the match argument is greater 188 /**
168 /// than or equal to a [low] and less than [high]. 189 * Returns a matcher which matches if the match argument is greater
169 Matcher inClosedOpenRange(num low, num high) => 190 * than or equal to a [low] and less than [high].
170 new _InRange(low, high, true, false); 191 */
192 Matcher inClosedOpenRange(low, high) => new _InRange(low, high, true, false);
171 193
172 class _InRange extends Matcher { 194 class _InRange extends Matcher {
173 final num _low, _high; 195 final num _low, _high;
174 final bool _lowMatchValue, _highMatchValue; 196 final bool _lowMatchValue, _highMatchValue;
175 197
176 const _InRange(this._low, this._high, 198 const _InRange(this._low, this._high,
177 this._lowMatchValue, this._highMatchValue); 199 this._lowMatchValue, this._highMatchValue);
178 200
179 bool matches(value, Map matchState) { 201 bool matches(value, Map matchState) {
180 if (value is! num) { 202 if (value is! num) {
(...skipping 21 matching lines...) Expand all
202 if (item is !num) { 224 if (item is !num) {
203 return mismatchDescription. 225 return mismatchDescription.
204 addDescriptionOf(item). 226 addDescriptionOf(item).
205 add(' not numeric'); 227 add(' not numeric');
206 } else { 228 } else {
207 return super.describeMismatch(item, mismatchDescription, 229 return super.describeMismatch(item, mismatchDescription,
208 matchState, verbose); 230 matchState, verbose);
209 } 231 }
210 } 232 }
211 } 233 }
234
OLDNEW
« no previous file with comments | « pkg/matcher/lib/src/map_matchers.dart ('k') | pkg/matcher/lib/src/operator_matchers.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698