128 lines
3.5 KiB
Dart
128 lines
3.5 KiB
Dart
import 'package:adaptive_number/adaptive_number.dart';
|
|
import 'package:test/test.dart';
|
|
|
|
// Since both implementations of Number only forward most method call,
|
|
// tests are kept minimal and should mainly concentrate on verifying that no
|
|
// wrong operator and/or method is being called because of a mix up
|
|
void main() {
|
|
group('utility functions', () {
|
|
test('retrieve value as int', () {
|
|
expect(Number.zero.intValue, 0);
|
|
expect(Number.one.intValue, 1);
|
|
expect(Number.two.intValue, 2);
|
|
expect(Number(42).intValue, 42);
|
|
});
|
|
});
|
|
|
|
group('other overwrites', () {
|
|
test('hash code', () {
|
|
expect(Number.zero.hashCode, 0.hashCode);
|
|
expect(Number.one.hashCode, 1.hashCode);
|
|
expect(Number.two.hashCode, 2.hashCode);
|
|
expect(Number(42).hashCode, 42);
|
|
});
|
|
|
|
test('to string', () {
|
|
expect(Number.one.toString(), '1');
|
|
expect((-Number.one).toString(), '-1');
|
|
});
|
|
|
|
test('toRadixString', () {
|
|
expect(Number(42).toRadixString(2), '101010');
|
|
});
|
|
|
|
test('abs', () {
|
|
expect(Number(-42).abs(), Number(42));
|
|
});
|
|
|
|
test('compare to', () {
|
|
expect(Number.one.compareTo(Number.two), -1);
|
|
expect(Number.two.compareTo(Number.one), 1);
|
|
expect(Number.one.compareTo(Number.one), 0);
|
|
});
|
|
});
|
|
|
|
group('operator tests', () {
|
|
test('add', () {
|
|
expect(Number.one + Number.two, Number(3));
|
|
});
|
|
|
|
test('subtract', () {
|
|
expect(Number.two - Number.one, Number.one);
|
|
});
|
|
|
|
test('invert', () {
|
|
expect((-Number.one).intValue, -1);
|
|
expect((-Number.zero).intValue, 0);
|
|
});
|
|
|
|
test('multiply', () {
|
|
expect(Number.two * Number(3), Number(6));
|
|
});
|
|
|
|
test('& bitwise and', () {
|
|
expect(Number(1234) & Number(9876), Number(1168));
|
|
expect(Number(-1234) & Number(9876), Number(8708));
|
|
});
|
|
|
|
test('>> bitwise shift right', () {
|
|
expect(Number(23423) >> 8, Number(91));
|
|
expect(Number(-87653) >> 12, Number(-22));
|
|
});
|
|
|
|
test('<< bitwise shift left', () {
|
|
expect(Number(23423) << 8, Number(5996288));
|
|
expect(Number(-87653) << 12, Number(-359026688));
|
|
});
|
|
|
|
test('^ bitwise xor', () {
|
|
expect(Number(1234) ^ Number(9876), Number(8774));
|
|
});
|
|
|
|
test('| bitwise or', () {
|
|
expect(Number(1234) | Number(9876), Number(9942));
|
|
expect(Number(-1234) | Number(9876), Number(-66));
|
|
});
|
|
|
|
test('< less than', () {
|
|
expect(Number.one < Number.two, isTrue);
|
|
expect(Number.two < Number.one, isFalse);
|
|
});
|
|
|
|
test('< less than or equal', () {
|
|
expect(Number.two <= Number.one, isFalse);
|
|
expect(Number.one <= Number.two, isTrue);
|
|
expect(Number.two <= Number.two, isTrue);
|
|
});
|
|
|
|
test('< greater than', () {
|
|
expect(Number.two > Number.one, isTrue);
|
|
expect(Number.one > Number.two, isFalse);
|
|
});
|
|
|
|
test('< greater than or equal', () {
|
|
expect(Number.two >= Number.one, isTrue);
|
|
expect(Number.one >= Number.two, isFalse);
|
|
expect(Number.two >= Number.two, isTrue);
|
|
});
|
|
|
|
test('modulo', () {
|
|
expect(Number.two % Number.one, Number.zero);
|
|
expect(Number(3) % Number.one, Number.zero);
|
|
expect(Number.one % Number.two, Number.one);
|
|
});
|
|
|
|
test('truncating division', () {
|
|
expect(Number(1000) ~/ Number(-3), Number(-333));
|
|
});
|
|
|
|
test('equals', () {
|
|
expect(Number(0) == Number.zero, isTrue);
|
|
expect(Number(1) == Number.one, isTrue);
|
|
expect(Number(2) == Number.two, isTrue);
|
|
|
|
expect(Number(1) == Number.zero, isFalse);
|
|
expect(Number.one == Number.zero, isFalse);
|
|
});
|
|
});
|
|
}
|