blob: c8e3bdbfb5188c7644589b06404a1c22581a3e51 [file] [log] [blame]
// Copyright (c) 2013, 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.
// Test division by power of two.
// Test that results before and after optimization are the same.
// VMOptions=--optimization-counter-threshold=10 --no-use-osr
import "package:expect/expect.dart";
// [function, [list of tuples argument/result]].
var expectedResults = [
[
divBy1,
[
[134217730, 134217730],
[-134217730, -134217730],
[10, 10],
[-10, -10]
]
],
[
divByNeg1,
[
[134217730, -134217730],
[-134217730, 134217730],
[10, -10],
[-10, 10]
]
],
[
divBy2,
[
[134217730, 67108865],
[-134217730, -67108865],
[10, 5],
[-10, -5]
]
],
[
divByNeg2,
[
[134217730, -67108865],
[-134217730, 67108865],
[10, -5],
[-10, 5]
]
],
[
divBy4,
[
[134217730, 33554432],
[-134217730, -33554432],
[10, 2],
[-10, -2]
]
],
[
divByNeg4,
[
[134217730, -33554432],
[-134217730, 33554432],
[10, -2],
[-10, 2]
]
],
[
divBy134217728,
[
[134217730, 1],
[-134217730, -1],
[10, 0],
[-10, 0]
]
],
[
divByNeg134217728,
[
[134217730, -1],
[-134217730, 1],
[10, 0],
[-10, 0]
]
],
// Use different functions for 64 bit arguments.
[
divBy4_,
[
[549755813990, 137438953497],
[-549755813990, -137438953497],
[288230925907525632, 72057731476881408],
[-288230925907525632, -72057731476881408]
]
],
[
divByNeg4_,
[
[549755813990, -137438953497],
[-549755813990, 137438953497],
[288230925907525632, -72057731476881408],
[-288230925907525632, 72057731476881408]
]
],
[
divBy549755813888,
[
[549755813990, 1],
[-549755813990, -1],
[288230925907525632, 524289],
[-288230925907525632, -524289]
]
],
[
divByNeg549755813888,
[
[549755813990, -1],
[-549755813990, 1],
[288230925907525632, -524289],
[-288230925907525632, 524289]
]
],
];
divBy0(a) => a ~/ 0;
divBy1(a) => a ~/ 1;
divByNeg1(a) => a ~/ -1;
divBy2(a) => a ~/ 2;
divByNeg2(a) => a ~/ -2;
divBy4(a) => a ~/ 4;
divByNeg4(a) => a ~/ -4;
divBy134217728(a) => a ~/ 134217728;
divByNeg134217728(a) => a ~/ -134217728;
divBy4_(a) => a ~/ 4;
divByNeg4_(a) => a ~/ -4;
divBy549755813888(a) => a ~/ 549755813888;
divByNeg549755813888(a) => a ~/ -549755813888;
main() {
for (int i = 0; i < 20; i++) {
for (var e in expectedResults) {
Function f = e[0];
List values = e[1];
for (var v in values) {
int arg = v[0];
int res = v[1];
Expect.equals(res, f(arg));
}
}
Expect.throws(() => divBy0(4),
(e) => e is IntegerDivisionByZeroException || e is UnsupportedError);
}
}