Skip to content

Commit

Permalink
Merge pull request #133 from rishabhdeepsingh/nullable_num
Browse files Browse the repository at this point in the history
  • Loading branch information
passsy committed Oct 15, 2021
2 parents 1536c6e + 9e878ab commit ee4bde8
Show file tree
Hide file tree
Showing 4 changed files with 92 additions and 0 deletions.
2 changes: 2 additions & 0 deletions example/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ void main() {
[4, 5, 6]
];
final flattened = nestedList.flatten(); // [1, 2, 3, 4, 5, 6]

123.0.minus(null); // 123.0
}

class Dog {
Expand Down
1 change: 1 addition & 0 deletions lib/dartx.dart
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import 'package:crypto/crypto.dart' as crypto;
export 'package:characters/characters.dart';
export 'package:time/time.dart';

part 'src/arithmetic.dart';
part 'src/comparable.dart';
part 'src/comparator.dart';
part 'src/function.dart';
Expand Down
15 changes: 15 additions & 0 deletions lib/src/arithmetic.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
part of dartx;

extension NumArithmeticX<T extends num> on T {
/// Minus val if if it not null else returns `this`
T? minus(T? val) => val == null ? this : this - val as T?;

/// returns null if val is null else returns `this` - val
T? minusOrNull(T? val) => val == null ? null : this - val as T?;

/// Adds val if if it not null else returns `this`
T? plus(T? val) => val == null ? this : this + val as T?;

/// returns null if val is null else returns `this` + val
T? plusOrNull(T? val) => val == null ? null : this + val as T?;
}
74 changes: 74 additions & 0 deletions test/arithmetic_test.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
import 'package:test/test.dart';
import 'package:dartx/dartx.dart';

void main() {
group('num', () {
test('num?.plus() and num?.minus()', () {
const num? value = null;
expect(value?.minus(1), null);
expect(value?.minus(1) ?? -1, -1);
expect((value ?? 0) - 1, -1);

expect(value?.plus(1), null);
expect(value?.plus(1) ?? 1, 1);
expect((value ?? 0) + 1, 1);
});
test('num?.plusOrNull() and num?.minusOrNull()', () {
const num? value = null;
const num one = 1;
expect(one.plus(value), 1);
expect(one.plusOrNull(value), null);
expect(one.plusOrNull(value) ?? 1, 1);

expect(one.minus(value), 1);
expect(one.minusOrNull(value), null);
expect(one.minusOrNull(value) ?? 1, 1);
});
});

group('int', () {
test('int?.plus() and int?.minus()', () {
const int? value = null;
expect(value?.minus(1), null);
expect(value?.minus(1) ?? -1, -1);
expect((value ?? 0) - 1, -1);

expect(value?.plus(1), null);
expect(value?.plus(1) ?? 1, 1);
expect((value ?? 0) + 1, 1);
});
test('int?.plusOrNull() and int?.minusOrNull()', () {
const int? value = null;
expect(1.plus(value), 1);
expect(1.plusOrNull(value), null);
expect(1.plusOrNull(value) ?? 1, 1);

expect(1.minus(value), 1);
expect(1.minusOrNull(value), null);
expect(1.minusOrNull(value) ?? 1, 1);
});
});

group('double', () {
test('double?.plus() and double?.minus()', () {
const double? value = null;
expect(value?.minus(1), null);
expect(value?.minus(1) ?? -1, -1);
expect((value ?? 0) - 1, -1);

expect(value?.plus(1), null);
expect(value?.plus(1) ?? 1, 1);
expect((value ?? 0) + 1, 1);
});
test('double?.plusOrNull() and double?.minusOrNull()', () {
const double? value = null;
expect(1.0.plus(value), 1.0);
expect(1.0.plusOrNull(value), null);
expect(1.0.plusOrNull(value) ?? 1.0, 1.0);

expect(1.0.minus(value), 1.0);
expect(1.0.minusOrNull(value), null);
expect(1.0.minusOrNull(value) ?? 1.0, 1.0);
});
});
}

0 comments on commit ee4bde8

Please sign in to comment.