⌈⌋ ⎇ branch:  Bitrhythm


Hex Artifact Content

Artifact 29f4b190fad3585ddda0037d52e1a986a5d5c89212804bc204384341777083cb:


0000: 76 61 72 20 76 6f 77 73 20 3d 20 72 65 71 75 69  var vows = requi
0010: 72 65 28 27 76 6f 77 73 27 29 2c 0a 20 20 20 20  re('vows'),.    
0020: 61 73 73 65 72 74 20 3d 20 72 65 71 75 69 72 65  assert = require
0030: 28 27 61 73 73 65 72 74 27 29 2c 0a 20 20 20 20  ('assert'),.    
0040: 74 65 6f 72 69 61 20 3d 20 72 65 71 75 69 72 65  teoria = require
0050: 28 27 2e 2e 2f 27 29 3b 0a 0a 76 6f 77 73 2e 64  ('../');..vows.d
0060: 65 73 63 72 69 62 65 28 27 43 68 6f 72 64 73 27  escribe('Chords'
0070: 29 2e 61 64 64 42 61 74 63 68 28 7b 0a 20 20 27  ).addBatch({.  '
0080: 43 68 6f 72 64 20 70 61 72 73 65 72 27 3a 20 7b  Chord parser': {
0090: 0a 20 20 20 20 27 45 6d 61 6a 37 27 3a 20 66 75  .    'Emaj7': fu
00a0: 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20 20  nction() {.     
00b0: 20 61 73 73 65 72 74 2e 64 65 65 70 45 71 75 61   assert.deepEqua
00c0: 6c 28 74 65 6f 72 69 61 2e 63 68 6f 72 64 28 27  l(teoria.chord('
00d0: 45 6d 61 6a 37 27 29 2e 73 69 6d 70 6c 65 28 29  Emaj7').simple()
00e0: 2c 20 5b 27 65 27 2c 20 27 67 23 27 2c 20 27 62  , ['e', 'g#', 'b
00f0: 27 2c 20 27 64 23 27 5d 29 3b 0a 20 20 20 20 7d  ', 'd#']);.    }
0100: 2c 0a 0a 20 20 20 20 27 41 2b 27 3a 20 66 75 6e  ,..    'A+': fun
0110: 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20 20 20  ction() {.      
0120: 61 73 73 65 72 74 2e 64 65 65 70 45 71 75 61 6c  assert.deepEqual
0130: 28 74 65 6f 72 69 61 2e 63 68 6f 72 64 28 27 41  (teoria.chord('A
0140: 2b 27 29 2e 73 69 6d 70 6c 65 28 29 2c 20 5b 27  +').simple(), ['
0150: 61 27 2c 20 27 63 23 27 2c 20 27 65 23 27 5d 29  a', 'c#', 'e#'])
0160: 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20 27 42  ;.    },..    'B
0170: 62 2b 27 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20  b+': function() 
0180: 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 2e 64  {.      assert.d
0190: 65 65 70 45 71 75 61 6c 28 74 65 6f 72 69 61 2e  eepEqual(teoria.
01a0: 63 68 6f 72 64 28 27 42 62 2b 27 29 2e 73 69 6d  chord('Bb+').sim
01b0: 70 6c 65 28 29 2c 20 5b 27 62 62 27 2c 20 27 64  ple(), ['bb', 'd
01c0: 27 2c 20 27 66 23 27 5d 29 3b 0a 20 20 20 20 7d  ', 'f#']);.    }
01d0: 2c 0a 0a 20 20 20 20 27 46 23 6d 61 6a 37 27 3a  ,..    'F#maj7':
01e0: 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20   function() {.  
01f0: 20 20 20 20 61 73 73 65 72 74 2e 64 65 65 70 45      assert.deepE
0200: 71 75 61 6c 28 74 65 6f 72 69 61 2e 63 68 6f 72  qual(teoria.chor
0210: 64 28 27 46 23 6d 61 6a 37 27 29 2e 73 69 6d 70  d('F#maj7').simp
0220: 6c 65 28 29 2c 20 5b 27 66 23 27 2c 20 27 61 23  le(), ['f#', 'a#
0230: 27 2c 20 27 63 23 27 2c 20 27 65 23 27 5d 29 3b  ', 'c#', 'e#']);
0240: 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20 27 48 6d  .    },..    'Hm
0250: 61 6a 37 27 3a 20 66 75 6e 63 74 69 6f 6e 28 29  aj7': function()
0260: 20 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 2e   {.      assert.
0270: 64 65 65 70 45 71 75 61 6c 28 74 65 6f 72 69 61  deepEqual(teoria
0280: 2e 63 68 6f 72 64 28 27 48 6d 61 6a 37 27 29 2e  .chord('Hmaj7').
0290: 73 69 6d 70 6c 65 28 29 2c 20 5b 27 62 27 2c 20  simple(), ['b', 
02a0: 27 64 23 27 2c 20 27 66 23 27 2c 20 27 61 23 27  'd#', 'f#', 'a#'
02b0: 5d 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20  ]);.    },..    
02c0: 27 48 23 6d 61 6a 37 27 3a 20 66 75 6e 63 74 69  'H#maj7': functi
02d0: 6f 6e 28 29 20 7b 0a 20 20 20 20 20 20 61 73 73  on() {.      ass
02e0: 65 72 74 2e 64 65 65 70 45 71 75 61 6c 28 74 65  ert.deepEqual(te
02f0: 6f 72 69 61 2e 63 68 6f 72 64 28 27 48 23 6d 61  oria.chord('H#ma
0300: 6a 37 27 29 2e 73 69 6d 70 6c 65 28 29 2c 20 5b  j7').simple(), [
0310: 27 62 23 27 2c 20 27 64 78 27 2c 20 27 66 78 27  'b#', 'dx', 'fx'
0320: 2c 20 27 61 78 27 5d 29 3b 0a 20 20 20 20 7d 2c  , 'ax']);.    },
0330: 0a 0a 20 20 20 20 27 43 37 62 35 27 3a 20 66 75  ..    'C7b5': fu
0340: 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20 20  nction() {.     
0350: 20 61 73 73 65 72 74 2e 64 65 65 70 45 71 75 61   assert.deepEqua
0360: 6c 28 74 65 6f 72 69 61 2e 63 68 6f 72 64 28 27  l(teoria.chord('
0370: 43 37 62 35 27 29 2e 73 69 6d 70 6c 65 28 29 2c  C7b5').simple(),
0380: 20 5b 27 63 27 2c 20 27 65 27 2c 20 27 67 62 27   ['c', 'e', 'gb'
0390: 2c 20 27 62 62 27 5d 29 3b 0a 20 20 20 20 7d 2c  , 'bb']);.    },
03a0: 0a 0a 20 20 20 20 27 45 62 37 62 35 27 3a 20 66  ..    'Eb7b5': f
03b0: 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20  unction() {.    
03c0: 20 20 61 73 73 65 72 74 2e 64 65 65 70 45 71 75    assert.deepEqu
03d0: 61 6c 28 74 65 6f 72 69 61 2e 63 68 6f 72 64 28  al(teoria.chord(
03e0: 27 45 62 37 62 35 27 29 2e 73 69 6d 70 6c 65 28  'Eb7b5').simple(
03f0: 29 2c 20 5b 27 65 62 27 2c 20 27 67 27 2c 20 27  ), ['eb', 'g', '
0400: 62 62 62 27 2c 20 27 64 62 27 5d 29 3b 0a 20 20  bbb', 'db']);.  
0410: 20 20 7d 2c 0a 0a 20 20 20 20 27 44 23 37 62 35    },..    'D#7b5
0420: 27 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a  ': function() {.
0430: 20 20 20 20 20 20 61 73 73 65 72 74 2e 64 65 65        assert.dee
0440: 70 45 71 75 61 6c 28 74 65 6f 72 69 61 2e 63 68  pEqual(teoria.ch
0450: 6f 72 64 28 27 44 23 37 62 35 27 29 2e 73 69 6d  ord('D#7b5').sim
0460: 70 6c 65 28 29 2c 20 5b 27 64 23 27 2c 20 27 66  ple(), ['d#', 'f
0470: 78 27 2c 20 27 61 27 2c 20 27 63 23 27 5d 29 3b  x', 'a', 'c#']);
0480: 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20 27 43 39  .    },..    'C9
0490: 27 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a  ': function() {.
04a0: 20 20 20 20 20 20 61 73 73 65 72 74 2e 64 65 65        assert.dee
04b0: 70 45 71 75 61 6c 28 74 65 6f 72 69 61 2e 63 68  pEqual(teoria.ch
04c0: 6f 72 64 28 27 43 39 27 29 2e 73 69 6d 70 6c 65  ord('C9').simple
04d0: 28 29 2c 20 5b 27 63 27 2c 20 27 65 27 2c 20 27  (), ['c', 'e', '
04e0: 67 27 2c 20 27 62 62 27 2c 20 27 64 27 5d 29 3b  g', 'bb', 'd']);
04f0: 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20 27 45 62  .    },..    'Eb
0500: 39 27 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b  9': function() {
0510: 0a 20 20 20 20 20 20 61 73 73 65 72 74 2e 64 65  .      assert.de
0520: 65 70 45 71 75 61 6c 28 74 65 6f 72 69 61 2e 63  epEqual(teoria.c
0530: 68 6f 72 64 28 27 45 62 39 27 29 2e 73 69 6d 70  hord('Eb9').simp
0540: 6c 65 28 29 2c 20 5b 27 65 62 27 2c 20 27 67 27  le(), ['eb', 'g'
0550: 2c 20 27 62 62 27 2c 20 27 64 62 27 2c 20 27 66  , 'bb', 'db', 'f
0560: 27 5d 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 20  ']);.    },..   
0570: 20 27 47 23 28 23 39 29 27 3a 20 66 75 6e 63 74   'G#(#9)': funct
0580: 69 6f 6e 28 29 20 7b 0a 20 20 20 20 20 20 61 73  ion() {.      as
0590: 73 65 72 74 2e 64 65 65 70 45 71 75 61 6c 28 74  sert.deepEqual(t
05a0: 65 6f 72 69 61 2e 63 68 6f 72 64 28 27 47 23 28  eoria.chord('G#(
05b0: 23 39 29 27 29 2e 73 69 6d 70 6c 65 28 29 2c 20  #9)').simple(), 
05c0: 5b 27 67 23 27 2c 20 27 62 23 27 2c 20 27 64 23  ['g#', 'b#', 'd#
05d0: 27 2c 20 27 66 23 27 2c 20 27 61 78 27 5d 29 3b  ', 'f#', 'ax']);
05e0: 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20 27 41 62  .    },..    'Ab
05f0: 28 62 39 29 27 3a 20 66 75 6e 63 74 69 6f 6e 28  (b9)': function(
0600: 29 20 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  ) {.      assert
0610: 2e 64 65 65 70 45 71 75 61 6c 28 74 65 6f 72 69  .deepEqual(teori
0620: 61 2e 63 68 6f 72 64 28 27 41 62 28 62 39 29 27  a.chord('Ab(b9)'
0630: 29 2e 73 69 6d 70 6c 65 28 29 2c 20 5b 27 61 62  ).simple(), ['ab
0640: 27 2c 20 27 63 27 2c 20 27 65 62 27 2c 20 27 67  ', 'c', 'eb', 'g
0650: 62 27 2c 20 27 62 62 62 27 5d 29 3b 0a 20 20 20  b', 'bbb']);.   
0660: 20 7d 2c 0a 0a 20 20 20 20 27 46 23 28 23 31 31   },..    'F#(#11
0670: 29 27 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b  )': function() {
0680: 0a 20 20 20 20 20 20 61 73 73 65 72 74 2e 64 65  .      assert.de
0690: 65 70 45 71 75 61 6c 28 74 65 6f 72 69 61 2e 63  epEqual(teoria.c
06a0: 68 6f 72 64 28 27 46 23 28 23 31 31 29 27 29 2e  hord('F#(#11)').
06b0: 73 69 6d 70 6c 65 28 29 2c 20 5b 27 66 23 27 2c  simple(), ['f#',
06c0: 20 27 61 23 27 2c 20 27 63 23 27 2c 20 27 65 27   'a#', 'c#', 'e'
06d0: 2c 20 27 67 23 27 2c 20 27 62 23 27 5d 29 3b 0a  , 'g#', 'b#']);.
06e0: 20 20 20 20 7d 2c 0a 0a 20 20 20 20 27 41 62 31      },..    'Ab1
06f0: 33 27 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b  3': function() {
0700: 0a 20 20 20 20 20 20 61 73 73 65 72 74 2e 64 65  .      assert.de
0710: 65 70 45 71 75 61 6c 28 74 65 6f 72 69 61 2e 63  epEqual(teoria.c
0720: 68 6f 72 64 28 27 41 62 31 33 27 29 2e 73 69 6d  hord('Ab13').sim
0730: 70 6c 65 28 29 2c 20 5b 27 61 62 27 2c 20 27 63  ple(), ['ab', 'c
0740: 27 2c 20 27 65 62 27 2c 20 27 67 62 27 2c 20 27  ', 'eb', 'gb', '
0750: 62 62 27 2c 20 27 64 62 27 2c 20 27 66 27 5d 29  bb', 'db', 'f'])
0760: 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20 27 43  ;.    },..    'C
0770: 37 73 75 73 34 27 3a 20 66 75 6e 63 74 69 6f 6e  7sus4': function
0780: 28 29 20 7b 0a 20 20 20 20 20 20 61 73 73 65 72  () {.      asser
0790: 74 2e 64 65 65 70 45 71 75 61 6c 28 74 65 6f 72  t.deepEqual(teor
07a0: 69 61 2e 63 68 6f 72 64 28 27 43 37 73 75 73 34  ia.chord('C7sus4
07b0: 27 29 2e 73 69 6d 70 6c 65 28 29 2c 20 5b 27 63  ').simple(), ['c
07c0: 27 2c 20 27 66 27 2c 20 27 67 27 2c 20 27 62 62  ', 'f', 'g', 'bb
07d0: 27 5d 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 20  ']);.    },..   
07e0: 20 27 43 6d 61 6a 39 27 3a 20 66 75 6e 63 74 69   'Cmaj9': functi
07f0: 6f 6e 28 29 20 7b 0a 20 20 20 20 20 20 61 73 73  on() {.      ass
0800: 65 72 74 2e 64 65 65 70 45 71 75 61 6c 28 74 65  ert.deepEqual(te
0810: 6f 72 69 61 2e 63 68 6f 72 64 28 27 43 6d 61 6a  oria.chord('Cmaj
0820: 39 27 29 2e 73 69 6d 70 6c 65 28 29 2c 20 5b 27  9').simple(), ['
0830: 63 27 2c 20 27 65 27 2c 20 27 67 27 2c 20 27 62  c', 'e', 'g', 'b
0840: 27 2c 20 27 64 27 5d 29 3b 0a 20 20 20 20 7d 2c  ', 'd']);.    },
0850: 0a 0a 20 20 20 20 27 44 6d 62 36 27 3a 20 66 75  ..    'Dmb6': fu
0860: 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20 20  nction() {.     
0870: 20 61 73 73 65 72 74 2e 64 65 65 70 45 71 75 61   assert.deepEqua
0880: 6c 28 74 65 6f 72 69 61 2e 63 68 6f 72 64 28 27  l(teoria.chord('
0890: 44 6d 62 36 27 29 2e 73 69 6d 70 6c 65 28 29 2c  Dmb6').simple(),
08a0: 20 5b 27 64 27 2c 20 27 66 27 2c 20 27 61 27 2c   ['d', 'f', 'a',
08b0: 20 27 62 62 27 5d 29 3b 0a 20 20 20 20 7d 2c 0a   'bb']);.    },.
08c0: 0a 20 20 20 20 27 43 23 28 23 35 23 39 29 27 3a  .    'C#(#5#9)':
08d0: 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20   function() {.  
08e0: 20 20 20 20 61 73 73 65 72 74 2e 64 65 65 70 45      assert.deepE
08f0: 71 75 61 6c 28 74 65 6f 72 69 61 2e 63 68 6f 72  qual(teoria.chor
0900: 64 28 27 43 23 28 23 35 23 39 29 27 29 2e 73 69  d('C#(#5#9)').si
0910: 6d 70 6c 65 28 29 2c 20 5b 27 63 23 27 2c 20 27  mple(), ['c#', '
0920: 65 23 27 2c 20 27 67 78 27 2c 20 27 62 27 2c 20  e#', 'gx', 'b', 
0930: 27 64 78 27 5d 29 3b 0a 20 20 20 20 7d 2c 0a 0a  'dx']);.    },..
0940: 20 20 20 20 27 43 6d 28 6d 61 6a 37 29 27 3a 20      'Cm(maj7)': 
0950: 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20  function() {.   
0960: 20 20 20 61 73 73 65 72 74 2e 64 65 65 70 45 71     assert.deepEq
0970: 75 61 6c 28 74 65 6f 72 69 61 2e 63 68 6f 72 64  ual(teoria.chord
0980: 28 27 43 6d 28 6d 61 6a 37 29 27 29 2e 73 69 6d  ('Cm(maj7)').sim
0990: 70 6c 65 28 29 2c 20 5b 27 63 27 2c 20 27 65 62  ple(), ['c', 'eb
09a0: 27 2c 20 27 67 27 2c 20 27 62 27 5d 29 3b 0a 20  ', 'g', 'b']);. 
09b0: 20 20 20 7d 2c 0a 0a 20 20 20 20 27 46 23 6d 28     },..    'F#m(
09c0: 31 31 62 35 62 39 29 27 3a 20 66 75 6e 63 74 69  11b5b9)': functi
09d0: 6f 6e 28 29 20 7b 0a 20 20 20 20 20 20 61 73 73  on() {.      ass
09e0: 65 72 74 2e 64 65 65 70 45 71 75 61 6c 28 74 65  ert.deepEqual(te
09f0: 6f 72 69 61 2e 63 68 6f 72 64 28 27 46 23 6d 28  oria.chord('F#m(
0a00: 31 31 62 35 62 39 29 27 29 2e 73 69 6d 70 6c 65  11b5b9)').simple
0a10: 28 29 2c 20 5b 27 66 23 27 2c 20 27 61 27 2c 20  (), ['f#', 'a', 
0a20: 27 63 27 2c 20 27 65 27 2c 20 27 67 27 2c 20 27  'c', 'e', 'g', '
0a30: 62 27 5d 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20  b']);.    },..  
0a40: 20 20 27 43 2f 65 27 3a 20 66 75 6e 63 74 69 6f    'C/e': functio
0a50: 6e 28 29 20 7b 0a 20 20 20 20 20 20 61 73 73 65  n() {.      asse
0a60: 72 74 2e 64 65 65 70 45 71 75 61 6c 28 74 65 6f  rt.deepEqual(teo
0a70: 72 69 61 2e 63 68 6f 72 64 28 27 43 2f 65 27 29  ria.chord('C/e')
0a80: 2e 73 69 6d 70 6c 65 28 29 2c 20 5b 27 65 27 2c  .simple(), ['e',
0a90: 20 27 63 27 2c 20 27 67 27 5d 29 3b 0a 20 20 20   'c', 'g']);.   
0aa0: 20 7d 2c 0a 0a 20 20 20 20 27 41 37 2f 67 27 3a   },..    'A7/g':
0ab0: 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20   function() {.  
0ac0: 20 20 20 20 61 73 73 65 72 74 2e 64 65 65 70 45      assert.deepE
0ad0: 71 75 61 6c 28 74 65 6f 72 69 61 2e 63 68 6f 72  qual(teoria.chor
0ae0: 64 28 27 41 37 2f 67 27 29 2e 73 69 6d 70 6c 65  d('A7/g').simple
0af0: 28 29 2c 20 5b 27 67 27 2c 20 27 61 27 2c 20 27  (), ['g', 'a', '
0b00: 63 23 27 2c 20 27 65 27 5d 29 3b 0a 20 20 20 20  c#', 'e']);.    
0b10: 7d 2c 0a 0a 20 20 20 20 27 47 2f 66 23 27 3a 20  },..    'G/f#': 
0b20: 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20  function() {.   
0b30: 20 20 20 61 73 73 65 72 74 2e 64 65 65 70 45 71     assert.deepEq
0b40: 75 61 6c 28 74 65 6f 72 69 61 2e 63 68 6f 72 64  ual(teoria.chord
0b50: 28 27 47 2f 66 23 27 29 2e 73 69 6d 70 6c 65 28  ('G/f#').simple(
0b60: 29 2c 20 5b 27 66 23 27 2c 20 27 67 27 2c 20 27  ), ['f#', 'g', '
0b70: 62 27 2c 20 27 64 27 5d 29 3b 0a 20 20 20 20 7d  b', 'd']);.    }
0b80: 2c 0a 0a 20 20 20 20 27 43 36 27 3a 20 66 75 6e  ,..    'C6': fun
0b90: 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20 20 20  ction() {.      
0ba0: 61 73 73 65 72 74 2e 64 65 65 70 45 71 75 61 6c  assert.deepEqual
0bb0: 28 74 65 6f 72 69 61 2e 63 68 6f 72 64 28 27 43  (teoria.chord('C
0bc0: 36 27 29 2e 73 69 6d 70 6c 65 28 29 2c 20 5b 27  6').simple(), ['
0bd0: 63 27 2c 20 27 65 27 2c 20 27 67 27 2c 20 27 61  c', 'e', 'g', 'a
0be0: 27 5d 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 20  ']);.    },..   
0bf0: 20 27 41 23 36 27 3a 20 66 75 6e 63 74 69 6f 6e   'A#6': function
0c00: 28 29 20 7b 0a 20 20 20 20 20 20 61 73 73 65 72  () {.      asser
0c10: 74 2e 64 65 65 70 45 71 75 61 6c 28 74 65 6f 72  t.deepEqual(teor
0c20: 69 61 2e 63 68 6f 72 64 28 27 41 23 36 27 29 2e  ia.chord('A#6').
0c30: 73 69 6d 70 6c 65 28 29 2c 20 5b 27 61 23 27 2c  simple(), ['a#',
0c40: 20 27 63 78 27 2c 20 27 65 23 27 2c 20 27 66 78   'cx', 'e#', 'fx
0c50: 27 5d 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 20  ']);.    },..   
0c60: 20 27 42 62 36 27 3a 20 66 75 6e 63 74 69 6f 6e   'Bb6': function
0c70: 28 29 20 7b 0a 20 20 20 20 20 20 61 73 73 65 72  () {.      asser
0c80: 74 2e 64 65 65 70 45 71 75 61 6c 28 74 65 6f 72  t.deepEqual(teor
0c90: 69 61 2e 63 68 6f 72 64 28 27 42 62 36 27 29 2e  ia.chord('Bb6').
0ca0: 73 69 6d 70 6c 65 28 29 2c 20 5b 27 62 62 27 2c  simple(), ['bb',
0cb0: 20 27 64 27 2c 20 27 66 27 2c 20 27 67 27 5d 29   'd', 'f', 'g'])
0cc0: 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20 27 41  ;.    },..    'A
0cd0: 6d 36 27 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20  m6': function() 
0ce0: 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 2e 64  {.      assert.d
0cf0: 65 65 70 45 71 75 61 6c 28 74 65 6f 72 69 61 2e  eepEqual(teoria.
0d00: 63 68 6f 72 64 28 27 41 6d 36 27 29 2e 73 69 6d  chord('Am6').sim
0d10: 70 6c 65 28 29 2c 20 5b 27 61 27 2c 20 27 63 27  ple(), ['a', 'c'
0d20: 2c 20 27 65 27 2c 20 27 66 23 27 5d 29 3b 0a 20  , 'e', 'f#']);. 
0d30: 20 20 20 7d 2c 0a 0a 20 20 20 20 27 44 28 23 36     },..    'D(#6
0d40: 29 27 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b  )': function() {
0d50: 0a 20 20 20 20 20 20 61 73 73 65 72 74 2e 64 65  .      assert.de
0d60: 65 70 45 71 75 61 6c 28 74 65 6f 72 69 61 2e 63  epEqual(teoria.c
0d70: 68 6f 72 64 28 27 44 28 23 36 29 27 29 2e 73 69  hord('D(#6)').si
0d80: 6d 70 6c 65 28 29 2c 20 5b 27 64 27 2c 20 27 66  mple(), ['d', 'f
0d90: 23 27 2c 20 27 61 27 2c 20 27 62 23 27 5d 29 3b  #', 'a', 'b#']);
0da0: 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20 27 45 6f  .    },..    'Eo
0db0: 27 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a  ': function() {.
0dc0: 20 20 20 20 20 20 61 73 73 65 72 74 2e 64 65 65        assert.dee
0dd0: 70 45 71 75 61 6c 28 74 65 6f 72 69 61 2e 63 68  pEqual(teoria.ch
0de0: 6f 72 64 28 27 45 6f 27 29 2e 73 69 6d 70 6c 65  ord('Eo').simple
0df0: 28 29 2c 20 5b 27 65 27 2c 20 27 67 27 2c 20 27  (), ['e', 'g', '
0e00: 62 62 27 5d 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20  bb']);.    },.. 
0e10: 20 20 20 27 45 c3 b8 27 3a 20 66 75 6e 63 74 69     'E..': functi
0e20: 6f 6e 28 29 20 7b 0a 20 20 20 20 20 20 61 73 73  on() {.      ass
0e30: 65 72 74 2e 64 65 65 70 45 71 75 61 6c 28 74 65  ert.deepEqual(te
0e40: 6f 72 69 61 2e 63 68 6f 72 64 28 27 45 c3 b8 27  oria.chord('E..'
0e50: 29 2e 73 69 6d 70 6c 65 28 29 2c 20 5b 27 65 27  ).simple(), ['e'
0e60: 2c 20 27 67 27 2c 20 27 62 62 27 2c 20 27 64 27  , 'g', 'bb', 'd'
0e70: 5d 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20  ]);.    },..    
0e80: 27 44 6f 27 3a 20 66 75 6e 63 74 69 6f 6e 28 29  'Do': function()
0e90: 20 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 2e   {.      assert.
0ea0: 64 65 65 70 45 71 75 61 6c 28 74 65 6f 72 69 61  deepEqual(teoria
0eb0: 2e 63 68 6f 72 64 28 27 44 6f 27 29 2e 73 69 6d  .chord('Do').sim
0ec0: 70 6c 65 28 29 2c 20 5b 27 64 27 2c 20 27 66 27  ple(), ['d', 'f'
0ed0: 2c 20 27 61 62 27 5d 29 3b 0a 20 20 20 20 7d 2c  , 'ab']);.    },
0ee0: 0a 0a 20 20 20 20 27 44 c3 b8 27 3a 20 66 75 6e  ..    'D..': fun
0ef0: 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20 20 20  ction() {.      
0f00: 61 73 73 65 72 74 2e 64 65 65 70 45 71 75 61 6c  assert.deepEqual
0f10: 28 74 65 6f 72 69 61 2e 63 68 6f 72 64 28 27 44  (teoria.chord('D
0f20: c3 b8 27 29 2e 73 69 6d 70 6c 65 28 29 2c 20 5b  ..').simple(), [
0f30: 27 64 27 2c 20 27 66 27 2c 20 27 61 62 27 2c 20  'd', 'f', 'ab', 
0f40: 27 63 27 5d 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20  'c']);.    },.. 
0f50: 20 20 20 27 46 6f 37 27 3a 20 66 75 6e 63 74 69     'Fo7': functi
0f60: 6f 6e 28 29 20 7b 0a 20 20 20 20 20 20 61 73 73  on() {.      ass
0f70: 65 72 74 2e 64 65 65 70 45 71 75 61 6c 28 74 65  ert.deepEqual(te
0f80: 6f 72 69 61 2e 63 68 6f 72 64 28 27 46 6f 37 27  oria.chord('Fo7'
0f90: 29 2e 73 69 6d 70 6c 65 28 29 2c 20 5b 27 66 27  ).simple(), ['f'
0fa0: 2c 20 27 61 62 27 2c 20 27 63 62 27 2c 20 27 65  , 'ab', 'cb', 'e
0fb0: 62 62 27 5d 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20  bb']);.    },.. 
0fc0: 20 20 20 27 47 23 c3 b8 37 27 3a 20 66 75 6e 63     'G#..7': func
0fd0: 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20 20 20 61  tion() {.      a
0fe0: 73 73 65 72 74 2e 64 65 65 70 45 71 75 61 6c 28  ssert.deepEqual(
0ff0: 74 65 6f 72 69 61 2e 63 68 6f 72 64 28 27 47 23  teoria.chord('G#
1000: c3 b8 37 27 29 2e 73 69 6d 70 6c 65 28 29 2c 20  ..7').simple(), 
1010: 5b 27 67 23 27 2c 20 27 62 27 2c 20 27 64 27 2c  ['g#', 'b', 'd',
1020: 20 27 66 23 27 5d 29 3b 0a 20 20 20 20 7d 2c 0a   'f#']);.    },.
1030: 0a 20 20 20 20 27 43 6d 69 6e 27 3a 20 66 75 6e  .    'Cmin': fun
1040: 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20 20 20  ction() {.      
1050: 61 73 73 65 72 74 2e 64 65 65 70 45 71 75 61 6c  assert.deepEqual
1060: 28 74 65 6f 72 69 61 2e 63 68 6f 72 64 28 27 43  (teoria.chord('C
1070: 6d 69 6e 27 29 2e 73 69 6d 70 6c 65 28 29 2c 20  min').simple(), 
1080: 5b 27 63 27 2c 20 27 65 62 27 2c 20 27 67 27 5d  ['c', 'eb', 'g']
1090: 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20 27  );.    },..    '
10a0: 42 6d 69 6e 31 31 27 3a 20 66 75 6e 63 74 69 6f  Bmin11': functio
10b0: 6e 28 29 20 7b 0a 20 20 20 20 20 20 61 73 73 65  n() {.      asse
10c0: 72 74 2e 64 65 65 70 45 71 75 61 6c 28 74 65 6f  rt.deepEqual(teo
10d0: 72 69 61 2e 63 68 6f 72 64 28 27 42 6d 69 6e 31  ria.chord('Bmin1
10e0: 31 27 29 2e 73 69 6d 70 6c 65 28 29 2c 20 5b 27  1').simple(), ['
10f0: 62 27 2c 20 27 64 27 2c 20 27 66 23 27 2c 20 27  b', 'd', 'f#', '
1100: 61 27 2c 20 27 63 23 27 2c 20 27 65 27 5d 29 3b  a', 'c#', 'e']);
1110: 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20 27 43 2b  .    },..    'C+
1120: 4d 37 27 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20  M7': function() 
1130: 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 2e 64  {.      assert.d
1140: 65 65 70 45 71 75 61 6c 28 74 65 6f 72 69 61 2e  eepEqual(teoria.
1150: 63 68 6f 72 64 28 27 43 2b 4d 37 27 29 2e 73 69  chord('C+M7').si
1160: 6d 70 6c 65 28 29 2c 20 5b 27 63 27 2c 20 27 65  mple(), ['c', 'e
1170: 27 2c 20 27 67 23 27 2c 20 27 62 27 5d 29 3b 0a  ', 'g#', 'b']);.
1180: 20 20 20 20 7d 2c 0a 0a 20 20 20 20 27 42 62 64      },..    'Bbd
1190: 6f 6d 37 62 35 27 3a 20 66 75 6e 63 74 69 6f 6e  om7b5': function
11a0: 28 29 20 7b 0a 20 20 20 20 20 20 61 73 73 65 72  () {.      asser
11b0: 74 2e 64 65 65 70 45 71 75 61 6c 28 74 65 6f 72  t.deepEqual(teor
11c0: 69 61 2e 63 68 6f 72 64 28 27 42 62 64 6f 6d 37  ia.chord('Bbdom7
11d0: 62 35 27 29 2e 73 69 6d 70 6c 65 28 29 2c 20 5b  b5').simple(), [
11e0: 27 62 62 27 2c 20 27 64 27 2c 20 27 66 62 27 2c  'bb', 'd', 'fb',
11f0: 20 27 61 62 27 5d 29 3b 0a 20 20 20 20 7d 2c 0a   'ab']);.    },.
1200: 0a 20 20 20 20 27 45 35 27 3a 20 66 75 6e 63 74  .    'E5': funct
1210: 69 6f 6e 28 29 20 7b 0a 20 20 20 20 20 20 61 73  ion() {.      as
1220: 73 65 72 74 2e 64 65 65 70 45 71 75 61 6c 28 74  sert.deepEqual(t
1230: 65 6f 72 69 61 2e 63 68 6f 72 64 28 27 45 35 27  eoria.chord('E5'
1240: 29 2e 73 69 6d 70 6c 65 28 29 2c 20 5b 27 65 27  ).simple(), ['e'
1250: 2c 20 27 62 27 5d 29 3b 0a 20 20 20 20 7d 2c 0a  , 'b']);.    },.
1260: 0a 20 20 20 20 27 41 35 27 3a 20 66 75 6e 63 74  .    'A5': funct
1270: 69 6f 6e 28 29 20 7b 0a 20 20 20 20 20 20 61 73  ion() {.      as
1280: 73 65 72 74 2e 64 65 65 70 45 71 75 61 6c 28 74  sert.deepEqual(t
1290: 65 6f 72 69 61 2e 63 68 6f 72 64 28 27 41 35 27  eoria.chord('A5'
12a0: 29 2e 73 69 6d 70 6c 65 28 29 2c 20 5b 27 61 27  ).simple(), ['a'
12b0: 2c 20 27 65 27 5d 29 3b 0a 20 20 20 20 7d 2c 0a  , 'e']);.    },.
12c0: 0a 20 20 20 20 27 43 31 33 23 39 62 35 27 3a 20  .    'C13#9b5': 
12d0: 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20  function() {.   
12e0: 20 20 20 61 73 73 65 72 74 2e 64 65 65 70 45 71     assert.deepEq
12f0: 75 61 6c 28 74 65 6f 72 69 61 2e 63 68 6f 72 64  ual(teoria.chord
1300: 28 27 43 31 33 23 39 62 35 27 29 2e 73 69 6d 70  ('C13#9b5').simp
1310: 6c 65 28 29 2c 20 5b 27 63 27 2c 20 27 65 27 2c  le(), ['c', 'e',
1320: 20 27 67 62 27 2c 20 27 62 62 27 2c 20 27 64 23   'gb', 'bb', 'd#
1330: 27 2c 20 27 66 27 2c 20 27 61 27 5d 29 3b 0a 20  ', 'f', 'a']);. 
1340: 20 20 20 7d 2c 0a 0a 20 20 20 20 27 44 31 33 23     },..    'D13#
1350: 35 62 39 27 3a 20 66 75 6e 63 74 69 6f 6e 28 29  5b9': function()
1360: 20 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 2e   {.      assert.
1370: 64 65 65 70 45 71 75 61 6c 28 74 65 6f 72 69 61  deepEqual(teoria
1380: 2e 63 68 6f 72 64 28 27 44 31 33 23 35 62 39 27  .chord('D13#5b9'
1390: 29 2e 73 69 6d 70 6c 65 28 29 2c 20 5b 27 64 27  ).simple(), ['d'
13a0: 2c 20 27 66 23 27 2c 20 27 61 23 27 2c 20 27 63  , 'f#', 'a#', 'c
13b0: 27 2c 20 27 65 62 27 2c 20 27 67 27 2c 20 27 62  ', 'eb', 'g', 'b
13c0: 27 5d 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 20  ']);.    },..   
13d0: 20 27 43 36 2f 39 27 3a 20 66 75 6e 63 74 69 6f   'C6/9': functio
13e0: 6e 28 29 20 7b 0a 20 20 20 20 20 20 61 73 73 65  n() {.      asse
13f0: 72 74 2e 64 65 65 70 45 71 75 61 6c 28 74 65 6f  rt.deepEqual(teo
1400: 72 69 61 2e 63 68 6f 72 64 28 27 43 36 2f 39 27  ria.chord('C6/9'
1410: 29 2e 73 69 6d 70 6c 65 28 29 2c 20 5b 27 63 27  ).simple(), ['c'
1420: 2c 20 27 65 27 2c 20 27 67 27 2c 20 27 61 27 2c  , 'e', 'g', 'a',
1430: 20 27 64 27 5d 29 3b 0a 20 20 20 20 7d 2c 0a 0a   'd']);.    },..
1440: 20 20 20 20 27 41 62 36 2f 39 27 3a 20 66 75 6e      'Ab6/9': fun
1450: 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20 20 20  ction() {.      
1460: 61 73 73 65 72 74 2e 64 65 65 70 45 71 75 61 6c  assert.deepEqual
1470: 28 74 65 6f 72 69 61 2e 63 68 6f 72 64 28 27 41  (teoria.chord('A
1480: 62 36 2f 39 27 29 2e 73 69 6d 70 6c 65 28 29 2c  b6/9').simple(),
1490: 20 5b 27 61 62 27 2c 20 27 63 27 2c 20 27 65 62   ['ab', 'c', 'eb
14a0: 27 2c 20 27 66 27 2c 20 27 62 62 27 5d 29 3b 0a  ', 'f', 'bb']);.
14b0: 20 20 20 20 7d 2c 0a 0a 20 20 20 20 27 43 4d 37      },..    'CM7
14c0: 27 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a  ': function() {.
14d0: 20 20 20 20 20 20 61 73 73 65 72 74 2e 64 65 65        assert.dee
14e0: 70 45 71 75 61 6c 28 74 65 6f 72 69 61 2e 63 68  pEqual(teoria.ch
14f0: 6f 72 64 28 27 43 4d 37 27 29 2e 73 69 6d 70 6c  ord('CM7').simpl
1500: 65 28 29 2c 20 5b 27 63 27 2c 20 27 65 27 2c 20  e(), ['c', 'e', 
1510: 27 67 27 2c 20 27 62 27 5d 29 3b 0a 20 20 20 20  'g', 'b']);.    
1520: 7d 2c 0a 0a 20 20 20 20 27 43 6d 4d 37 27 3a 20  },..    'CmM7': 
1530: 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20  function() {.   
1540: 20 20 20 61 73 73 65 72 74 2e 64 65 65 70 45 71     assert.deepEq
1550: 75 61 6c 28 74 65 6f 72 69 61 2e 63 68 6f 72 64  ual(teoria.chord
1560: 28 27 43 6d 4d 37 27 29 2e 73 69 6d 70 6c 65 28  ('CmM7').simple(
1570: 29 2c 20 5b 27 63 27 2c 20 27 65 62 27 2c 20 27  ), ['c', 'eb', '
1580: 67 27 2c 20 27 62 27 5d 29 3b 0a 20 20 20 20 7d  g', 'b']);.    }
1590: 2c 0a 0a 20 20 20 20 27 44 4d 27 3a 20 66 75 6e  ,..    'DM': fun
15a0: 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20 20 20  ction() {.      
15b0: 61 73 73 65 72 74 2e 64 65 65 70 45 71 75 61 6c  assert.deepEqual
15c0: 28 74 65 6f 72 69 61 2e 63 68 6f 72 64 28 27 44  (teoria.chord('D
15d0: 4d 27 29 2e 73 69 6d 70 6c 65 28 29 2c 20 5b 27  M').simple(), ['
15e0: 64 27 2c 20 27 66 23 27 2c 20 27 61 27 5d 29 3b  d', 'f#', 'a']);
15f0: 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20 27 45 4d  .    },..    'EM
1600: 23 35 27 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20  #5': function() 
1610: 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 2e 64  {.      assert.d
1620: 65 65 70 45 71 75 61 6c 28 74 65 6f 72 69 61 2e  eepEqual(teoria.
1630: 63 68 6f 72 64 28 27 45 4d 23 35 27 29 2e 73 69  chord('EM#5').si
1640: 6d 70 6c 65 28 29 2c 20 5b 27 65 27 2c 20 27 67  mple(), ['e', 'g
1650: 23 27 2c 20 27 62 23 27 5d 29 3b 0a 20 20 20 20  #', 'b#']);.    
1660: 7d 2c 0a 0a 20 20 20 20 27 46 4d 39 27 3a 20 66  },..    'FM9': f
1670: 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20  unction() {.    
1680: 20 20 61 73 73 65 72 74 2e 64 65 65 70 45 71 75    assert.deepEqu
1690: 61 6c 28 74 65 6f 72 69 61 2e 63 68 6f 72 64 28  al(teoria.chord(
16a0: 27 46 4d 39 27 29 2e 73 69 6d 70 6c 65 28 29 2c  'FM9').simple(),
16b0: 20 5b 27 66 27 2c 20 27 61 27 2c 20 27 63 27 2c   ['f', 'a', 'c',
16c0: 20 27 65 27 2c 20 27 67 27 5d 29 3b 0a 20 20 20   'e', 'g']);.   
16d0: 20 7d 2c 0a 0a 20 20 20 20 27 44 6d 69 27 3a 20   },..    'Dmi': 
16e0: 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20  function() {.   
16f0: 20 20 20 61 73 73 65 72 74 2e 64 65 65 70 45 71     assert.deepEq
1700: 75 61 6c 28 74 65 6f 72 69 61 2e 63 68 6f 72 64  ual(teoria.chord
1710: 28 27 44 6d 69 27 29 2e 73 69 6d 70 6c 65 28 29  ('Dmi').simple()
1720: 2c 20 5b 27 64 27 2c 20 27 66 27 2c 20 27 61 27  , ['d', 'f', 'a'
1730: 5d 29 3b 0a 0a 20 20 20 20 7d 2c 0a 0a 20 20 20  ]);..    },..   
1740: 20 27 45 6d 69 37 27 3a 20 66 75 6e 63 74 69 6f   'Emi7': functio
1750: 6e 28 29 20 7b 0a 20 20 20 20 20 20 61 73 73 65  n() {.      asse
1760: 72 74 2e 64 65 65 70 45 71 75 61 6c 28 74 65 6f  rt.deepEqual(teo
1770: 72 69 61 2e 63 68 6f 72 64 28 27 45 6d 69 37 27  ria.chord('Emi7'
1780: 29 2e 73 69 6d 70 6c 65 28 29 2c 20 5b 27 65 27  ).simple(), ['e'
1790: 2c 20 27 67 27 2c 20 27 62 27 2c 20 27 64 27 5d  , 'g', 'b', 'd']
17a0: 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20 27  );.    },..    '
17b0: 44 6d 61 27 3a 20 66 75 6e 63 74 69 6f 6e 28 29  Dma': function()
17c0: 20 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 2e   {.      assert.
17d0: 64 65 65 70 45 71 75 61 6c 28 74 65 6f 72 69 61  deepEqual(teoria
17e0: 2e 63 68 6f 72 64 28 27 44 6d 61 27 29 2e 73 69  .chord('Dma').si
17f0: 6d 70 6c 65 28 29 2c 20 5b 27 64 27 2c 20 27 66  mple(), ['d', 'f
1800: 23 27 2c 20 27 61 27 5d 29 3b 0a 20 20 20 20 7d  #', 'a']);.    }
1810: 2c 0a 0a 20 20 20 20 27 45 6d 61 39 27 3a 20 66  ,..    'Ema9': f
1820: 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20  unction() {.    
1830: 20 20 61 73 73 65 72 74 2e 64 65 65 70 45 71 75    assert.deepEqu
1840: 61 6c 28 74 65 6f 72 69 61 2e 63 68 6f 72 64 28  al(teoria.chord(
1850: 27 45 6d 61 39 27 29 2e 73 69 6d 70 6c 65 28 29  'Ema9').simple()
1860: 2c 20 5b 27 65 27 2c 20 27 67 23 27 2c 20 27 62  , ['e', 'g#', 'b
1870: 27 2c 20 27 64 23 27 2c 20 27 66 23 27 5d 29 3b  ', 'd#', 'f#']);
1880: 0a 20 20 20 20 7d 0a 20 20 7d 2c 0a 0a 20 20 27  .    }.  },..  '
1890: 43 61 73 65 20 64 6f 65 73 6e 5c 27 74 20 6d 61  Case doesn\'t ma
18a0: 74 74 65 72 27 3a 20 7b 0a 20 20 20 20 27 42 62  tter': {.    'Bb
18b0: 44 6f 6d 27 3a 20 66 75 6e 63 74 69 6f 6e 28 29  Dom': function()
18c0: 20 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 2e   {.      assert.
18d0: 64 65 65 70 45 71 75 61 6c 28 74 65 6f 72 69 61  deepEqual(teoria
18e0: 2e 63 68 6f 72 64 28 27 42 62 44 6f 6d 27 29 2e  .chord('BbDom').
18f0: 73 69 6d 70 6c 65 28 29 2c 20 74 65 6f 72 69 61  simple(), teoria
1900: 2e 63 68 6f 72 64 28 27 42 62 64 6f 6d 27 29 2e  .chord('Bbdom').
1910: 73 69 6d 70 6c 65 28 29 29 3b 0a 20 20 20 20 7d  simple());.    }
1920: 2c 0a 0a 20 20 20 20 27 45 62 4d 61 6a 39 27 3a  ,..    'EbMaj9':
1930: 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20   function() {.  
1940: 20 20 20 20 61 73 73 65 72 74 2e 64 65 65 70 45      assert.deepE
1950: 71 75 61 6c 28 74 65 6f 72 69 61 2e 63 68 6f 72  qual(teoria.chor
1960: 64 28 27 45 62 4d 61 6a 39 27 29 2e 73 69 6d 70  d('EbMaj9').simp
1970: 6c 65 28 29 2c 20 74 65 6f 72 69 61 2e 63 68 6f  le(), teoria.cho
1980: 72 64 28 27 45 62 6d 61 6a 39 27 29 2e 73 69 6d  rd('Ebmaj9').sim
1990: 70 6c 65 28 29 29 3b 0a 20 20 20 20 7d 2c 0a 0a  ple());.    },..
19a0: 20 20 20 20 27 41 53 75 73 34 27 3a 20 66 75 6e      'ASus4': fun
19b0: 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20 20 20  ction() {.      
19c0: 61 73 73 65 72 74 2e 64 65 65 70 45 71 75 61 6c  assert.deepEqual
19d0: 28 74 65 6f 72 69 61 2e 63 68 6f 72 64 28 27 41  (teoria.chord('A
19e0: 53 75 73 34 27 29 2e 73 69 6d 70 6c 65 28 29 2c  Sus4').simple(),
19f0: 20 74 65 6f 72 69 61 2e 63 68 6f 72 64 28 27 41   teoria.chord('A
1a00: 73 75 73 34 27 29 2e 73 69 6d 70 6c 65 28 29 29  sus4').simple())
1a10: 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20 27 45  ;.    },..    'E
1a20: 41 64 64 39 27 3a 20 66 75 6e 63 74 69 6f 6e 28  Add9': function(
1a30: 29 20 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  ) {.      assert
1a40: 2e 64 65 65 70 45 71 75 61 6c 28 74 65 6f 72 69  .deepEqual(teori
1a50: 61 2e 63 68 6f 72 64 28 27 45 41 64 64 39 27 29  a.chord('EAdd9')
1a60: 2e 73 69 6d 70 6c 65 28 29 2c 20 74 65 6f 72 69  .simple(), teori
1a70: 61 2e 63 68 6f 72 64 28 27 45 61 64 64 39 27 29  a.chord('Eadd9')
1a80: 2e 73 69 6d 70 6c 65 28 29 29 3b 0a 20 20 20 20  .simple());.    
1a90: 7d 0a 20 20 7d 2c 0a 0a 20 20 27 43 68 6f 72 64  }.  },..  'Chord
1aa0: 20 4d 65 74 68 6f 64 73 27 3a 20 7b 0a 20 20 20   Methods': {.   
1ab0: 20 27 23 62 61 73 73 20 6f 66 20 43 6d 61 6a 37   '#bass of Cmaj7
1ac0: 27 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a  ': function() {.
1ad0: 20 20 20 20 20 20 61 73 73 65 72 74 2e 65 71 75        assert.equ
1ae0: 61 6c 28 74 65 6f 72 69 61 2e 63 68 6f 72 64 28  al(teoria.chord(
1af0: 27 43 6d 61 6a 37 27 29 2e 62 61 73 73 28 29 2e  'Cmaj7').bass().
1b00: 74 6f 53 74 72 69 6e 67 28 74 72 75 65 29 2c 20  toString(true), 
1b10: 27 63 27 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20  'c');.    },..  
1b20: 20 20 27 23 62 61 73 73 20 6f 66 20 41 2f 43 23    '#bass of A/C#
1b30: 27 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a  ': function() {.
1b40: 20 20 20 20 20 20 61 73 73 65 72 74 2e 65 71 75        assert.equ
1b50: 61 6c 28 74 65 6f 72 69 61 2e 63 68 6f 72 64 28  al(teoria.chord(
1b60: 27 41 2f 43 23 27 29 2e 62 61 73 73 28 29 2e 74  'A/C#').bass().t
1b70: 6f 53 74 72 69 6e 67 28 74 72 75 65 29 2c 20 27  oString(true), '
1b80: 63 23 27 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20  c#');.    },..  
1b90: 20 20 27 23 62 61 73 73 20 6f 66 20 44 36 2f 39    '#bass of D6/9
1ba0: 27 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a  ': function() {.
1bb0: 20 20 20 20 20 20 61 73 73 65 72 74 2e 65 71 75        assert.equ
1bc0: 61 6c 28 74 65 6f 72 69 61 2e 63 68 6f 72 64 28  al(teoria.chord(
1bd0: 27 44 36 2f 39 27 29 2e 62 61 73 73 28 29 2e 74  'D6/9').bass().t
1be0: 6f 53 74 72 69 6e 67 28 74 72 75 65 29 2c 20 27  oString(true), '
1bf0: 64 27 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 20  d');.    },..   
1c00: 20 27 23 71 75 61 6c 69 74 79 28 29 20 6f 66 20   '#quality() of 
1c10: 42 6d 61 6a 37 27 3a 20 66 75 6e 63 74 69 6f 6e  Bmaj7': function
1c20: 28 29 20 7b 0a 20 20 20 20 20 20 61 73 73 65 72  () {.      asser
1c30: 74 2e 65 71 75 61 6c 28 74 65 6f 72 69 61 2e 63  t.equal(teoria.c
1c40: 68 6f 72 64 28 27 42 6d 61 6a 37 27 29 2e 71 75  hord('Bmaj7').qu
1c50: 61 6c 69 74 79 28 29 2c 20 27 6d 61 6a 6f 72 27  ality(), 'major'
1c60: 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20 27  );.    },..    '
1c70: 23 71 75 61 6c 69 74 79 28 29 20 6f 66 20 45 37  #quality() of E7
1c80: 27 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a  ': function() {.
1c90: 20 20 20 20 20 20 61 73 73 65 72 74 2e 65 71 75        assert.equ
1ca0: 61 6c 28 74 65 6f 72 69 61 2e 63 68 6f 72 64 28  al(teoria.chord(
1cb0: 27 45 37 27 29 2e 71 75 61 6c 69 74 79 28 29 2c  'E7').quality(),
1cc0: 20 27 64 6f 6d 69 6e 61 6e 74 27 29 3b 0a 20 20   'dominant');.  
1cd0: 20 20 7d 2c 0a 0a 20 20 20 20 27 23 71 75 61 6c    },..    '#qual
1ce0: 69 74 79 28 29 20 6f 66 20 44 62 6d 37 62 35 27  ity() of Dbm7b5'
1cf0: 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20  : function() {. 
1d00: 20 20 20 20 20 61 73 73 65 72 74 2e 65 71 75 61       assert.equa
1d10: 6c 28 74 65 6f 72 69 61 2e 63 68 6f 72 64 28 27  l(teoria.chord('
1d20: 44 62 6d 37 62 35 27 29 2e 71 75 61 6c 69 74 79  Dbm7b5').quality
1d30: 28 29 2c 20 27 68 61 6c 66 2d 64 69 6d 69 6e 69  (), 'half-dimini
1d40: 73 68 65 64 27 29 3b 0a 20 20 20 20 7d 2c 0a 0a  shed');.    },..
1d50: 20 20 20 20 27 23 71 75 61 6c 69 74 79 28 29 20      '#quality() 
1d60: 6f 66 20 43 6d 69 6e 31 31 27 3a 20 66 75 6e 63  of Cmin11': func
1d70: 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20 20 20 61  tion() {.      a
1d80: 73 73 65 72 74 2e 65 71 75 61 6c 28 74 65 6f 72  ssert.equal(teor
1d90: 69 61 2e 63 68 6f 72 64 28 27 43 6d 69 6e 31 31  ia.chord('Cmin11
1da0: 27 29 2e 71 75 61 6c 69 74 79 28 29 2c 20 27 6d  ').quality(), 'm
1db0: 69 6e 6f 72 27 29 3b 0a 20 20 20 20 7d 2c 0a 0a  inor');.    },..
1dc0: 20 20 20 20 27 23 71 75 61 6c 69 74 79 28 29 20      '#quality() 
1dd0: 6f 66 20 41 2b 27 3a 20 66 75 6e 63 74 69 6f 6e  of A+': function
1de0: 28 29 20 7b 0a 20 20 20 20 20 20 61 73 73 65 72  () {.      asser
1df0: 74 2e 65 71 75 61 6c 28 74 65 6f 72 69 61 2e 63  t.equal(teoria.c
1e00: 68 6f 72 64 28 27 41 2b 27 29 2e 71 75 61 6c 69  hord('A+').quali
1e10: 74 79 28 29 2c 20 27 61 75 67 6d 65 6e 74 65 64  ty(), 'augmented
1e20: 27 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20  ');.    },..    
1e30: 27 23 71 75 61 6c 69 74 79 28 29 20 6f 66 20 41  '#quality() of A
1e40: 23 28 62 31 33 29 27 3a 20 66 75 6e 63 74 69 6f  #(b13)': functio
1e50: 6e 28 29 20 7b 0a 20 20 20 20 20 20 61 73 73 65  n() {.      asse
1e60: 72 74 2e 65 71 75 61 6c 28 74 65 6f 72 69 61 2e  rt.equal(teoria.
1e70: 63 68 6f 72 64 28 27 41 23 28 62 31 33 29 27 29  chord('A#(b13)')
1e80: 2e 71 75 61 6c 69 74 79 28 29 2c 20 27 64 6f 6d  .quality(), 'dom
1e90: 69 6e 61 6e 74 27 29 3b 0a 20 20 20 20 7d 2c 0a  inant');.    },.
1ea0: 0a 20 20 20 20 27 23 71 75 61 6c 69 74 79 28 29  .    '#quality()
1eb0: 20 6f 66 20 47 6d 62 35 27 3a 20 66 75 6e 63 74   of Gmb5': funct
1ec0: 69 6f 6e 28 29 20 7b 0a 20 20 20 20 20 20 61 73  ion() {.      as
1ed0: 73 65 72 74 2e 65 71 75 61 6c 28 74 65 6f 72 69  sert.equal(teori
1ee0: 61 2e 63 68 6f 72 64 28 27 47 6d 62 35 27 29 2e  a.chord('Gmb5').
1ef0: 71 75 61 6c 69 74 79 28 29 2c 20 27 64 69 6d 69  quality(), 'dimi
1f00: 6e 69 73 68 65 64 27 29 3b 0a 20 20 20 20 7d 2c  nished');.    },
1f10: 0a 0a 20 20 20 20 27 23 71 75 61 6c 69 74 79 28  ..    '#quality(
1f20: 29 20 6f 66 20 41 73 75 73 34 27 3a 20 66 75 6e  ) of Asus4': fun
1f30: 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20 20 20  ction() {.      
1f40: 61 73 73 65 72 74 2e 65 71 75 61 6c 28 74 65 6f  assert.equal(teo
1f50: 72 69 61 2e 63 68 6f 72 64 28 27 41 73 75 73 34  ria.chord('Asus4
1f60: 27 29 2e 71 75 61 6c 69 74 79 28 29 2c 20 75 6e  ').quality(), un
1f70: 64 65 66 69 6e 65 64 29 3b 0a 20 20 20 20 7d 2c  defined);.    },
1f80: 0a 0a 20 20 20 20 27 23 71 75 61 6c 69 74 79 28  ..    '#quality(
1f90: 29 20 6f 66 20 46 6d 23 35 27 3a 20 66 75 6e 63  ) of Fm#5': func
1fa0: 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20 20 20 61  tion() {.      a
1fb0: 73 73 65 72 74 2e 65 71 75 61 6c 28 74 65 6f 72  ssert.equal(teor
1fc0: 69 61 2e 63 68 6f 72 64 28 27 46 6d 23 35 27 29  ia.chord('Fm#5')
1fd0: 2e 71 75 61 6c 69 74 79 28 29 2c 20 27 6d 69 6e  .quality(), 'min
1fe0: 6f 72 27 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20  or');.    },..  
1ff0: 20 20 27 23 63 68 6f 72 64 54 79 70 65 28 29 20    '#chordType() 
2000: 6f 66 20 43 27 3a 20 66 75 6e 63 74 69 6f 6e 28  of C': function(
2010: 29 20 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  ) {.      assert
2020: 2e 65 71 75 61 6c 28 74 65 6f 72 69 61 2e 63 68  .equal(teoria.ch
2030: 6f 72 64 28 27 43 27 29 2e 63 68 6f 72 64 54 79  ord('C').chordTy
2040: 70 65 28 29 2c 20 27 74 72 69 61 64 27 29 3b 0a  pe(), 'triad');.
2050: 20 20 20 20 7d 2c 0a 0a 20 20 20 20 27 23 63 68      },..    '#ch
2060: 6f 72 64 54 79 70 65 28 29 20 6f 66 20 44 6d 27  ordType() of Dm'
2070: 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20  : function() {. 
2080: 20 20 20 20 20 61 73 73 65 72 74 2e 65 71 75 61       assert.equa
2090: 6c 28 74 65 6f 72 69 61 2e 63 68 6f 72 64 28 27  l(teoria.chord('
20a0: 44 6d 27 29 2e 63 68 6f 72 64 54 79 70 65 28 29  Dm').chordType()
20b0: 2c 20 27 74 72 69 61 64 27 29 3b 0a 20 20 20 20  , 'triad');.    
20c0: 7d 2c 0a 0a 20 20 20 20 27 23 63 68 6f 72 64 54  },..    '#chordT
20d0: 79 70 65 28 29 20 6f 66 20 41 37 27 3a 20 66 75  ype() of A7': fu
20e0: 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20 20  nction() {.     
20f0: 20 61 73 73 65 72 74 2e 65 71 75 61 6c 28 74 65   assert.equal(te
2100: 6f 72 69 61 2e 63 68 6f 72 64 28 27 41 37 27 29  oria.chord('A7')
2110: 2e 63 68 6f 72 64 54 79 70 65 28 29 2c 20 27 74  .chordType(), 't
2120: 65 74 72 61 64 27 29 3b 0a 20 20 20 20 7d 2c 0a  etrad');.    },.
2130: 0a 20 20 20 20 27 23 63 68 6f 72 64 54 79 70 65  .    '#chordType
2140: 28 29 20 6f 66 20 42 73 75 73 34 27 3a 20 66 75  () of Bsus4': fu
2150: 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20 20  nction() {.     
2160: 20 61 73 73 65 72 74 2e 65 71 75 61 6c 28 74 65   assert.equal(te
2170: 6f 72 69 61 2e 63 68 6f 72 64 28 27 42 73 75 73  oria.chord('Bsus
2180: 34 27 29 2e 63 68 6f 72 64 54 79 70 65 28 29 2c  4').chordType(),
2190: 20 27 74 72 69 63 68 6f 72 64 27 29 3b 0a 20 20   'trichord');.  
21a0: 20 20 7d 2c 0a 0a 20 20 20 20 27 23 63 68 6f 72    },..    '#chor
21b0: 64 54 79 70 65 28 29 20 6f 66 20 45 35 27 3a 20  dType() of E5': 
21c0: 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20  function() {.   
21d0: 20 20 20 61 73 73 65 72 74 2e 65 71 75 61 6c 28     assert.equal(
21e0: 74 65 6f 72 69 61 2e 63 68 6f 72 64 28 27 45 35  teoria.chord('E5
21f0: 27 29 2e 63 68 6f 72 64 54 79 70 65 28 29 2c 20  ').chordType(), 
2200: 27 64 79 61 64 27 29 3b 0a 20 20 20 20 7d 2c 0a  'dyad');.    },.
2210: 20 20 7d 0a 7d 29 2e 65 78 70 6f 72 74 28 6d 6f    }.}).export(mo
2220: 64 75 6c 65 29 3b 0a                             dule);.