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

Unified Diff: test/codegen/expect/corelib/shuffle_test.js

Issue 2128353002: Check in codegen test expectations. (Closed) Base URL: git@github.com:dart-lang/dev_compiler.git@master
Patch Set: Created 4 years, 5 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « test/codegen/expect/corelib/set_to_string_test.js ('k') | test/codegen/expect/corelib/sort_test.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/codegen/expect/corelib/shuffle_test.js
diff --git a/test/codegen/expect/corelib/shuffle_test.js b/test/codegen/expect/corelib/shuffle_test.js
new file mode 100644
index 0000000000000000000000000000000000000000..60b6c3eab6953b5472858555cd775bae5a556e0f
--- /dev/null
+++ b/test/codegen/expect/corelib/shuffle_test.js
@@ -0,0 +1,159 @@
+dart_library.library('corelib/shuffle_test', null, /* Imports */[
+ 'dart_sdk',
+ 'expect'
+], function load__shuffle_test(exports, dart_sdk, expect) {
+ 'use strict';
+ const core = dart_sdk.core;
+ const _interceptors = dart_sdk._interceptors;
+ const typed_data = dart_sdk.typed_data;
+ const math = dart_sdk.math;
+ const dart = dart_sdk.dart;
+ const dartx = dart_sdk.dartx;
+ const expect$ = expect.expect;
+ const shuffle_test = Object.create(null);
+ let JSArrayOfint = () => (JSArrayOfint = dart.constFn(_interceptors.JSArray$(core.int)))();
+ let ListOfint = () => (ListOfint = dart.constFn(core.List$(core.int)))();
+ let intToint = () => (intToint = dart.constFn(dart.definiteFunctionType(core.int, [core.int])))();
+ let VoidTodynamic = () => (VoidTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [])))();
+ let VoidToint = () => (VoidToint = dart.constFn(dart.definiteFunctionType(core.int, [])))();
+ let VoidTobool = () => (VoidTobool = dart.constFn(dart.definiteFunctionType(core.bool, [])))();
+ let dynamicTovoid = () => (dynamicTovoid = dart.constFn(dart.definiteFunctionType(dart.void, [dart.dynamic])))();
+ shuffle_test.main = function() {
+ for (let size of JSArrayOfint().of([0, 1, 2, 3, 7, 15, 99, 1023])) {
+ let numbers = ListOfint().generate(size, dart.fn(x => x, intToint()));
+ shuffle_test.testShuffle(numbers[dartx.toList]({growable: true}));
+ shuffle_test.testShuffle(numbers[dartx.toList]({growable: false}));
+ shuffle_test.testShuffle((() => {
+ let _ = typed_data.Uint32List.new(size);
+ _[dartx.setAll](0, numbers);
+ return _;
+ })());
+ shuffle_test.testShuffle((() => {
+ let _ = typed_data.Int32List.new(size);
+ _[dartx.setAll](0, numbers);
+ return _;
+ })());
+ shuffle_test.testShuffle((() => {
+ let _ = typed_data.Uint16List.new(size);
+ _[dartx.setAll](0, numbers);
+ return _;
+ })());
+ shuffle_test.testShuffle((() => {
+ let _ = typed_data.Int16List.new(size);
+ _[dartx.setAll](0, numbers);
+ return _;
+ })());
+ shuffle_test.testShuffle((() => {
+ let _ = typed_data.Uint8List.new(size);
+ _[dartx.setAll](0, numbers);
+ return _;
+ })());
+ shuffle_test.testShuffle((() => {
+ let _ = typed_data.Int8List.new(size);
+ _[dartx.setAll](0, numbers);
+ return _;
+ })());
+ }
+ let l = JSArrayOfint().of([1, 2]);
+ success: {
+ for (let i = 0; i < 266; i++) {
+ let first = core.int._check(l[dartx.first]);
+ l[dartx.shuffle]();
+ if (dart.equals(l[dartx.first], first)) break success;
+ }
+ expect$.Expect.fail("List changes every time.");
+ }
+ shuffle_test.testRandom();
+ };
+ dart.fn(shuffle_test.main, VoidTodynamic());
+ shuffle_test.testShuffle = function(list) {
+ let copy = core.List._check(dart.dsend(list, 'toList'));
+ dart.dsend(list, 'shuffle');
+ if (dart.test(dart.dsend(dart.dload(list, 'length'), '<', 2))) {
+ expect$.Expect.listEquals(copy, core.List._check(list));
+ return;
+ }
+ let seen = dart.map();
+ for (let e of core.Iterable._check(list)) {
+ seen[dartx.set](e, dart.dsend(seen[dartx.putIfAbsent](e, dart.fn(() => 0, VoidToint())), '+', 1));
+ }
+ for (let e of copy) {
+ let remaining = core.int._check(seen[dartx.get](e));
+ remaining = dart.notNull(remaining) - 1;
+ if (remaining == 0) {
+ seen[dartx.remove](e);
+ } else {
+ seen[dartx.set](e, remaining);
+ }
+ }
+ expect$.Expect.isTrue(seen[dartx.isEmpty]);
+ function listsDifferent() {
+ for (let i = 0; i < dart.notNull(core.num._check(dart.dload(list, 'length'))); i++) {
+ if (!dart.equals(dart.dindex(list, i), copy[dartx.get](i))) return true;
+ }
+ return false;
+ }
+ dart.fn(listsDifferent, VoidTobool());
+ if (dart.test(dart.dsend(dart.dload(list, 'length'), '<', 59))) {
+ let limit = 1e+80;
+ let fact = 1.0;
+ for (let i = 2; i < dart.notNull(core.num._check(dart.dload(list, 'length'))); i++) {
+ fact = fact * i;
+ }
+ let combos = fact;
+ while (!dart.test(listsDifferent()) && combos < limit) {
+ dart.dsend(list, 'shuffle');
+ combos = combos * fact;
+ }
+ }
+ if (!dart.test(listsDifferent())) {
+ expect$.Expect.fail(dart.str`Didn't shuffle at all, p < 1:1e80: ${list}`);
+ }
+ };
+ dart.fn(shuffle_test.testShuffle, dynamicTovoid());
+ shuffle_test.testRandom = function() {
+ let randomNums = JSArrayOfint().of([37, 87, 42, 157, 252, 17]);
+ let numbers = core.List.generate(25, dart.fn(x => x, intToint()));
+ let l1 = numbers[dartx.toList]();
+ l1[dartx.shuffle](new shuffle_test.MockRandom(ListOfint()._check(randomNums)));
+ for (let i = 0; i < 50; i++) {
+ let l2 = numbers[dartx.toList]();
+ l2[dartx.shuffle](new shuffle_test.MockRandom(ListOfint()._check(randomNums)));
+ expect$.Expect.listEquals(l1, l2);
+ }
+ };
+ dart.fn(shuffle_test.testRandom, VoidTodynamic());
+ const _values = Symbol('_values');
+ const _next = Symbol('_next');
+ shuffle_test.MockRandom = class MockRandom extends core.Object {
+ new(values) {
+ this[_values] = values;
+ this.index = 0;
+ }
+ get [_next]() {
+ let next = this[_values][dartx.get](this.index);
+ this.index = (dart.notNull(this.index) + 1)[dartx['%']](this[_values][dartx.length]);
+ return next;
+ }
+ nextInt(limit) {
+ return this[_next][dartx['%']](limit);
+ }
+ nextDouble() {
+ return dart.notNull(this[_next]) / 256.0;
+ }
+ nextBool() {
+ return this[_next][dartx.isEven];
+ }
+ };
+ shuffle_test.MockRandom[dart.implements] = () => [math.Random];
+ dart.setSignature(shuffle_test.MockRandom, {
+ constructors: () => ({new: dart.definiteFunctionType(shuffle_test.MockRandom, [core.List$(core.int)])}),
+ methods: () => ({
+ nextInt: dart.definiteFunctionType(core.int, [core.int]),
+ nextDouble: dart.definiteFunctionType(core.double, []),
+ nextBool: dart.definiteFunctionType(core.bool, [])
+ })
+ });
+ // Exports:
+ exports.shuffle_test = shuffle_test;
+});
« no previous file with comments | « test/codegen/expect/corelib/set_to_string_test.js ('k') | test/codegen/expect/corelib/sort_test.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698