Skip to content

Commit

Permalink
♻️ refactor(interval)!: move inverted logic from `IntervalSizeExten…
Browse files Browse the repository at this point in the history
…sion` (#223)
  • Loading branch information
albertms10 committed Jul 22, 2023
1 parent 0ed198b commit ae50033
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 48 deletions.
18 changes: 16 additions & 2 deletions lib/src/interval/interval.dart
Original file line number Diff line number Diff line change
Expand Up @@ -194,9 +194,23 @@ final class Interval implements Comparable<Interval> {
/// Interval.m3.inverted == Interval.M6
/// Interval.A4.inverted == Interval.d5
/// Interval.M7.inverted == Interval.m2
/// Interval.P1.inverted == Interval.P8
/// (-Interval.P1).inverted == -Interval.P8
/// ```
Interval get inverted => Interval._(size.inverted, quality.inverted);
///
/// If this [Interval] is greater than an octave, the simplified inversion is
/// returned instead.
///
/// Example:
/// ```dart
/// Interval.m9 == Interval.M7
/// Interval.P11.inverted == Interval.P5
/// ```
Interval get inverted {
final diff = 9 - size.simplified.abs();
final invertedSize = (diff.isNegative ? diff.abs() + 2 : diff) * size.sign;

return Interval._(invertedSize, quality.inverted);
}

/// Returns the simplified of this [Interval].
///
Expand Down
25 changes: 0 additions & 25 deletions lib/src/interval/interval_size_extension.dart
Original file line number Diff line number Diff line change
Expand Up @@ -119,29 +119,4 @@ extension IntervalSizeExtension on int {

return _sizeAbsShift.nModExcludeZero(8) * sign;
}

/// Returns the inverted of this [Interval.size].
///
/// Example:
/// ```dart
/// 7.inverted == 2
/// 4.inverted == 5
/// (-1).inverted == -8
/// ```
///
/// If this [Interval.size] is greater than an octave, the simplified
/// inversion is returned instead.
///
/// Example:
/// ```dart
/// 11.inverted == 5
/// 9.inverted == 7
/// ```
int get inverted {
assert(this != 0, 'Size must be non-zero');

final diff = 9 - simplified.abs();

return (diff.isNegative ? diff.abs() + 2 : diff) * sign;
}
}
21 changes: 0 additions & 21 deletions test/src/interval/interval_size_extension_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -161,26 +161,5 @@ void main() {
expect(22.simplified, 8);
});
});

group('.inverted', () {
test('should throw an assertion error when size is zero', () {
expect(() => 0.inverted, throwsA(isA<AssertionError>()));
});

test('should return the inverted Interval size', () {
expect((-13).inverted, -3);
expect((-10).inverted, -6);
expect((-9).inverted, -7);
expect((-8).inverted, -1);
expect((-4).inverted, -5);
expect((-2).inverted, -7);
expect(2.inverted, 7);
expect(4.inverted, 5);
expect(8.inverted, 1);
expect(9.inverted, 7);
expect(10.inverted, 6);
expect(13.inverted, 3);
});
});
});
}
28 changes: 28 additions & 0 deletions test/src/interval/interval_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -259,6 +259,29 @@ void main() {

group('.inverted', () {
test('should return the inverted of this Interval', () {
expect((-Interval.M13).inverted, -Interval.m3);
expect((-Interval.m13).inverted, -Interval.M3);
expect((-Interval.P11).inverted, -Interval.P5);
expect((-Interval.M9).inverted, -Interval.m7);
expect((-Interval.m9).inverted, -Interval.M7);
expect((-Interval.A8).inverted, -Interval.d1);
expect((-Interval.P8).inverted, -Interval.P1);
expect((-Interval.d8).inverted, -Interval.A1);
expect((-Interval.M7).inverted, -Interval.m2);
expect((-Interval.m7).inverted, -Interval.M2);
expect((-Interval.M6).inverted, -Interval.m3);
expect((-Interval.m6).inverted, -Interval.M3);
expect((-Interval.A5).inverted, -Interval.d4);
expect((-Interval.d5).inverted, -Interval.A4);
expect((-Interval.A4).inverted, -Interval.d5);
expect((-Interval.d4).inverted, -Interval.A5);
expect((-Interval.M3).inverted, -Interval.m6);
expect((-Interval.m3).inverted, -Interval.M6);
expect((-Interval.M2).inverted, -Interval.m7);
expect((-Interval.m2).inverted, -Interval.M7);
expect((-Interval.A1).inverted, -Interval.d8);
expect((-Interval.P1).inverted, -Interval.P8);
expect((-Interval.d1).inverted, -Interval.A8);
expect(Interval.d1.inverted, Interval.A8);
expect(Interval.P1.inverted, Interval.P8);
expect(Interval.A1.inverted, Interval.d8);
Expand All @@ -277,6 +300,11 @@ void main() {
expect(Interval.d8.inverted, Interval.A1);
expect(Interval.P8.inverted, Interval.P1);
expect(Interval.A8.inverted, Interval.d1);
expect(Interval.m9.inverted, Interval.M7);
expect(Interval.M9.inverted, Interval.m7);
expect(Interval.P11.inverted, Interval.P5);
expect(Interval.m13.inverted, Interval.M3);
expect(Interval.M13.inverted, Interval.m3);
});
});

Expand Down

0 comments on commit ae50033

Please sign in to comment.