mirror of
https://github.com/dart-lang/sdk
synced 2024-09-19 15:11:35 +00:00
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
|
||
|
]);
|
||
|
}
|