Skip to content

Commit

Permalink
Make IntervalDescriptor type CustomStringConvertible (#113)
Browse files Browse the repository at this point in the history
  • Loading branch information
jsbean committed Oct 23, 2018
1 parent 2d29476 commit 7033ba5
Show file tree
Hide file tree
Showing 5 changed files with 97 additions and 3 deletions.
14 changes: 14 additions & 0 deletions Sources/Pitch/IntervalDescriptor/CompoundIntervalDescriptor.swift
Original file line number Diff line number Diff line change
Expand Up @@ -88,5 +88,19 @@ extension CompoundIntervalDescriptor {
// TODO: Add intervals spanning more than one octave
}

extension CompoundIntervalDescriptor: CustomStringConvertible {

// MARK: - CustomStringConvertible

/// Printable description of CompoundIntervalDescriptor.
public var description: String {
return(
interval.quality.description +
"\(interval.ordinal.steps + octaveDisplacement * 7 + 1)" +
(interval.direction == .descending ? "" : "")
)
}
}

extension CompoundIntervalDescriptor: Equatable { }
extension CompoundIntervalDescriptor: Hashable { }
58 changes: 58 additions & 0 deletions Sources/Pitch/IntervalDescriptor/IntervalQuality.swift
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,65 @@ extension IntervalQuality {
}
}

extension IntervalQuality.Perfect: CustomStringConvertible {

// MARK: - CustomStringConvertible

/// Printable description of IntervalQuality.Perfect.
public var description: String {
return "P"
}
}

extension IntervalQuality.Imperfect: CustomStringConvertible {

// MARK: - CustomStringConvertible

/// Printable description of IntervalQuality.Imperfect.
public var description: String {
return "P"
}
}

extension IntervalQuality.Extended.AugmentedOrDiminished: CustomStringConvertible {

// MARK: - CustomStringConvertible

/// Printable description of IntervalQuality.Extended.AugmentedOrDiminished.
public var description: String {
return self == .augmented ? "A" : "d"
}
}

extension IntervalQuality.Extended: CustomStringConvertible {

// MARK: - CustomStringConvertible

/// Printable description of IntervalQuality.Extended.
public var description: String {
return String(repeating: quality.description, count: degree.rawValue)
}
}

extension IntervalQuality: CustomStringConvertible {

// MARK: - CustomStringConvertible

/// Printable description of IntervalQuality.
public var description: String {
switch self {
case .perfect(let perfect):
return perfect.description
case .imperfect(let imperfect):
return imperfect.description
case .extended(let extended):
return extended.description
}
}
}

extension IntervalQuality.Extended: Equatable { }
extension IntervalQuality.Extended: Hashable { }
extension IntervalQuality: Equatable { }
extension IntervalQuality: Hashable { }

16 changes: 13 additions & 3 deletions Sources/Pitch/IntervalDescriptor/OrderedIntervalDescriptor.swift
Original file line number Diff line number Diff line change
Expand Up @@ -415,9 +415,6 @@ extension OrderedIntervalDescriptor {
}
}

extension OrderedIntervalDescriptor.Ordinal: Equatable, Hashable { }
extension OrderedIntervalDescriptor: Equatable, Hashable { }

extension OrderedIntervalDescriptor: Invertible {

// MARK: - Invertible
Expand All @@ -427,3 +424,16 @@ extension OrderedIntervalDescriptor: Invertible {
return .init(direction.inverse, quality.inverse, ordinal.inverse)
}
}

extension OrderedIntervalDescriptor: CustomStringConvertible {

// MARK: - CustomStringConvertible

/// Printable description of UnorderedIntervalDescriptor.
public var description: String {
return "\(quality)\(ordinal.steps + 1)\(direction == .descending ? "" : "")"
}
}

extension OrderedIntervalDescriptor.Ordinal: Equatable, Hashable { }
extension OrderedIntervalDescriptor: Equatable, Hashable { }
10 changes: 10 additions & 0 deletions Sources/Pitch/IntervalDescriptor/UnorderedIntervalDescriptor.swift
Original file line number Diff line number Diff line change
Expand Up @@ -260,5 +260,15 @@ extension UnorderedIntervalDescriptor {
}
}

extension UnorderedIntervalDescriptor: CustomStringConvertible {

// MARK: - CustomStringConvertible

/// Printable description of UnorderedIntervalDescriptor.
public var description: String {
return quality.description + "\(ordinal.steps)"
}
}

extension UnorderedIntervalDescriptor.Ordinal: Equatable, Hashable { }
extension UnorderedIntervalDescriptor: Equatable, Hashable { }
2 changes: 2 additions & 0 deletions Tests/PitchTests/OrderedIntervalDescriptorTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,8 @@ class OrderedIntervalDescriptorTests: XCTestCase {
let dd6 = OrderedIntervalDescriptor(.descending, .double, .diminished, .sixth)
XCTAssertEqual(AA3.inverse, dd6)
XCTAssertEqual(dd6.inverse, AA3)
print(AA3)
print(dd6)
}

func testPerfectOrdinalUnisonInverse() {
Expand Down

0 comments on commit 7033ba5

Please sign in to comment.