blob: 47462e57da6d89538ce4e7b8d8dac9b43a5b7bb1 [file] [log] [blame]
// Copyright (c) 2021, 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.
// Tests invoking JS BigInt functionality through js_util. This interop
// requires usage of the operator functions exposed through js_util.
@JS()
library js_util_bigint_test;
import 'package:js/js.dart';
import 'package:js/js_util.dart' as js_util;
import 'package:expect/minitest.dart';
@JS('BigInt')
external Object BigInt(Object value);
main() {
group('bigint', () {
test('addition', () {
final one = BigInt('1');
final two = BigInt('2');
final three = BigInt('3');
expect(js_util.strictEqual(js_util.add(one, two), three), isTrue);
expect(js_util.strictEqual(js_util.add(one, one), three), isFalse);
});
test('subtraction', () {
final one = BigInt('1');
final two = BigInt('2');
final three = BigInt('3');
expect(js_util.strictEqual(js_util.subtract(three, one), two), isTrue);
expect(js_util.strictEqual(js_util.subtract(three, two), two), isFalse);
});
test('multiplication', () {
final two = BigInt('2');
final four = BigInt('4');
expect(js_util.strictEqual(js_util.multiply(two, two), four), isTrue);
expect(js_util.strictEqual(js_util.multiply(two, four), four), isFalse);
});
test('division', () {
final two = BigInt('2');
final four = BigInt('4');
expect(js_util.strictEqual(js_util.divide(four, two), two), isTrue);
expect(js_util.strictEqual(js_util.divide(four, four), two), isFalse);
});
test('exponentiation', () {
final two = BigInt('2');
final three = BigInt('3');
final nine = BigInt('9');
expect(
js_util.strictEqual(js_util.exponentiate(three, two), nine), isTrue);
expect(js_util.strictEqual(js_util.exponentiate(three, three), nine),
isFalse);
});
test('exponentiation2', () {
final two = BigInt('2');
final three = BigInt('3');
final five = BigInt('5');
expect(
js_util.add(
'', js_util.exponentiate(js_util.exponentiate(five, three), two)),
'15625');
expect(
js_util.add(
'', js_util.exponentiate(five, js_util.exponentiate(three, two))),
'1953125');
});
test('modulo', () {
final zero = BigInt('0');
final three = BigInt('3');
final nine = BigInt('9');
expect(js_util.strictEqual(js_util.modulo(nine, three), zero), isTrue);
expect(js_util.strictEqual(js_util.modulo(nine, three), nine), isFalse);
});
test('equality', () {
final one = BigInt('1');
expect(js_util.equal(one, 1), isTrue);
expect(js_util.strictEqual(one, 1), isFalse);
expect(js_util.notEqual(one, 1), isFalse);
expect(js_util.strictNotEqual(one, 1), isTrue);
});
test('comparisons', () {
final zero = BigInt('0');
final one = BigInt('1');
final otherOne = BigInt('1');
expect(js_util.greaterThan(one, zero), isTrue);
expect(js_util.greaterThan(one, 0), isTrue);
expect(js_util.greaterThan(2, one), isTrue);
expect(js_util.greaterThanOrEqual(one, otherOne), isTrue);
expect(js_util.greaterThanOrEqual(one, 1), isTrue);
expect(js_util.greaterThanOrEqual(one, 2), isFalse);
expect(js_util.lessThan(one, zero), isFalse);
expect(js_util.lessThan(zero, one), isTrue);
expect(js_util.lessThan(one, 2), isTrue);
expect(js_util.lessThan(one, 0), isFalse);
expect(js_util.lessThanOrEqual(one, otherOne), isTrue);
expect(js_util.lessThanOrEqual(one, 1), isTrue);
expect(js_util.lessThanOrEqual(2, one), isFalse);
});
});
}