blob: 35e06bbd000e93d59c9d8fe8bbe6a245ef6cb2fb [file] [log] [blame]
 // Copyright (c) 2019, 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. import "dart:math"; import "dart:typed_data"; import "package:expect/expect.dart"; // This test tests check null for Simd Operations final rng = Random(); // Returns null @pragma('vm:never-inline') Float64x2 f() { var v = rng.nextInt(1000000000) + 100; // Ensures that v is not a perfect number while (v == 496 || v == 8128 || v == 33550336) { v = rng.nextInt(1000000000) + 100; } // Checks if v is a perfect number var sum = 0; for (var i = 1; i * i <= v; i++) { if (v % i == 0) { sum += i; if (i * i != v) { sum += v ~/ i; } } } if (sum == v) { // Always false return Float64x2(sum.toDouble(), 10.0); } return null; } main() { closure1() { final a = Float64x2(0.0, 1.0); final b = f(); return a - b; } closure2() { final a = f() == null ? Float64x2(0.0, 1.0) : null; final b = f(); final c = b / a; return c + a; } closure3() { final a = f(); final b = f(); return a * b; } closure4() { final a = Float64x2(0.0, 1.0); final b = Float64x2(2.0, 4.0); return b - a; } Expect.throwsArgumentError(closure1); Expect.throwsNoSuchMethodError(closure2); Expect.throwsNoSuchMethodError(closure3); final r = closure4(); Expect.equals(r.x, 2.0); Expect.equals(r.y, 3.0); }