Chromium Code Reviews| Index: tests/corelib/shuffle_test.dart |
| diff --git a/tests/corelib/shuffle_test.dart b/tests/corelib/shuffle_test.dart |
| index 786dc91a3274cef8d2f43e1531d7b018fcc5e85b..a2fc42c0dec2f50a1ec1a037b6ebe745c8f0a292 100644 |
| --- a/tests/corelib/shuffle_test.dart |
| +++ b/tests/corelib/shuffle_test.dart |
| @@ -5,6 +5,7 @@ |
| // Dart test for List.shuffle. |
| library shuffle_test; |
| import "dart:typed_data"; |
| +import "dart:math" show Random; |
| import "package:expect/expect.dart"; |
| main() { |
| @@ -35,6 +36,8 @@ main() { |
| // Chance of changing 266 times in a row should be < 1:1e80. |
| Expect.fail("List changes every time."); |
| } |
| + |
| + testRandom(); |
| } |
| void testShuffle(list) { |
| @@ -90,3 +93,40 @@ void testShuffle(list) { |
| Expect.fail("Didn't shuffle at all, p < 1:1e80: $list"); |
| } |
| } |
| + |
| + |
| +// Checks that the "random" argument to shuffle is used. |
| +testRandom() { |
| + List randomNums = [37, 87, 42, 157, 252, 17]; |
| + List numbers = new List.generate(25, (x) => x); |
| + List l1 = numbers.toList()..shuffle(new MockRandom(randomNums)); |
| + for (int i = 0; i < 50; i++) { |
| + // With same random sequence, we get the same shuffling each time. |
| + List l2 = numbers.toList()..shuffle(new MockRandom(randomNums)); |
| + Expect.listEquals(l1, l2); |
| + } |
| +} |
| + |
| +class MockRandom implements Random { |
| + final List<int> _values; |
| + int index = 0; |
| + MockRandom(this._values); |
| + |
| + int nextInt(int limit) { |
| + int next = _values[index]; |
| + index = (index + 1) % _values.length; |
| + return next % limit; |
| + } |
| + |
| + double nextDouble() { |
| + int next = _values[index]; |
| + index = (index + 1) % _values.length; |
| + return next / 256.0; |
| + } |
| + |
| + bool nextBool() { |
| + int next = _values[index]; |
| + index = (index + 1) % _values.length; |
| + return next.isEven; |
| + } |
| +} |
|
bakster
2013/10/04 11:19:34
Please refactor:
int _next() => _values[index++
|