music-suite / music-pitch

This repo has been merged into: https://github.com/music-suite/music-suite
http://music-suite.github.io
BSD 3-Clause "New" or "Revised" License
9 stars 9 forks source link

Interval.isCompound returns unexpected values for negative intervals #50

Closed notae closed 9 years ago

notae commented 9 years ago

Example intervals to be checked by isCompound :

> let ints =
    [- _P8, - d8, - _M7, - m7, - d7, - _M6, - m6, - d6, - _A5, - _P5, - d5,
     - _A4, - _P4, - d4, - _M3, - m3, - d3, - _M2, - m2, - d2, d1, _P1, _A1,
     m2, _M2, _A2, m3, _M3, _A3, d4, _P4, _A4, d5, _P5, _A5, m6, _M6, _A6, m7,
     _M7, _A7, d8, _P8]

I expected :

> map isCompound' ints
    [True, True, False, False, False, False, False, False, False, False,
     False, False, False, False, False, False, False, False, False, False,
     False, False, False, False, False, False, False, False, False, False,
     False, False, False, False, False, False, False, False, False, False,
     False, True, True]

where

  isCompound' :: Interval -> Bool
  isCompound' x = octaves (abs x) /= 0

Actually returned :

> map isCompound ints
    [True, True, True, True, True, True, True, True, True, True, True,
     True, True, True, True, True, True, True, True, True, False, False,
     False, False, False, False, False, False, False, False, False, False,
     False, False, False, False, False, False, False, False, False, True,
     True]
hanshoglund commented 9 years ago

Quoting the docs "a compound interval is either a negative interval, or a positive interval spanning one octave or more" so this is expected.

For the behaviour you want, try isCompound $ abs (-m3).