From 637bd586f34fe93b343c1c65d6e235f61e369bac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Albert=20Ma=C3=B1osa?= Date: Wed, 12 Apr 2023 01:31:02 +0200 Subject: [PATCH] feat(intervals): add `isDissonant` getter (#43) --- lib/src/interval/intervals.dart | 12 ++++++++++++ test/src/interval/intervals_test.dart | 19 +++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/lib/src/interval/intervals.dart b/lib/src/interval/intervals.dart index 91ead13d..9610866e 100644 --- a/lib/src/interval/intervals.dart +++ b/lib/src/interval/intervals.dart @@ -124,6 +124,18 @@ enum Intervals { /// ``` bool get isCompound => ordinal > Intervals.octave.ordinal; + /// Whether this [Intervals] enum item is dissonant. + /// + /// Examples: + /// ```dart + /// Intervals.unison.isDissonant == false + /// Intervals.fifth.isDissonant == false + /// Intervals.seventh.isDissonant == true + /// Intervals.ninth.isDissonant == true + /// ``` + bool get isDissonant => + {Intervals.second, Intervals.seventh}.contains(simplified); + /// Returns a simplified this [Intervals] enum item. /// /// Examples: diff --git a/test/src/interval/intervals_test.dart b/test/src/interval/intervals_test.dart index d4b5effb..67cddc97 100644 --- a/test/src/interval/intervals_test.dart +++ b/test/src/interval/intervals_test.dart @@ -61,6 +61,25 @@ void main() { }); }); + group('.isDissonant', () { + test('should return whether this Intervals enum item is dissonant', () { + expect(Intervals.unison.isDissonant, isFalse); + expect(Intervals.second.isDissonant, isTrue); + expect(Intervals.third.isDissonant, isFalse); + expect(Intervals.fourth.isDissonant, isFalse); + expect(Intervals.fifth.isDissonant, isFalse); + expect(Intervals.sixth.isDissonant, isFalse); + expect(Intervals.seventh.isDissonant, isTrue); + expect(Intervals.octave.isDissonant, isFalse); + expect(Intervals.ninth.isDissonant, isTrue); + expect(Intervals.tenth.isDissonant, isFalse); + expect(Intervals.eleventh.isDissonant, isFalse); + expect(Intervals.twelfth.isDissonant, isFalse); + expect(Intervals.thirteenth.isDissonant, isFalse); + expect(Intervals.fourteenth.isDissonant, isTrue); + }); + }); + group('.simplified', () { test('should return the simplified Intervals enum item', () { expect(Intervals.second.simplified, Intervals.second);