From 02af6526f1af844e931e6b4007df02bbb90eabe7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Albert=20Ma=C3=B1osa?= Date: Mon, 8 May 2023 01:40:41 +0200 Subject: [PATCH] fix(interval_size_extension): address simplified compound interval sizes (#95) --- lib/src/interval/interval_size_extension.dart | 6 +++++- test/src/interval/interval_size_extension_test.dart | 8 ++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/lib/src/interval/interval_size_extension.dart b/lib/src/interval/interval_size_extension.dart index 54b8da39..77f78e17 100644 --- a/lib/src/interval/interval_size_extension.dart +++ b/lib/src/interval/interval_size_extension.dart @@ -113,11 +113,15 @@ extension IntervalSizeExtension on int { /// 13.simplified == 6 /// (-9).simplified == -2 /// 8.simplified == 8 + /// (-22).simplified == -8 /// ``` int get simplified { assert(this != 0, 'Size must be non-zero'); + final sizeAbs = abs(); - return isCompound ? (abs().nModExcludeZero(8) + 1) * sign : this; + return isCompound + ? ((sizeAbs + sizeAbs ~/ 8).nModExcludeZero(8)) * sign + : this; } /// Returns the inverted of this [Interval.size]. diff --git a/test/src/interval/interval_size_extension_test.dart b/test/src/interval/interval_size_extension_test.dart index f2578934..343fb535 100644 --- a/test/src/interval/interval_size_extension_test.dart +++ b/test/src/interval/interval_size_extension_test.dart @@ -160,6 +160,10 @@ void main() { }); test('should return the simplified Interval size', () { + expect((-22).simplified, -8); + expect((-17).simplified, -3); + expect((-16).simplified, -2); + expect((-15).simplified, -8); expect((-13).simplified, -6); expect((-10).simplified, -3); expect((-8).simplified, -8); @@ -170,6 +174,10 @@ void main() { expect(8.simplified, 8); expect(10.simplified, 3); expect(13.simplified, 6); + expect(15.simplified, 8); + expect(16.simplified, 2); + expect(17.simplified, 3); + expect(22.simplified, 8); }); });