blob: 117bd18b4ccd419ee12cf31716a9dd1ae372caec [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 integer division by zero. // Test that results before and after optimization are the same. // VMOptions=--optimization-counter-threshold=10 --no-use-osr --no-background-compilation import "package:expect/expect.dart"; num divBy(num a, num b) => a ~/ b; main() { // Dividing integers by zero is an error. Expect.throws(() => divBy(1, 0)); Expect.throws(() => divBy(0, 0)); // Dividing doubles by zero is an error (result is never finite). Expect.throws(() => divBy(1.0, 0)); Expect.throws(() => divBy(1, 0.0)); Expect.throws(() => divBy(1, -0.0)); Expect.throws(() => divBy(1.0, 0.0)); // Double division yielding infinity is an error, even when not dividing // by zero. Expect.throws(() => divBy(double.maxFinite, 0.5)); Expect.throws(() => divBy(1, double.minPositive)); Expect.throws(() => divBy(double.infinity, 2.0)); Expect.throws(() => divBy(-double.maxFinite, 0.5)); Expect.throws(() => divBy(-1, double.minPositive)); Expect.throws(() => divBy(-double.infinity, 2.0)); // Double division yielding NaN is an error. Expect.throws(() => divBy(0.0, 0.0)); Expect.throws(() => divBy(double.infinity, double.infinity)); Expect.throws(() => divBy(-0.0, 0.0)); Expect.throws(() => divBy(-double.infinity, double.infinity)); // Truncating division containing a double truncates to max integer // on non-web. num one = 1; if (one is! double) { var minInt = -0x8000000000000000; var maxInt = minInt - 1; Expect.isTrue(maxInt > 0); // Not on web. Expect.equals(divBy(double.maxFinite, 2), maxInt); Expect.equals(divBy(-double.maxFinite, 2), minInt); Expect.equals(divBy(maxInt, 0.25), maxInt); Expect.equals(divBy(minInt, 0.25), minInt); } }