mirror of
https://github.com/dart-lang/sdk
synced 2024-09-18 21:41:19 +00:00
b998b10f3e
Change-Id: I3a31632ce28fb87a410b759d092c7ebc9393574d Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/128306 Commit-Queue: Bob Nystrom <rnystrom@google.com> Auto-Submit: Bob Nystrom <rnystrom@google.com> Reviewed-by: Lasse R.H. Nielsen <lrn@google.com>
314 lines
3 KiB
Dart
314 lines
3 KiB
Dart
// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
|
|
// for details. All rights reserved. Use of this source code is governed by a
|
|
// BSD-style license that can be found in the LICENSE file.
|
|
|
|
// Dart test for sort routines.
|
|
library sort_test;
|
|
|
|
import "package:expect/expect.dart";
|
|
import 'sort_helper.dart';
|
|
|
|
main() {
|
|
var compare = (num a, num b) => a.compareTo(b);
|
|
var sort = (List<num> list) => list.sort(compare);
|
|
new SortHelper(sort, compare).run();
|
|
|
|
compare = (num a, num b) => -a.compareTo(b);
|
|
new SortHelper(sort, compare).run();
|
|
|
|
var intCompare = (int a, int b) => a.compareTo(b);
|
|
|
|
// Pivot-candidate indices: 7, 15, 22, 29, 37
|
|
// Test Dutch flag partitioning (candidates 2 and 4 are the same).
|
|
var list = [
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0 /**/,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
1 /**/,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1 /**/,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1 /**/,
|
|
2,
|
|
2,
|
|
2,
|
|
2,
|
|
2,
|
|
2,
|
|
2,
|
|
2 /**/,
|
|
2,
|
|
2,
|
|
2,
|
|
2,
|
|
2,
|
|
2,
|
|
2
|
|
];
|
|
list.sort(intCompare);
|
|
Expect.listEquals(list, <int>[
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
2,
|
|
2,
|
|
2,
|
|
2,
|
|
2,
|
|
2,
|
|
2,
|
|
2,
|
|
2,
|
|
2,
|
|
2,
|
|
2,
|
|
2,
|
|
2,
|
|
2
|
|
]);
|
|
|
|
list = [
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
1 /**/,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0 /**/,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
0 /**/,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
0 /**/,
|
|
2 /**/,
|
|
2,
|
|
2,
|
|
2,
|
|
2,
|
|
2,
|
|
2,
|
|
2 /**/,
|
|
2,
|
|
2,
|
|
2,
|
|
2,
|
|
2,
|
|
2,
|
|
2
|
|
];
|
|
list.sort(intCompare);
|
|
Expect.listEquals(list, <int>[
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
2,
|
|
2,
|
|
2,
|
|
2,
|
|
2,
|
|
2,
|
|
2,
|
|
2,
|
|
2,
|
|
2,
|
|
2,
|
|
2,
|
|
2,
|
|
2,
|
|
2
|
|
]);
|
|
|
|
// Pivots: 1 and 8.
|
|
// The second partition will be big (more than 2/3 of the list), and an
|
|
// optimization kicks in that removes the pivots from the partition.
|
|
list = [
|
|
0,
|
|
9,
|
|
0,
|
|
9,
|
|
3,
|
|
9,
|
|
0,
|
|
1 /**/,
|
|
1,
|
|
0,
|
|
1,
|
|
9,
|
|
8,
|
|
2,
|
|
1,
|
|
1 /**/,
|
|
4,
|
|
5,
|
|
2,
|
|
5,
|
|
0,
|
|
1,
|
|
8 /**/,
|
|
8,
|
|
8,
|
|
5,
|
|
2,
|
|
2,
|
|
9,
|
|
8 /**/,
|
|
8,
|
|
4,
|
|
4,
|
|
1,
|
|
5,
|
|
3,
|
|
2,
|
|
8 /**/,
|
|
5,
|
|
1,
|
|
2,
|
|
8,
|
|
5,
|
|
6,
|
|
8
|
|
];
|
|
list.sort(intCompare);
|
|
Expect.listEquals(list, <int>[
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
2,
|
|
2,
|
|
2,
|
|
2,
|
|
2,
|
|
2,
|
|
3,
|
|
3,
|
|
4,
|
|
4,
|
|
4,
|
|
5,
|
|
5,
|
|
5,
|
|
5,
|
|
5,
|
|
5,
|
|
6,
|
|
8,
|
|
8,
|
|
8,
|
|
8,
|
|
8,
|
|
8,
|
|
8,
|
|
8,
|
|
8,
|
|
9,
|
|
9,
|
|
9,
|
|
9,
|
|
9
|
|
]);
|
|
}
|