⌈⌋ branch:  Bitrhythm


Hex Artifact Content

Artifact 847094bbc68206c43c8c5be1548a568eb75fec5752710cb494e8ccf807655db5:


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 66 75 6e 63 74 69  ('../');..functi
0060: 6f 6e 20 61 64 64 53 69 6d 70 6c 65 28 69 6e 74  on addSimple(int
0070: 65 72 76 61 6c 31 2c 20 69 6e 74 65 72 76 61 6c  erval1, interval
0080: 32 29 20 7b 0a 20 20 72 65 74 75 72 6e 20 74 65  2) {.  return te
0090: 6f 72 69 61 2e 69 6e 74 65 72 76 61 6c 28 69 6e  oria.interval(in
00a0: 74 65 72 76 61 6c 31 29 2e 61 64 64 28 74 65 6f  terval1).add(teo
00b0: 72 69 61 2e 69 6e 74 65 72 76 61 6c 28 69 6e 74  ria.interval(int
00c0: 65 72 76 61 6c 32 29 29 3b 0a 7d 0a 0a 76 6f 77  erval2));.}..vow
00d0: 73 2e 64 65 73 63 72 69 62 65 28 27 49 6e 74 65  s.describe('Inte
00e0: 72 76 61 6c 73 27 29 2e 61 64 64 42 61 74 63 68  rvals').addBatch
00f0: 28 7b 0a 20 20 27 52 65 6c 61 74 69 76 65 20 49  ({.  'Relative I
0100: 6e 74 65 72 76 61 6c 73 27 3a 20 7b 0a 20 20 20  ntervals': {.   
0110: 20 74 6f 70 69 63 3a 20 66 75 6e 63 74 69 6f 6e   topic: function
0120: 28 29 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72  () {.      retur
0130: 6e 20 74 65 6f 72 69 61 2e 6e 6f 74 65 28 27 46  n teoria.note('F
0140: 23 2c 27 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20  #,');.    },..  
0150: 20 20 27 44 6f 75 62 6c 79 20 64 69 6d 69 6e 69    'Doubly dimini
0160: 73 68 65 64 20 73 65 63 6f 6e 64 27 3a 20 66 75  shed second': fu
0170: 6e 63 74 69 6f 6e 28 6e 6f 74 65 29 20 7b 0a 20  nction(note) {. 
0180: 20 20 20 20 20 61 73 73 65 72 74 2e 64 65 65 70       assert.deep
0190: 45 71 75 61 6c 28 6e 6f 74 65 2e 69 6e 74 65 72  Equal(note.inter
01a0: 76 61 6c 28 27 64 64 32 27 29 2c 20 74 65 6f 72  val('dd2'), teor
01b0: 69 61 2e 6e 6f 74 65 28 27 47 62 62 2c 27 29 29  ia.note('Gbb,'))
01c0: 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20 27 44  ;.    },..    'D
01d0: 69 6d 69 6e 69 73 68 65 64 20 73 65 63 6f 6e 64  iminished second
01e0: 27 3a 20 66 75 6e 63 74 69 6f 6e 28 6e 6f 74 65  ': function(note
01f0: 29 20 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  ) {.      assert
0200: 2e 64 65 65 70 45 71 75 61 6c 28 6e 6f 74 65 2e  .deepEqual(note.
0210: 69 6e 74 65 72 76 61 6c 28 27 64 32 27 29 2c 20  interval('d2'), 
0220: 74 65 6f 72 69 61 2e 6e 6f 74 65 28 27 47 62 2c  teoria.note('Gb,
0230: 27 29 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 20  '));.    },..   
0240: 20 27 44 69 6d 69 6e 69 73 68 65 64 20 73 65 63   'Diminished sec
0250: 6f 6e 64 2c 20 41 50 49 20 6d 65 74 68 6f 64 20  ond, API method 
0260: 74 77 6f 27 3a 20 66 75 6e 63 74 69 6f 6e 28 6e  two': function(n
0270: 6f 74 65 29 20 7b 0a 20 20 20 20 20 20 61 73 73  ote) {.      ass
0280: 65 72 74 2e 64 65 65 70 45 71 75 61 6c 28 74 65  ert.deepEqual(te
0290: 6f 72 69 61 2e 69 6e 74 65 72 76 61 6c 28 6e 6f  oria.interval(no
02a0: 74 65 2c 20 74 65 6f 72 69 61 2e 69 6e 74 65 72  te, teoria.inter
02b0: 76 61 6c 28 27 64 32 27 29 29 2c 20 74 65 6f 72  val('d2')), teor
02c0: 69 61 2e 6e 6f 74 65 28 27 47 62 2c 27 29 29 3b  ia.note('Gb,'));
02d0: 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20 27 44 69  .    },..    'Di
02e0: 6d 69 6e 69 73 68 65 64 20 73 65 63 6f 6e 64 2c  minished second,
02f0: 20 41 50 49 20 6d 65 74 68 6f 64 20 74 68 72 65   API method thre
0300: 65 27 3a 20 66 75 6e 63 74 69 6f 6e 28 6e 6f 74  e': function(not
0310: 65 29 20 7b 0a 20 20 20 20 20 20 61 73 73 65 72  e) {.      asser
0320: 74 2e 64 65 65 70 45 71 75 61 6c 28 6e 6f 74 65  t.deepEqual(note
0330: 2e 69 6e 74 65 72 76 61 6c 28 74 65 6f 72 69 61  .interval(teoria
0340: 2e 69 6e 74 65 72 76 61 6c 28 27 64 32 27 29 29  .interval('d2'))
0350: 2c 20 74 65 6f 72 69 61 2e 6e 6f 74 65 28 27 47  , teoria.note('G
0360: 62 2c 27 29 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20  b,'));.    },.. 
0370: 20 20 20 27 4d 69 6e 6f 72 20 73 65 63 6f 6e 64     'Minor second
0380: 27 3a 20 66 75 6e 63 74 69 6f 6e 28 6e 6f 74 65  ': function(note
0390: 29 20 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  ) {.      assert
03a0: 2e 64 65 65 70 45 71 75 61 6c 28 6e 6f 74 65 2e  .deepEqual(note.
03b0: 69 6e 74 65 72 76 61 6c 28 27 6d 32 27 29 2c 20  interval('m2'), 
03c0: 74 65 6f 72 69 61 2e 6e 6f 74 65 28 27 47 2c 27  teoria.note('G,'
03d0: 29 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20  ));.    },..    
03e0: 27 4d 61 6a 6f 72 20 73 65 63 6f 6e 64 27 3a 20  'Major second': 
03f0: 66 75 6e 63 74 69 6f 6e 28 6e 6f 74 65 29 20 7b  function(note) {
0400: 0a 20 20 20 20 20 20 61 73 73 65 72 74 2e 64 65  .      assert.de
0410: 65 70 45 71 75 61 6c 28 6e 6f 74 65 2e 69 6e 74  epEqual(note.int
0420: 65 72 76 61 6c 28 27 4d 32 27 29 2c 20 74 65 6f  erval('M2'), teo
0430: 72 69 61 2e 6e 6f 74 65 28 27 47 23 2c 27 29 29  ria.note('G#,'))
0440: 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20 27 41  ;.    },..    'A
0450: 75 67 6d 65 6e 74 65 64 20 73 65 63 6f 6e 64 27  ugmented second'
0460: 3a 20 66 75 6e 63 74 69 6f 6e 28 6e 6f 74 65 29  : function(note)
0470: 20 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 2e   {.      assert.
0480: 64 65 65 70 45 71 75 61 6c 28 6e 6f 74 65 2e 69  deepEqual(note.i
0490: 6e 74 65 72 76 61 6c 28 27 41 32 27 29 2c 20 74  nterval('A2'), t
04a0: 65 6f 72 69 61 2e 6e 6f 74 65 28 27 47 78 2c 27  eoria.note('Gx,'
04b0: 29 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20  ));.    },..    
04c0: 27 44 6f 75 62 6c 79 20 64 69 6d 69 6e 69 73 68  'Doubly diminish
04d0: 65 64 20 74 68 69 72 64 27 3a 20 66 75 6e 63 74  ed third': funct
04e0: 69 6f 6e 28 6e 6f 74 65 29 20 7b 0a 20 20 20 20  ion(note) {.    
04f0: 20 20 61 73 73 65 72 74 2e 64 65 65 70 45 71 75    assert.deepEqu
0500: 61 6c 28 6e 6f 74 65 2e 69 6e 74 65 72 76 61 6c  al(note.interval
0510: 28 27 64 64 33 27 29 2c 20 74 65 6f 72 69 61 2e  ('dd3'), teoria.
0520: 6e 6f 74 65 28 27 41 62 62 2c 27 29 29 3b 0a 20  note('Abb,'));. 
0530: 20 20 20 7d 2c 0a 0a 20 20 20 20 27 44 69 6d 69     },..    'Dimi
0540: 6e 69 73 68 65 64 20 74 68 69 72 64 27 3a 20 66  nished third': f
0550: 75 6e 63 74 69 6f 6e 28 6e 6f 74 65 29 20 7b 0a  unction(note) {.
0560: 20 20 20 20 20 20 61 73 73 65 72 74 2e 64 65 65        assert.dee
0570: 70 45 71 75 61 6c 28 6e 6f 74 65 2e 69 6e 74 65  pEqual(note.inte
0580: 72 76 61 6c 28 27 64 33 27 29 2c 20 74 65 6f 72  rval('d3'), teor
0590: 69 61 2e 6e 6f 74 65 28 27 41 62 2c 27 29 29 3b  ia.note('Ab,'));
05a0: 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20 27 4d 69  .    },..    'Mi
05b0: 6e 6f 72 20 74 68 69 72 64 27 3a 20 66 75 6e 63  nor third': func
05c0: 74 69 6f 6e 28 6e 6f 74 65 29 20 7b 0a 20 20 20  tion(note) {.   
05d0: 20 20 20 61 73 73 65 72 74 2e 64 65 65 70 45 71     assert.deepEq
05e0: 75 61 6c 28 6e 6f 74 65 2e 69 6e 74 65 72 76 61  ual(note.interva
05f0: 6c 28 27 6d 33 27 29 2c 20 74 65 6f 72 69 61 2e  l('m3'), teoria.
0600: 6e 6f 74 65 28 27 41 2c 27 29 29 3b 0a 20 20 20  note('A,'));.   
0610: 20 7d 2c 0a 0a 20 20 20 20 27 4d 61 6a 6f 72 20   },..    'Major 
0620: 74 68 69 72 64 27 3a 20 66 75 6e 63 74 69 6f 6e  third': function
0630: 28 6e 6f 74 65 29 20 7b 0a 20 20 20 20 20 20 61  (note) {.      a
0640: 73 73 65 72 74 2e 64 65 65 70 45 71 75 61 6c 28  ssert.deepEqual(
0650: 6e 6f 74 65 2e 69 6e 74 65 72 76 61 6c 28 27 4d  note.interval('M
0660: 33 27 29 2c 20 74 65 6f 72 69 61 2e 6e 6f 74 65  3'), teoria.note
0670: 28 27 41 23 2c 27 29 29 3b 0a 20 20 20 20 7d 2c  ('A#,'));.    },
0680: 0a 0a 20 20 20 20 27 41 75 67 6d 65 6e 74 65 64  ..    'Augmented
0690: 20 74 68 69 72 64 27 3a 20 66 75 6e 63 74 69 6f   third': functio
06a0: 6e 28 6e 6f 74 65 29 20 7b 0a 20 20 20 20 20 20  n(note) {.      
06b0: 61 73 73 65 72 74 2e 64 65 65 70 45 71 75 61 6c  assert.deepEqual
06c0: 28 6e 6f 74 65 2e 69 6e 74 65 72 76 61 6c 28 27  (note.interval('
06d0: 41 33 27 29 2c 20 74 65 6f 72 69 61 2e 6e 6f 74  A3'), teoria.not
06e0: 65 28 27 41 78 2c 27 29 29 3b 0a 20 20 20 20 7d  e('Ax,'));.    }
06f0: 2c 0a 0a 20 20 20 20 27 44 6f 75 62 6c 79 20 64  ,..    'Doubly d
0700: 69 6d 69 6e 69 73 68 65 64 20 66 6f 75 72 74 68  iminished fourth
0710: 27 3a 20 66 75 6e 63 74 69 6f 6e 28 6e 6f 74 65  ': function(note
0720: 29 20 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  ) {.      assert
0730: 2e 64 65 65 70 45 71 75 61 6c 28 6e 6f 74 65 2e  .deepEqual(note.
0740: 69 6e 74 65 72 76 61 6c 28 27 64 64 34 27 29 2c  interval('dd4'),
0750: 20 74 65 6f 72 69 61 2e 6e 6f 74 65 28 27 42 62   teoria.note('Bb
0760: 62 2c 27 29 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20  b,'));.    },.. 
0770: 20 20 20 27 44 69 6d 69 6e 69 73 68 65 64 20 66     'Diminished f
0780: 6f 75 72 74 68 27 3a 20 66 75 6e 63 74 69 6f 6e  ourth': function
0790: 28 6e 6f 74 65 29 20 7b 0a 20 20 20 20 20 20 61  (note) {.      a
07a0: 73 73 65 72 74 2e 64 65 65 70 45 71 75 61 6c 28  ssert.deepEqual(
07b0: 6e 6f 74 65 2e 69 6e 74 65 72 76 61 6c 28 27 64  note.interval('d
07c0: 34 27 29 2c 20 74 65 6f 72 69 61 2e 6e 6f 74 65  4'), teoria.note
07d0: 28 27 42 62 2c 27 29 29 3b 0a 20 20 20 20 7d 2c  ('Bb,'));.    },
07e0: 0a 0a 20 20 20 20 27 50 65 72 66 65 63 74 20 66  ..    'Perfect f
07f0: 6f 75 72 74 68 27 3a 20 66 75 6e 63 74 69 6f 6e  ourth': function
0800: 28 6e 6f 74 65 29 20 7b 0a 20 20 20 20 20 20 61  (note) {.      a
0810: 73 73 65 72 74 2e 64 65 65 70 45 71 75 61 6c 28  ssert.deepEqual(
0820: 6e 6f 74 65 2e 69 6e 74 65 72 76 61 6c 28 27 50  note.interval('P
0830: 34 27 29 2c 20 74 65 6f 72 69 61 2e 6e 6f 74 65  4'), teoria.note
0840: 28 27 42 2c 27 29 29 3b 0a 20 20 20 20 7d 2c 0a  ('B,'));.    },.
0850: 0a 20 20 20 20 27 41 75 67 6d 65 6e 74 65 64 20  .    'Augmented 
0860: 66 6f 75 72 74 68 27 3a 20 66 75 6e 63 74 69 6f  fourth': functio
0870: 6e 28 6e 6f 74 65 29 20 7b 0a 20 20 20 20 20 20  n(note) {.      
0880: 61 73 73 65 72 74 2e 64 65 65 70 45 71 75 61 6c  assert.deepEqual
0890: 28 6e 6f 74 65 2e 69 6e 74 65 72 76 61 6c 28 27  (note.interval('
08a0: 41 34 27 29 2c 20 74 65 6f 72 69 61 2e 6e 6f 74  A4'), teoria.not
08b0: 65 28 27 42 23 2c 27 29 29 3b 0a 20 20 20 20 7d  e('B#,'));.    }
08c0: 2c 0a 0a 20 20 20 20 27 44 6f 75 62 6c 79 20 61  ,..    'Doubly a
08d0: 75 67 6d 65 6e 74 65 64 20 66 6f 75 72 74 68 27  ugmented fourth'
08e0: 3a 20 66 75 6e 63 74 69 6f 6e 28 6e 6f 74 65 29  : function(note)
08f0: 20 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 2e   {.      assert.
0900: 64 65 65 70 45 71 75 61 6c 28 6e 6f 74 65 2e 69  deepEqual(note.i
0910: 6e 74 65 72 76 61 6c 28 27 41 41 34 27 29 2c 20  nterval('AA4'), 
0920: 74 65 6f 72 69 61 2e 6e 6f 74 65 28 27 42 78 2c  teoria.note('Bx,
0930: 27 29 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 20  '));.    },..   
0940: 20 27 44 6f 75 62 6c 79 20 64 69 6d 69 6e 69 73   'Doubly diminis
0950: 68 65 64 20 66 69 66 74 68 27 3a 20 66 75 6e 63  hed fifth': func
0960: 74 69 6f 6e 28 6e 6f 74 65 29 20 7b 0a 20 20 20  tion(note) {.   
0970: 20 20 20 61 73 73 65 72 74 2e 64 65 65 70 45 71     assert.deepEq
0980: 75 61 6c 28 6e 6f 74 65 2e 69 6e 74 65 72 76 61  ual(note.interva
0990: 6c 28 27 64 64 35 27 29 2c 20 74 65 6f 72 69 61  l('dd5'), teoria
09a0: 2e 6e 6f 74 65 28 27 43 62 27 29 29 3b 0a 20 20  .note('Cb'));.  
09b0: 20 20 7d 2c 0a 0a 20 20 20 20 27 44 69 6d 69 6e    },..    'Dimin
09c0: 69 73 68 65 64 20 66 69 66 74 68 27 3a 20 66 75  ished fifth': fu
09d0: 6e 63 74 69 6f 6e 28 6e 6f 74 65 29 20 7b 0a 20  nction(note) {. 
09e0: 20 20 20 20 20 61 73 73 65 72 74 2e 64 65 65 70       assert.deep
09f0: 45 71 75 61 6c 28 6e 6f 74 65 2e 69 6e 74 65 72  Equal(note.inter
0a00: 76 61 6c 28 27 64 35 27 29 2c 20 74 65 6f 72 69  val('d5'), teori
0a10: 61 2e 6e 6f 74 65 28 27 43 27 29 29 3b 0a 20 20  a.note('C'));.  
0a20: 20 20 7d 2c 0a 0a 20 20 20 20 27 50 65 72 66 65    },..    'Perfe
0a30: 63 74 20 66 69 66 74 68 27 3a 20 66 75 6e 63 74  ct fifth': funct
0a40: 69 6f 6e 28 6e 6f 74 65 29 20 7b 0a 20 20 20 20  ion(note) {.    
0a50: 20 20 61 73 73 65 72 74 2e 64 65 65 70 45 71 75    assert.deepEqu
0a60: 61 6c 28 6e 6f 74 65 2e 69 6e 74 65 72 76 61 6c  al(note.interval
0a70: 28 27 50 35 27 29 2c 20 74 65 6f 72 69 61 2e 6e  ('P5'), teoria.n
0a80: 6f 74 65 28 27 43 23 27 29 29 3b 0a 20 20 20 20  ote('C#'));.    
0a90: 7d 2c 0a 0a 20 20 20 20 27 41 75 67 6d 65 6e 74  },..    'Augment
0aa0: 65 64 20 66 69 66 74 68 27 3a 20 66 75 6e 63 74  ed fifth': funct
0ab0: 69 6f 6e 28 6e 6f 74 65 29 20 7b 0a 20 20 20 20  ion(note) {.    
0ac0: 20 20 61 73 73 65 72 74 2e 64 65 65 70 45 71 75    assert.deepEqu
0ad0: 61 6c 28 6e 6f 74 65 2e 69 6e 74 65 72 76 61 6c  al(note.interval
0ae0: 28 27 41 35 27 29 2c 20 74 65 6f 72 69 61 2e 6e  ('A5'), teoria.n
0af0: 6f 74 65 28 27 43 78 27 29 29 3b 0a 20 20 20 20  ote('Cx'));.    
0b00: 7d 2c 0a 0a 20 20 20 20 27 44 6f 75 62 6c 79 20  },..    'Doubly 
0b10: 64 69 6d 69 6e 69 73 68 65 64 20 73 69 78 74 68  diminished sixth
0b20: 27 3a 20 66 75 6e 63 74 69 6f 6e 28 6e 6f 74 65  ': function(note
0b30: 29 20 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  ) {.      assert
0b40: 2e 64 65 65 70 45 71 75 61 6c 28 6e 6f 74 65 2e  .deepEqual(note.
0b50: 69 6e 74 65 72 76 61 6c 28 27 64 64 36 27 29 2c  interval('dd6'),
0b60: 20 74 65 6f 72 69 61 2e 6e 6f 74 65 28 27 44 62   teoria.note('Db
0b70: 62 27 29 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20  b'));.    },..  
0b80: 20 20 27 44 69 6d 69 6e 69 73 68 65 64 20 73 69    'Diminished si
0b90: 78 74 68 27 3a 20 66 75 6e 63 74 69 6f 6e 28 6e  xth': function(n
0ba0: 6f 74 65 29 20 7b 0a 20 20 20 20 20 20 61 73 73  ote) {.      ass
0bb0: 65 72 74 2e 64 65 65 70 45 71 75 61 6c 28 6e 6f  ert.deepEqual(no
0bc0: 74 65 2e 69 6e 74 65 72 76 61 6c 28 27 64 36 27  te.interval('d6'
0bd0: 29 2c 20 74 65 6f 72 69 61 2e 6e 6f 74 65 28 27  ), teoria.note('
0be0: 44 62 27 29 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20  Db'));.    },.. 
0bf0: 20 20 20 27 4d 69 6e 6f 72 20 73 69 78 74 68 27     'Minor sixth'
0c00: 3a 20 66 75 6e 63 74 69 6f 6e 28 6e 6f 74 65 29  : function(note)
0c10: 20 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 2e   {.      assert.
0c20: 64 65 65 70 45 71 75 61 6c 28 6e 6f 74 65 2e 69  deepEqual(note.i
0c30: 6e 74 65 72 76 61 6c 28 27 6d 36 27 29 2c 20 74  nterval('m6'), t
0c40: 65 6f 72 69 61 2e 6e 6f 74 65 28 27 44 27 29 29  eoria.note('D'))
0c50: 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20 27 4d  ;.    },..    'M
0c60: 61 6a 6f 72 20 73 69 78 74 68 27 3a 20 66 75 6e  ajor sixth': fun
0c70: 63 74 69 6f 6e 28 6e 6f 74 65 29 20 7b 0a 20 20  ction(note) {.  
0c80: 20 20 20 20 61 73 73 65 72 74 2e 64 65 65 70 45      assert.deepE
0c90: 71 75 61 6c 28 6e 6f 74 65 2e 69 6e 74 65 72 76  qual(note.interv
0ca0: 61 6c 28 27 4d 36 27 29 2c 20 74 65 6f 72 69 61  al('M6'), teoria
0cb0: 2e 6e 6f 74 65 28 27 44 23 27 29 29 3b 0a 20 20  .note('D#'));.  
0cc0: 20 20 7d 2c 0a 0a 20 20 20 20 27 41 75 67 6d 65    },..    'Augme
0cd0: 6e 74 65 64 20 73 69 78 74 68 27 3a 20 66 75 6e  nted sixth': fun
0ce0: 63 74 69 6f 6e 28 6e 6f 74 65 29 20 7b 0a 20 20  ction(note) {.  
0cf0: 20 20 20 20 61 73 73 65 72 74 2e 64 65 65 70 45      assert.deepE
0d00: 71 75 61 6c 28 6e 6f 74 65 2e 69 6e 74 65 72 76  qual(note.interv
0d10: 61 6c 28 27 41 36 27 29 2c 20 74 65 6f 72 69 61  al('A6'), teoria
0d20: 2e 6e 6f 74 65 28 27 44 78 27 29 29 3b 0a 20 20  .note('Dx'));.  
0d30: 20 20 7d 2c 0a 0a 20 20 20 20 27 44 6f 75 62 6c    },..    'Doubl
0d40: 79 20 64 69 6d 69 6e 69 73 68 65 64 20 73 65 76  y diminished sev
0d50: 65 6e 74 68 27 3a 20 66 75 6e 63 74 69 6f 6e 28  enth': function(
0d60: 6e 6f 74 65 29 20 7b 0a 20 20 20 20 20 20 61 73  note) {.      as
0d70: 73 65 72 74 2e 64 65 65 70 45 71 75 61 6c 28 6e  sert.deepEqual(n
0d80: 6f 74 65 2e 69 6e 74 65 72 76 61 6c 28 27 64 64  ote.interval('dd
0d90: 37 27 29 2c 20 74 65 6f 72 69 61 2e 6e 6f 74 65  7'), teoria.note
0da0: 28 27 45 62 62 27 29 29 3b 0a 20 20 20 20 7d 2c  ('Ebb'));.    },
0db0: 0a 0a 20 20 20 20 27 44 69 6d 69 6e 69 73 68 65  ..    'Diminishe
0dc0: 64 20 73 65 76 65 6e 74 68 27 3a 20 66 75 6e 63  d seventh': func
0dd0: 74 69 6f 6e 28 6e 6f 74 65 29 20 7b 0a 20 20 20  tion(note) {.   
0de0: 20 20 20 61 73 73 65 72 74 2e 64 65 65 70 45 71     assert.deepEq
0df0: 75 61 6c 28 6e 6f 74 65 2e 69 6e 74 65 72 76 61  ual(note.interva
0e00: 6c 28 27 64 37 27 29 2c 20 74 65 6f 72 69 61 2e  l('d7'), teoria.
0e10: 6e 6f 74 65 28 27 45 62 27 29 29 3b 0a 20 20 20  note('Eb'));.   
0e20: 20 7d 2c 0a 0a 20 20 20 20 27 4d 69 6e 6f 72 20   },..    'Minor 
0e30: 73 65 76 65 6e 74 68 27 3a 20 66 75 6e 63 74 69  seventh': functi
0e40: 6f 6e 28 6e 6f 74 65 29 20 7b 0a 20 20 20 20 20  on(note) {.     
0e50: 20 61 73 73 65 72 74 2e 64 65 65 70 45 71 75 61   assert.deepEqua
0e60: 6c 28 6e 6f 74 65 2e 69 6e 74 65 72 76 61 6c 28  l(note.interval(
0e70: 27 6d 37 27 29 2c 20 74 65 6f 72 69 61 2e 6e 6f  'm7'), teoria.no
0e80: 74 65 28 27 45 27 29 29 3b 0a 20 20 20 20 7d 2c  te('E'));.    },
0e90: 0a 0a 20 20 20 20 27 4d 61 6a 6f 72 20 73 65 76  ..    'Major sev
0ea0: 65 6e 74 68 27 3a 20 66 75 6e 63 74 69 6f 6e 28  enth': function(
0eb0: 6e 6f 74 65 29 20 7b 0a 20 20 20 20 20 20 61 73  note) {.      as
0ec0: 73 65 72 74 2e 64 65 65 70 45 71 75 61 6c 28 6e  sert.deepEqual(n
0ed0: 6f 74 65 2e 69 6e 74 65 72 76 61 6c 28 27 4d 37  ote.interval('M7
0ee0: 27 29 2c 20 74 65 6f 72 69 61 2e 6e 6f 74 65 28  '), teoria.note(
0ef0: 27 45 23 27 29 29 3b 0a 20 20 20 20 7d 2c 0a 0a  'E#'));.    },..
0f00: 20 20 20 20 27 41 75 67 6d 65 6e 74 65 64 20 73      'Augmented s
0f10: 65 76 65 6e 74 68 27 3a 20 66 75 6e 63 74 69 6f  eventh': functio
0f20: 6e 28 6e 6f 74 65 29 20 7b 0a 20 20 20 20 20 20  n(note) {.      
0f30: 61 73 73 65 72 74 2e 64 65 65 70 45 71 75 61 6c  assert.deepEqual
0f40: 28 6e 6f 74 65 2e 69 6e 74 65 72 76 61 6c 28 27  (note.interval('
0f50: 41 37 27 29 2c 20 74 65 6f 72 69 61 2e 6e 6f 74  A7'), teoria.not
0f60: 65 28 27 45 78 27 29 29 3b 0a 20 20 20 20 7d 2c  e('Ex'));.    },
0f70: 0a 0a 20 20 20 20 27 44 6f 75 62 6c 79 20 64 69  ..    'Doubly di
0f80: 6d 69 6e 69 73 68 65 64 20 6f 63 74 61 76 65 27  minished octave'
0f90: 3a 20 66 75 6e 63 74 69 6f 6e 28 6e 6f 74 65 29  : function(note)
0fa0: 20 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 2e   {.      assert.
0fb0: 64 65 65 70 45 71 75 61 6c 28 6e 6f 74 65 2e 69  deepEqual(note.i
0fc0: 6e 74 65 72 76 61 6c 28 27 64 64 38 27 29 2c 20  nterval('dd8'), 
0fd0: 74 65 6f 72 69 61 2e 6e 6f 74 65 28 27 46 62 27  teoria.note('Fb'
0fe0: 29 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20  ));.    },..    
0ff0: 27 44 69 6d 69 6e 69 73 68 65 64 20 6f 63 74 61  'Diminished octa
1000: 76 65 27 3a 20 66 75 6e 63 74 69 6f 6e 28 6e 6f  ve': function(no
1010: 74 65 29 20 7b 0a 20 20 20 20 20 20 61 73 73 65  te) {.      asse
1020: 72 74 2e 64 65 65 70 45 71 75 61 6c 28 6e 6f 74  rt.deepEqual(not
1030: 65 2e 69 6e 74 65 72 76 61 6c 28 27 64 38 27 29  e.interval('d8')
1040: 2c 20 74 65 6f 72 69 61 2e 6e 6f 74 65 28 27 46  , teoria.note('F
1050: 27 29 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 20  '));.    },..   
1060: 20 27 50 65 72 66 65 63 74 20 6f 63 74 61 76 65   'Perfect octave
1070: 27 3a 20 66 75 6e 63 74 69 6f 6e 28 6e 6f 74 65  ': function(note
1080: 29 20 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  ) {.      assert
1090: 2e 64 65 65 70 45 71 75 61 6c 28 6e 6f 74 65 2e  .deepEqual(note.
10a0: 69 6e 74 65 72 76 61 6c 28 27 50 38 27 29 2c 20  interval('P8'), 
10b0: 74 65 6f 72 69 61 2e 6e 6f 74 65 28 27 46 23 27  teoria.note('F#'
10c0: 29 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20  ));.    },..    
10d0: 27 41 75 67 6d 65 6e 74 65 64 20 6f 63 74 61 76  'Augmented octav
10e0: 65 27 3a 20 66 75 6e 63 74 69 6f 6e 28 6e 6f 74  e': function(not
10f0: 65 29 20 7b 0a 20 20 20 20 20 20 61 73 73 65 72  e) {.      asser
1100: 74 2e 64 65 65 70 45 71 75 61 6c 28 6e 6f 74 65  t.deepEqual(note
1110: 2e 69 6e 74 65 72 76 61 6c 28 27 41 38 27 29 2c  .interval('A8'),
1120: 20 74 65 6f 72 69 61 2e 6e 6f 74 65 28 27 46 78   teoria.note('Fx
1130: 27 29 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 20  '));.    },..   
1140: 20 27 4d 69 6e 6f 72 20 6e 69 6e 74 68 27 3a 20   'Minor ninth': 
1150: 66 75 6e 63 74 69 6f 6e 28 6e 6f 74 65 29 20 7b  function(note) {
1160: 0a 20 20 20 20 20 20 61 73 73 65 72 74 2e 64 65  .      assert.de
1170: 65 70 45 71 75 61 6c 28 6e 6f 74 65 2e 69 6e 74  epEqual(note.int
1180: 65 72 76 61 6c 28 27 6d 39 27 29 2c 20 74 65 6f  erval('m9'), teo
1190: 72 69 61 2e 6e 6f 74 65 28 27 47 27 29 29 3b 0a  ria.note('G'));.
11a0: 20 20 20 20 7d 2c 0a 0a 20 20 20 20 27 4d 61 6a      },..    'Maj
11b0: 6f 72 20 6e 69 6e 74 68 27 3a 20 66 75 6e 63 74  or ninth': funct
11c0: 69 6f 6e 28 6e 6f 74 65 29 20 7b 0a 20 20 20 20  ion(note) {.    
11d0: 20 20 61 73 73 65 72 74 2e 64 65 65 70 45 71 75    assert.deepEqu
11e0: 61 6c 28 6e 6f 74 65 2e 69 6e 74 65 72 76 61 6c  al(note.interval
11f0: 28 27 4d 39 27 29 2c 20 74 65 6f 72 69 61 2e 6e  ('M9'), teoria.n
1200: 6f 74 65 28 27 47 23 27 29 29 3b 0a 20 20 20 20  ote('G#'));.    
1210: 7d 2c 0a 0a 20 20 20 20 27 4d 69 6e 6f 72 20 74  },..    'Minor t
1220: 65 6e 74 68 27 3a 20 66 75 6e 63 74 69 6f 6e 28  enth': function(
1230: 6e 6f 74 65 29 20 7b 0a 20 20 20 20 20 20 61 73  note) {.      as
1240: 73 65 72 74 2e 64 65 65 70 45 71 75 61 6c 28 6e  sert.deepEqual(n
1250: 6f 74 65 2e 69 6e 74 65 72 76 61 6c 28 27 6d 31  ote.interval('m1
1260: 30 27 29 2c 20 74 65 6f 72 69 61 2e 6e 6f 74 65  0'), teoria.note
1270: 28 27 41 27 29 29 3b 0a 20 20 20 20 7d 2c 0a 0a  ('A'));.    },..
1280: 20 20 20 20 27 4d 61 6a 6f 72 20 74 65 6e 74 68      'Major tenth
1290: 27 3a 20 66 75 6e 63 74 69 6f 6e 28 6e 6f 74 65  ': function(note
12a0: 29 20 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  ) {.      assert
12b0: 2e 64 65 65 70 45 71 75 61 6c 28 6e 6f 74 65 2e  .deepEqual(note.
12c0: 69 6e 74 65 72 76 61 6c 28 27 4d 31 30 27 29 2c  interval('M10'),
12d0: 20 74 65 6f 72 69 61 2e 6e 6f 74 65 28 27 41 23   teoria.note('A#
12e0: 27 29 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 20  '));.    },..   
12f0: 20 27 50 65 72 66 65 63 74 20 65 6c 65 76 65 6e   'Perfect eleven
1300: 74 68 27 3a 20 66 75 6e 63 74 69 6f 6e 28 6e 6f  th': function(no
1310: 74 65 29 20 7b 0a 20 20 20 20 20 20 61 73 73 65  te) {.      asse
1320: 72 74 2e 64 65 65 70 45 71 75 61 6c 28 6e 6f 74  rt.deepEqual(not
1330: 65 2e 69 6e 74 65 72 76 61 6c 28 27 50 31 31 27  e.interval('P11'
1340: 29 2c 20 74 65 6f 72 69 61 2e 6e 6f 74 65 28 27  ), teoria.note('
1350: 42 27 29 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20  B'));.    },..  
1360: 20 20 27 44 69 6d 69 6e 69 73 68 65 64 20 74 77    'Diminished tw
1370: 65 6c 66 74 68 27 3a 20 66 75 6e 63 74 69 6f 6e  elfth': function
1380: 28 6e 6f 74 65 29 20 7b 0a 20 20 20 20 20 20 61  (note) {.      a
1390: 73 73 65 72 74 2e 64 65 65 70 45 71 75 61 6c 28  ssert.deepEqual(
13a0: 6e 6f 74 65 2e 69 6e 74 65 72 76 61 6c 28 27 64  note.interval('d
13b0: 31 32 27 29 2c 20 74 65 6f 72 69 61 2e 6e 6f 74  12'), teoria.not
13c0: 65 28 27 63 27 29 29 3b 0a 20 20 20 20 7d 2c 0a  e('c'));.    },.
13d0: 0a 20 20 20 20 27 50 65 72 66 65 63 74 20 74 77  .    'Perfect tw
13e0: 65 6c 66 74 68 27 3a 20 66 75 6e 63 74 69 6f 6e  elfth': function
13f0: 28 6e 6f 74 65 29 20 7b 0a 20 20 20 20 20 20 61  (note) {.      a
1400: 73 73 65 72 74 2e 64 65 65 70 45 71 75 61 6c 28  ssert.deepEqual(
1410: 6e 6f 74 65 2e 69 6e 74 65 72 76 61 6c 28 27 50  note.interval('P
1420: 31 32 27 29 2c 20 74 65 6f 72 69 61 2e 6e 6f 74  12'), teoria.not
1430: 65 28 27 63 23 27 29 29 3b 0a 20 20 20 20 7d 2c  e('c#'));.    },
1440: 0a 0a 20 20 20 20 27 4d 69 6e 6f 72 20 74 68 69  ..    'Minor thi
1450: 72 74 65 65 6e 74 68 27 3a 20 66 75 6e 63 74 69  rteenth': functi
1460: 6f 6e 28 6e 6f 74 65 29 20 7b 0a 20 20 20 20 20  on(note) {.     
1470: 20 61 73 73 65 72 74 2e 64 65 65 70 45 71 75 61   assert.deepEqua
1480: 6c 28 6e 6f 74 65 2e 69 6e 74 65 72 76 61 6c 28  l(note.interval(
1490: 27 6d 31 33 27 29 2c 20 74 65 6f 72 69 61 2e 6e  'm13'), teoria.n
14a0: 6f 74 65 28 27 64 27 29 29 3b 0a 20 20 20 20 7d  ote('d'));.    }
14b0: 2c 0a 0a 20 20 20 20 27 4d 61 6a 6f 72 20 74 68  ,..    'Major th
14c0: 69 72 74 65 65 6e 74 68 27 3a 20 66 75 6e 63 74  irteenth': funct
14d0: 69 6f 6e 28 6e 6f 74 65 29 20 7b 0a 20 20 20 20  ion(note) {.    
14e0: 20 20 61 73 73 65 72 74 2e 64 65 65 70 45 71 75    assert.deepEqu
14f0: 61 6c 28 6e 6f 74 65 2e 69 6e 74 65 72 76 61 6c  al(note.interval
1500: 28 27 4d 31 33 27 29 2c 20 74 65 6f 72 69 61 2e  ('M13'), teoria.
1510: 6e 6f 74 65 28 27 64 23 27 29 29 3b 0a 20 20 20  note('d#'));.   
1520: 20 7d 2c 0a 0a 20 20 20 20 27 4d 69 6e 6f 72 20   },..    'Minor 
1530: 66 6f 75 72 74 65 65 6e 74 68 27 3a 20 66 75 6e  fourteenth': fun
1540: 63 74 69 6f 6e 28 6e 6f 74 65 29 20 7b 0a 20 20  ction(note) {.  
1550: 20 20 20 20 61 73 73 65 72 74 2e 64 65 65 70 45      assert.deepE
1560: 71 75 61 6c 28 6e 6f 74 65 2e 69 6e 74 65 72 76  qual(note.interv
1570: 61 6c 28 27 6d 31 34 27 29 2c 20 74 65 6f 72 69  al('m14'), teori
1580: 61 2e 6e 6f 74 65 28 27 65 27 29 29 3b 0a 20 20  a.note('e'));.  
1590: 20 20 7d 2c 0a 0a 20 20 20 20 27 4d 61 6a 6f 72    },..    'Major
15a0: 20 66 6f 75 72 74 65 65 6e 74 68 27 3a 20 66 75   fourteenth': fu
15b0: 6e 63 74 69 6f 6e 28 6e 6f 74 65 29 20 7b 0a 20  nction(note) {. 
15c0: 20 20 20 20 20 61 73 73 65 72 74 2e 64 65 65 70       assert.deep
15d0: 45 71 75 61 6c 28 6e 6f 74 65 2e 69 6e 74 65 72  Equal(note.inter
15e0: 76 61 6c 28 27 4d 31 34 27 29 2c 20 74 65 6f 72  val('M14'), teor
15f0: 69 61 2e 6e 6f 74 65 28 27 65 23 27 29 29 3b 0a  ia.note('e#'));.
1600: 20 20 20 20 7d 2c 0a 0a 20 20 20 20 27 44 6f 75      },..    'Dou
1610: 62 6c 79 20 64 69 6d 69 6e 69 73 68 65 64 20 73  bly diminished s
1620: 65 63 6f 6e 64 20 75 70 27 3a 20 66 75 6e 63 74  econd up': funct
1630: 69 6f 6e 28 29 20 7b 0a 20 20 20 20 20 20 61 73  ion() {.      as
1640: 73 65 72 74 2e 64 65 65 70 45 71 75 61 6c 28 74  sert.deepEqual(t
1650: 65 6f 72 69 61 2e 6e 6f 74 65 28 27 65 27 29 2e  eoria.note('e').
1660: 69 6e 74 65 72 76 61 6c 28 74 65 6f 72 69 61 2e  interval(teoria.
1670: 6e 6f 74 65 28 27 66 62 62 27 29 29 2c 0a 20 20  note('fbb')),.  
1680: 20 20 20 20 20 20 20 20 74 65 6f 72 69 61 2e 69          teoria.i
1690: 6e 74 65 72 76 61 6c 28 27 64 64 32 27 29 29 3b  nterval('dd2'));
16a0: 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20 27 44 6f  .    },..    'Do
16b0: 75 62 6c 79 20 64 69 6d 69 6e 69 73 68 65 64 20  ubly diminished 
16c0: 73 65 63 6f 6e 64 20 64 6f 77 6e 27 3a 20 66 75  second down': fu
16d0: 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20 20  nction() {.     
16e0: 20 61 73 73 65 72 74 2e 64 65 65 70 45 71 75 61   assert.deepEqua
16f0: 6c 28 74 65 6f 72 69 61 2e 6e 6f 74 65 28 27 66  l(teoria.note('f
1700: 27 29 2e 69 6e 74 65 72 76 61 6c 28 74 65 6f 72  ').interval(teor
1710: 69 61 2e 6e 6f 74 65 28 27 65 78 27 29 29 2c 0a  ia.note('ex')),.
1720: 20 20 20 20 20 20 20 20 20 20 74 65 6f 72 69 61            teoria
1730: 2e 69 6e 74 65 72 76 61 6c 28 27 64 64 2d 32 27  .interval('dd-2'
1740: 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 2c 0a 0a  ));.    }.  },..
1750: 20 20 27 49 6e 74 65 72 76 61 6c 20 64 65 73 63    'Interval desc
1760: 65 6e 64 69 6e 67 27 3a 20 7b 0a 20 20 20 20 27  ending': {.    '
1770: 41 20 6d 61 6a 6f 72 20 74 68 69 72 64 20 64 6f  A major third do
1780: 77 6e 20 66 72 6f 6d 20 45 34 27 3a 20 66 75 6e  wn from E4': fun
1790: 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20 20 20  ction() {.      
17a0: 61 73 73 65 72 74 2e 64 65 65 70 45 71 75 61 6c  assert.deepEqual
17b0: 28 74 65 6f 72 69 61 2e 6e 6f 74 65 28 27 45 34  (teoria.note('E4
17c0: 27 29 2e 69 6e 74 65 72 76 61 6c 28 27 4d 2d 33  ').interval('M-3
17d0: 27 29 2c 20 74 65 6f 72 69 61 2e 6e 6f 74 65 28  '), teoria.note(
17e0: 27 43 34 27 29 29 3b 0a 20 20 20 20 7d 2c 0a 0a  'C4'));.    },..
17f0: 20 20 20 20 27 4d 69 6e 6f 72 20 73 65 63 6f 6e      'Minor secon
1800: 64 20 64 6f 77 6e 20 66 72 6f 6d 20 43 32 27 3a  d down from C2':
1810: 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20   function() {.  
1820: 20 20 20 20 61 73 73 65 72 74 2e 64 65 65 70 45      assert.deepE
1830: 71 75 61 6c 28 74 65 6f 72 69 61 2e 6e 6f 74 65  qual(teoria.note
1840: 28 27 43 32 27 29 2e 69 6e 74 65 72 76 61 6c 28  ('C2').interval(
1850: 27 6d 2d 32 27 29 2c 20 74 65 6f 72 69 61 2e 6e  'm-2'), teoria.n
1860: 6f 74 65 28 27 42 31 27 29 29 3b 0a 20 20 20 20  ote('B1'));.    
1870: 7d 2c 0a 0a 20 20 20 20 27 41 20 64 69 6d 69 6e  },..    'A dimin
1880: 69 73 68 65 64 20 66 69 66 74 68 20 64 6f 77 6e  ished fifth down
1890: 20 66 72 6f 6d 20 45 62 35 27 3a 20 66 75 6e 63   from Eb5': func
18a0: 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20 20 20 61  tion() {.      a
18b0: 73 73 65 72 74 2e 64 65 65 70 45 71 75 61 6c 28  ssert.deepEqual(
18c0: 74 65 6f 72 69 61 2e 6e 6f 74 65 28 27 45 62 35  teoria.note('Eb5
18d0: 27 29 2e 69 6e 74 65 72 76 61 6c 28 27 64 2d 35  ').interval('d-5
18e0: 27 29 2c 20 74 65 6f 72 69 61 2e 6e 6f 74 65 28  '), teoria.note(
18f0: 27 41 34 27 29 29 3b 0a 20 20 20 20 7d 2c 0a 0a  'A4'));.    },..
1900: 20 20 20 20 27 41 20 6d 61 6a 6f 72 20 6e 69 6e      'A major nin
1910: 74 68 20 64 6f 77 6e 20 66 72 6f 6d 20 47 23 34  th down from G#4
1920: 27 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a  ': function() {.
1930: 20 20 20 20 20 20 61 73 73 65 72 74 2e 64 65 65        assert.dee
1940: 70 45 71 75 61 6c 28 74 65 6f 72 69 61 2e 6e 6f  pEqual(teoria.no
1950: 74 65 28 27 47 23 34 27 29 2e 69 6e 74 65 72 76  te('G#4').interv
1960: 61 6c 28 27 4d 2d 39 27 29 2c 20 74 65 6f 72 69  al('M-9'), teori
1970: 61 2e 6e 6f 74 65 28 27 46 23 33 27 29 29 3b 0a  a.note('F#3'));.
1980: 20 20 20 20 7d 2c 0a 0a 20 20 20 20 27 41 6e 20      },..    'An 
1990: 61 75 67 6d 65 6e 74 65 64 20 73 69 78 74 68 20  augmented sixth 
19a0: 64 6f 77 6e 20 66 72 6f 6d 20 42 62 34 27 3a 20  down from Bb4': 
19b0: 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20  function() {.   
19c0: 20 20 20 61 73 73 65 72 74 2e 64 65 65 70 45 71     assert.deepEq
19d0: 75 61 6c 28 74 65 6f 72 69 61 2e 6e 6f 74 65 28  ual(teoria.note(
19e0: 27 42 62 34 27 29 2e 69 6e 74 65 72 76 61 6c 28  'Bb4').interval(
19f0: 27 41 2d 36 27 29 2c 20 74 65 6f 72 69 61 2e 6e  'A-6'), teoria.n
1a00: 6f 74 65 28 27 44 62 62 34 27 29 29 3b 0a 20 20  ote('Dbb4'));.  
1a10: 20 20 7d 0a 20 20 7d 2c 0a 0a 20 20 27 49 6e 74    }.  },..  'Int
1a20: 65 72 76 61 6c 20 69 6e 76 65 72 73 69 6f 6e 73  erval inversions
1a30: 27 3a 20 7b 0a 20 20 20 20 27 49 6e 76 65 72 74  ': {.    'Invert
1a40: 20 6d 32 20 69 73 20 4d 37 27 3a 20 66 75 6e 63   m2 is M7': func
1a50: 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20 20 20 61  tion() {.      a
1a60: 73 73 65 72 74 2e 65 71 75 61 6c 28 74 65 6f 72  ssert.equal(teor
1a70: 69 61 2e 69 6e 74 65 72 76 61 6c 2e 69 6e 76 65  ia.interval.inve
1a80: 72 74 28 27 6d 32 27 29 2c 20 27 4d 37 27 29 3b  rt('m2'), 'M7');
1a90: 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20 27 49 6e  .    },..    'In
1aa0: 76 65 72 74 20 4d 32 20 69 73 20 6d 37 27 3a 20  vert M2 is m7': 
1ab0: 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20  function() {.   
1ac0: 20 20 20 61 73 73 65 72 74 2e 65 71 75 61 6c 28     assert.equal(
1ad0: 74 65 6f 72 69 61 2e 69 6e 74 65 72 76 61 6c 2e  teoria.interval.
1ae0: 69 6e 76 65 72 74 28 27 4d 32 27 29 2c 20 27 6d  invert('M2'), 'm
1af0: 37 27 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 20  7');.    },..   
1b00: 20 27 49 6e 76 65 72 74 20 6d 33 20 69 73 20 4d   'Invert m3 is M
1b10: 36 27 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b  6': function() {
1b20: 0a 20 20 20 20 20 20 61 73 73 65 72 74 2e 65 71  .      assert.eq
1b30: 75 61 6c 28 74 65 6f 72 69 61 2e 69 6e 74 65 72  ual(teoria.inter
1b40: 76 61 6c 2e 69 6e 76 65 72 74 28 27 6d 33 27 29  val.invert('m3')
1b50: 2c 20 27 4d 36 27 29 3b 0a 20 20 20 20 7d 2c 0a  , 'M6');.    },.
1b60: 0a 20 20 20 20 27 49 6e 76 65 72 74 20 4d 33 20  .    'Invert M3 
1b70: 69 73 20 6d 36 27 3a 20 66 75 6e 63 74 69 6f 6e  is m6': function
1b80: 28 29 20 7b 0a 20 20 20 20 20 20 61 73 73 65 72  () {.      asser
1b90: 74 2e 65 71 75 61 6c 28 74 65 6f 72 69 61 2e 69  t.equal(teoria.i
1ba0: 6e 74 65 72 76 61 6c 2e 69 6e 76 65 72 74 28 27  nterval.invert('
1bb0: 4d 33 27 29 2c 20 27 6d 36 27 29 3b 0a 20 20 20  M3'), 'm6');.   
1bc0: 20 7d 2c 0a 0a 20 20 20 20 27 49 6e 76 65 72 74   },..    'Invert
1bd0: 20 50 34 20 69 73 20 50 35 27 3a 20 66 75 6e 63   P4 is P5': func
1be0: 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20 20 20 61  tion() {.      a
1bf0: 73 73 65 72 74 2e 65 71 75 61 6c 28 74 65 6f 72  ssert.equal(teor
1c00: 69 61 2e 69 6e 74 65 72 76 61 6c 2e 69 6e 76 65  ia.interval.inve
1c10: 72 74 28 27 50 34 27 29 2c 20 27 50 35 27 29 3b  rt('P4'), 'P5');
1c20: 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20 27 49 6e  .    },..    'In
1c30: 76 65 72 74 20 41 35 20 69 73 20 64 34 27 3a 20  vert A5 is d4': 
1c40: 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20  function() {.   
1c50: 20 20 20 61 73 73 65 72 74 2e 65 71 75 61 6c 28     assert.equal(
1c60: 74 65 6f 72 69 61 2e 69 6e 74 65 72 76 61 6c 2e  teoria.interval.
1c70: 69 6e 76 65 72 74 28 27 41 35 27 29 2c 20 27 64  invert('A5'), 'd
1c80: 34 27 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 2c 0a  4');.    }.  },.
1c90: 0a 20 20 27 49 6e 74 65 72 76 61 6c 20 62 61 73  .  'Interval bas
1ca0: 65 27 3a 20 7b 0a 20 20 20 20 27 42 61 73 65 20  e': {.    'Base 
1cb0: 6f 66 20 64 35 20 69 73 20 61 20 66 69 66 74 68  of d5 is a fifth
1cc0: 27 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a  ': function() {.
1cd0: 20 20 20 20 20 20 61 73 73 65 72 74 2e 65 71 75        assert.equ
1ce0: 61 6c 28 74 65 6f 72 69 61 2e 69 6e 74 65 72 76  al(teoria.interv
1cf0: 61 6c 28 27 64 35 27 29 2e 62 61 73 65 28 29 2c  al('d5').base(),
1d00: 20 27 66 69 66 74 68 27 29 3b 0a 20 20 20 20 7d   'fifth');.    }
1d10: 2c 0a 0a 20 20 20 20 27 42 61 73 65 20 6f 66 20  ,..    'Base of 
1d20: 41 37 20 69 73 20 61 20 73 65 76 65 6e 74 68 27  A7 is a seventh'
1d30: 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20  : function() {. 
1d40: 20 20 20 20 20 61 73 73 65 72 74 2e 65 71 75 61       assert.equa
1d50: 6c 28 74 65 6f 72 69 61 2e 69 6e 74 65 72 76 61  l(teoria.interva
1d60: 6c 28 27 41 37 27 29 2e 62 61 73 65 28 29 2c 20  l('A7').base(), 
1d70: 27 73 65 76 65 6e 74 68 27 29 3b 0a 20 20 20 20  'seventh');.    
1d80: 7d 2c 0a 0a 20 20 20 20 27 42 61 73 65 20 6f 66  },..    'Base of
1d90: 20 6d 32 20 69 73 20 61 20 73 65 63 6f 6e 64 27   m2 is a second'
1da0: 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20  : function() {. 
1db0: 20 20 20 20 20 61 73 73 65 72 74 2e 65 71 75 61       assert.equa
1dc0: 6c 28 74 65 6f 72 69 61 2e 69 6e 74 65 72 76 61  l(teoria.interva
1dd0: 6c 28 27 6d 32 27 29 2e 62 61 73 65 28 29 2c 20  l('m2').base(), 
1de0: 27 73 65 63 6f 6e 64 27 29 3b 0a 20 20 20 20 7d  'second');.    }
1df0: 2c 0a 0a 20 20 20 20 27 42 61 73 65 20 6f 66 20  ,..    'Base of 
1e00: 4d 36 20 69 73 20 61 20 73 69 78 74 68 27 3a 20  M6 is a sixth': 
1e10: 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20  function() {.   
1e20: 20 20 20 61 73 73 65 72 74 2e 65 71 75 61 6c 28     assert.equal(
1e30: 74 65 6f 72 69 61 2e 69 6e 74 65 72 76 61 6c 28  teoria.interval(
1e40: 27 4d 36 27 29 2e 62 61 73 65 28 29 2c 20 27 73  'M6').base(), 's
1e50: 69 78 74 68 27 29 3b 0a 20 20 20 20 7d 2c 0a 0a  ixth');.    },..
1e60: 20 20 20 20 27 42 61 73 65 20 6f 66 20 64 64 38      'Base of dd8
1e70: 20 69 73 20 61 6e 20 6f 63 74 61 76 65 27 3a 20   is an octave': 
1e80: 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20  function() {.   
1e90: 20 20 20 61 73 73 65 72 74 2e 65 71 75 61 6c 28     assert.equal(
1ea0: 74 65 6f 72 69 61 2e 69 6e 74 65 72 76 61 6c 28  teoria.interval(
1eb0: 27 64 64 38 27 29 2e 62 61 73 65 28 29 2c 20 27  'dd8').base(), '
1ec0: 6f 63 74 61 76 65 27 29 3b 0a 20 20 20 20 7d 2c  octave');.    },
1ed0: 0a 0a 20 20 20 20 27 42 61 73 65 20 6f 66 20 41  ..    'Base of A
1ee0: 41 34 20 69 73 20 61 20 66 6f 75 72 74 68 27 3a  A4 is a fourth':
1ef0: 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20   function() {.  
1f00: 20 20 20 20 61 73 73 65 72 74 2e 65 71 75 61 6c      assert.equal
1f10: 28 74 65 6f 72 69 61 2e 69 6e 74 65 72 76 61 6c  (teoria.interval
1f20: 28 27 41 41 34 27 29 2e 62 61 73 65 28 29 2c 20  ('AA4').base(), 
1f30: 27 66 6f 75 72 74 68 27 29 3b 0a 20 20 20 20 7d  'fourth');.    }
1f40: 2c 0a 0a 20 20 20 20 27 42 61 73 65 20 6f 66 20  ,..    'Base of 
1f50: 64 2d 35 20 69 73 20 61 20 66 69 66 74 68 27 3a  d-5 is a fifth':
1f60: 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20   function() {.  
1f70: 20 20 20 20 61 73 73 65 72 74 2e 65 71 75 61 6c      assert.equal
1f80: 28 74 65 6f 72 69 61 2e 69 6e 74 65 72 76 61 6c  (teoria.interval
1f90: 28 27 64 2d 35 27 29 2e 62 61 73 65 28 29 2c 20  ('d-5').base(), 
1fa0: 27 66 69 66 74 68 27 29 3b 0a 20 20 20 20 7d 2c  'fifth');.    },
1fb0: 0a 0a 20 20 20 20 27 42 61 73 65 20 6f 66 20 6d  ..    'Base of m
1fc0: 2d 39 20 69 73 20 61 20 73 65 63 6f 6e 64 27 3a  -9 is a second':
1fd0: 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20   function() {.  
1fe0: 20 20 20 20 61 73 73 65 72 74 2e 65 71 75 61 6c      assert.equal
1ff0: 28 74 65 6f 72 69 61 2e 69 6e 74 65 72 76 61 6c  (teoria.interval
2000: 28 27 6d 2d 32 27 29 2e 62 61 73 65 28 29 2c 20  ('m-2').base(), 
2010: 27 73 65 63 6f 6e 64 27 29 3b 0a 20 20 20 20 7d  'second');.    }
2020: 2c 0a 0a 20 20 20 20 27 42 61 73 65 20 6f 66 20  ,..    'Base of 
2030: 4d 2d 31 33 20 69 73 20 61 20 73 69 78 74 68 27  M-13 is a sixth'
2040: 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20  : function() {. 
2050: 20 20 20 20 20 61 73 73 65 72 74 2e 65 71 75 61       assert.equa
2060: 6c 28 74 65 6f 72 69 61 2e 69 6e 74 65 72 76 61  l(teoria.interva
2070: 6c 28 27 4d 2d 31 33 27 29 2e 62 61 73 65 28 29  l('M-13').base()
2080: 2c 20 27 73 69 78 74 68 27 29 3b 0a 20 20 20 20  , 'sixth');.    
2090: 7d 2c 0a 0a 20 20 20 20 27 42 61 73 65 20 6f 66  },..    'Base of
20a0: 20 50 2d 31 31 20 69 73 20 61 20 66 6f 75 72 74   P-11 is a fourt
20b0: 68 27 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b  h': function() {
20c0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 2e 65 71  .      assert.eq
20d0: 75 61 6c 28 74 65 6f 72 69 61 2e 69 6e 74 65 72  ual(teoria.inter
20e0: 76 61 6c 28 27 50 2d 31 31 27 29 2e 62 61 73 65  val('P-11').base
20f0: 28 29 2c 20 27 66 6f 75 72 74 68 27 29 3b 0a 20  (), 'fourth');. 
2100: 20 20 20 7d 2c 0a 0a 20 20 20 20 27 42 61 73 65     },..    'Base
2110: 20 6f 66 20 41 41 2d 37 20 69 73 20 61 20 73 65   of AA-7 is a se
2120: 76 65 6e 74 68 27 3a 20 66 75 6e 63 74 69 6f 6e  venth': function
2130: 28 29 20 7b 0a 20 20 20 20 20 20 61 73 73 65 72  () {.      asser
2140: 74 2e 65 71 75 61 6c 28 74 65 6f 72 69 61 2e 69  t.equal(teoria.i
2150: 6e 74 65 72 76 61 6c 28 27 41 41 2d 37 27 29 2e  nterval('AA-7').
2160: 62 61 73 65 28 29 2c 20 27 73 65 76 65 6e 74 68  base(), 'seventh
2170: 27 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 2c 0a 0a  ');.    }.  },..
2180: 20 20 27 43 6f 6d 70 6f 75 6e 64 20 49 6e 74 65    'Compound Inte
2190: 72 76 61 6c 73 27 3a 20 7b 0a 20 20 20 20 27 41  rvals': {.    'A
21a0: 20 6d 61 6a 6f 72 20 73 65 76 65 6e 74 65 65 6e   major seventeen
21b0: 74 68 20 69 73 20 61 20 63 6f 6d 70 6f 75 6e 64  th is a compound
21c0: 20 69 6e 74 65 72 76 61 6c 27 3a 20 66 75 6e 63   interval': func
21d0: 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20 20 20 61  tion() {.      a
21e0: 73 73 65 72 74 2e 65 71 75 61 6c 28 74 65 6f 72  ssert.equal(teor
21f0: 69 61 2e 69 6e 74 65 72 76 61 6c 28 27 4d 31 37  ia.interval('M17
2200: 27 29 2e 69 73 43 6f 6d 70 6f 75 6e 64 28 29 2c  ').isCompound(),
2210: 20 74 72 75 65 29 3b 0a 20 20 20 20 7d 2c 0a 0a   true);.    },..
2220: 20 20 20 20 27 41 20 6d 61 6a 6f 72 20 73 65 76      'A major sev
2230: 65 6e 74 65 65 6e 74 68 5c 27 73 20 73 69 6d 70  enteenth\'s simp
2240: 6c 65 20 70 61 72 74 20 69 73 20 61 20 6d 61 6a  le part is a maj
2250: 6f 72 20 74 68 69 72 64 27 3a 20 66 75 6e 63 74  or third': funct
2260: 69 6f 6e 28 29 20 7b 0a 20 20 20 20 20 20 61 73  ion() {.      as
2270: 73 65 72 74 2e 65 71 75 61 6c 28 74 65 6f 72 69  sert.equal(teori
2280: 61 2e 69 6e 74 65 72 76 61 6c 28 27 4d 31 37 27  a.interval('M17'
2290: 29 2e 73 69 6d 70 6c 65 28 29 2c 20 27 4d 33 27  ).simple(), 'M3'
22a0: 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20 27  );.    },..    '
22b0: 41 20 64 65 73 63 65 6e 64 69 6e 67 20 6d 61 6a  A descending maj
22c0: 6f 72 20 66 6f 75 72 74 65 65 6e 74 68 5c 27 73  or fourteenth\'s
22d0: 20 73 69 6d 70 6c 65 20 70 61 72 74 20 69 73 20   simple part is 
22e0: 61 20 64 65 73 63 65 6e 64 69 6e 67 20 6d 61 6a  a descending maj
22f0: 6f 72 20 73 65 76 65 6e 74 68 27 3a 20 66 75 6e  or seventh': fun
2300: 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20 20 20  ction() {.      
2310: 61 73 73 65 72 74 2e 65 71 75 61 6c 28 74 65 6f  assert.equal(teo
2320: 72 69 61 2e 69 6e 74 65 72 76 61 6c 28 27 4d 2d  ria.interval('M-
2330: 31 34 27 29 2e 73 69 6d 70 6c 65 28 29 2c 20 27  14').simple(), '
2340: 4d 2d 37 27 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20  M-7');.    },.. 
2350: 20 20 20 27 41 20 70 65 72 66 65 63 74 20 6e 69     'A perfect ni
2360: 6e 65 74 65 65 6e 74 68 5c 27 73 20 73 69 6d 70  neteenth\'s simp
2370: 6c 65 20 70 61 72 74 20 69 73 20 65 71 75 61 6c  le part is equal
2380: 20 74 6f 20 61 20 70 65 72 66 65 63 74 20 66 69   to a perfect fi
2390: 66 74 68 27 3a 20 66 75 6e 63 74 69 6f 6e 28 29  fth': function()
23a0: 20 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 2e   {.      assert.
23b0: 65 71 75 61 6c 28 74 65 6f 72 69 61 2e 69 6e 74  equal(teoria.int
23c0: 65 72 76 61 6c 28 27 50 31 39 27 29 2e 73 69 6d  erval('P19').sim
23d0: 70 6c 65 28 29 2e 65 71 75 61 6c 28 74 65 6f 72  ple().equal(teor
23e0: 69 61 2e 69 6e 74 65 72 76 61 6c 28 27 50 35 27  ia.interval('P5'
23f0: 29 29 2c 20 74 72 75 65 29 3b 0a 20 20 20 20 7d  )), true);.    }
2400: 2c 0a 0a 20 20 20 20 27 41 20 70 65 72 66 65 63  ,..    'A perfec
2410: 74 20 6e 69 6e 65 74 65 65 6e 74 68 5c 27 73 20  t nineteenth\'s 
2420: 73 69 6d 70 6c 65 20 70 61 72 74 20 69 73 20 6e  simple part is n
2430: 6f 74 20 65 71 75 61 6c 20 74 6f 20 61 20 6d 61  ot equal to a ma
2440: 6a 6f 72 20 73 69 78 74 68 27 3a 20 66 75 6e 63  jor sixth': func
2450: 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20 20 20 61  tion() {.      a
2460: 73 73 65 72 74 2e 65 71 75 61 6c 28 74 65 6f 72  ssert.equal(teor
2470: 69 61 2e 69 6e 74 65 72 76 61 6c 28 27 50 31 39  ia.interval('P19
2480: 27 29 2e 73 69 6d 70 6c 65 28 29 2e 65 71 75 61  ').simple().equa
2490: 6c 28 74 65 6f 72 69 61 2e 69 6e 74 65 72 76 61  l(teoria.interva
24a0: 6c 28 27 4d 36 27 29 29 2c 20 66 61 6c 73 65 29  l('M6')), false)
24b0: 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20 27 41  ;.    },..    'A
24c0: 20 64 65 73 63 65 6e 64 69 6e 67 20 61 75 67 6d   descending augm
24d0: 65 6e 74 65 64 20 6e 69 6e 74 68 5c 27 73 20 73  ented ninth\'s s
24e0: 69 6d 70 6c 65 20 70 61 72 74 20 69 73 20 65 71  imple part is eq
24f0: 75 61 6c 20 74 6f 20 61 20 64 65 73 63 65 6e 64  ual to a descend
2500: 69 6e 67 20 61 75 67 6d 65 6e 74 65 64 20 73 65  ing augmented se
2510: 63 6f 6e 64 27 3a 20 66 75 6e 63 74 69 6f 6e 28  cond': function(
2520: 29 20 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  ) {.      assert
2530: 2e 65 71 75 61 6c 28 74 65 6f 72 69 61 2e 69 6e  .equal(teoria.in
2540: 74 65 72 76 61 6c 28 27 41 2d 39 27 29 2e 73 69  terval('A-9').si
2550: 6d 70 6c 65 28 29 2e 65 71 75 61 6c 28 74 65 6f  mple().equal(teo
2560: 72 69 61 2e 69 6e 74 65 72 76 61 6c 28 27 41 2d  ria.interval('A-
2570: 32 27 29 29 2c 20 74 72 75 65 29 3b 0a 20 20 20  2')), true);.   
2580: 20 7d 2c 0a 0a 20 20 20 20 27 41 20 32 32 6e 64   },..    'A 22nd
2590: 20 68 61 73 20 74 77 6f 20 63 6f 6d 70 6f 75 6e   has two compoun
25a0: 64 20 6f 63 74 61 76 65 73 27 3a 20 66 75 6e 63  d octaves': func
25b0: 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20 20 20 61  tion() {.      a
25c0: 73 73 65 72 74 2e 65 71 75 61 6c 28 74 65 6f 72  ssert.equal(teor
25d0: 69 61 2e 69 6e 74 65 72 76 61 6c 28 27 50 32 32  ia.interval('P22
25e0: 27 29 2e 6f 63 74 61 76 65 73 28 29 2c 20 32 29  ').octaves(), 2)
25f0: 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20 27 41  ;.    },..    'A
2600: 20 64 65 73 63 65 6e 64 69 6e 67 20 66 6f 75 72   descending four
2610: 74 68 20 68 61 73 20 6e 6f 20 63 6f 6d 70 6f 75  th has no compou
2620: 6e 64 20 6f 63 74 61 76 65 73 27 3a 20 66 75 6e  nd octaves': fun
2630: 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20 20 20  ction() {.      
2640: 61 73 73 65 72 74 2e 65 71 75 61 6c 28 74 65 6f  assert.equal(teo
2650: 72 69 61 2e 69 6e 74 65 72 76 61 6c 28 27 50 2d  ria.interval('P-
2660: 34 27 29 2e 6f 63 74 61 76 65 73 28 29 2c 20 30  4').octaves(), 0
2670: 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20 27  );.    },..    '
2680: 41 20 64 65 73 63 65 6e 64 69 6e 67 20 65 6c 65  A descending ele
2690: 76 65 6e 74 68 20 68 61 73 20 6f 6e 65 20 63 6f  venth has one co
26a0: 6d 70 6f 75 6e 64 20 6f 63 74 61 76 65 27 3a 20  mpound octave': 
26b0: 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20  function() {.   
26c0: 20 20 20 61 73 73 65 72 74 2e 65 71 75 61 6c 28     assert.equal(
26d0: 74 65 6f 72 69 61 2e 69 6e 74 65 72 76 61 6c 28  teoria.interval(
26e0: 27 50 2d 31 31 27 29 2e 6f 63 74 61 76 65 73 28  'P-11').octaves(
26f0: 29 2c 20 31 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20  ), 1);.    },.. 
2700: 20 20 20 27 41 20 64 65 73 63 65 6e 64 69 6e 67     'A descending
2710: 20 61 75 67 6d 65 6e 74 65 64 20 74 68 69 72 64   augmented third
2720: 20 68 61 73 20 6e 6f 20 63 6f 6d 70 6f 75 6e 64   has no compound
2730: 20 6f 63 74 61 76 65 73 27 3a 20 66 75 6e 63 74   octaves': funct
2740: 69 6f 6e 28 29 20 7b 0a 20 20 20 20 20 20 61 73  ion() {.      as
2750: 73 65 72 74 2e 65 71 75 61 6c 28 74 65 6f 72 69  sert.equal(teori
2760: 61 2e 69 6e 74 65 72 76 61 6c 28 27 41 2d 33 27  a.interval('A-3'
2770: 29 2e 6f 63 74 61 76 65 73 28 29 2c 20 30 29 3b  ).octaves(), 0);
2780: 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20 27 41 20  .    },..    'A 
2790: 64 65 73 63 65 6e 64 69 6e 67 20 6d 61 6a 6f 72  descending major
27a0: 20 31 36 74 68 20 68 61 73 20 74 77 6f 20 63 6f   16th has two co
27b0: 6d 70 6f 75 6e 64 20 6f 63 74 61 76 65 73 27 3a  mpound octaves':
27c0: 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20   function() {.  
27d0: 20 20 20 20 61 73 73 65 72 74 2e 65 71 75 61 6c      assert.equal
27e0: 28 74 65 6f 72 69 61 2e 69 6e 74 65 72 76 61 6c  (teoria.interval
27f0: 28 27 4d 2d 31 36 27 29 2e 6f 63 74 61 76 65 73  ('M-16').octaves
2800: 28 29 2c 20 32 29 3b 0a 20 20 20 20 7d 2c 0a 0a  (), 2);.    },..
2810: 20 20 20 20 27 41 20 6d 61 6a 6f 72 20 73 65 76      'A major sev
2820: 65 6e 74 68 20 69 73 20 67 72 65 61 74 65 72 20  enth is greater 
2830: 74 68 61 6e 20 61 20 6d 69 6e 6f 72 20 73 65 76  than a minor sev
2840: 65 6e 74 68 27 3a 20 66 75 6e 63 74 69 6f 6e 28  enth': function(
2850: 29 20 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  ) {.      assert
2860: 2e 65 71 75 61 6c 28 74 65 6f 72 69 61 2e 69 6e  .equal(teoria.in
2870: 74 65 72 76 61 6c 28 27 4d 37 27 29 2e 67 72 65  terval('M7').gre
2880: 61 74 65 72 28 74 65 6f 72 69 61 2e 69 6e 74 65  ater(teoria.inte
2890: 72 76 61 6c 28 27 6d 37 27 29 29 2c 20 74 72 75  rval('m7')), tru
28a0: 65 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20  e);.    },..    
28b0: 27 41 6e 20 61 75 67 6d 65 6e 74 65 64 20 6f 63  'An augmented oc
28c0: 74 61 76 65 20 69 73 20 73 6d 61 6c 6c 65 72 20  tave is smaller 
28d0: 74 68 61 6e 20 61 20 6d 61 6a 6f 72 20 6e 69 6e  than a major nin
28e0: 74 68 27 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20  th': function() 
28f0: 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 2e 65  {.      assert.e
2900: 71 75 61 6c 28 74 65 6f 72 69 61 2e 69 6e 74 65  qual(teoria.inte
2910: 72 76 61 6c 28 27 41 38 27 29 2e 73 6d 61 6c 6c  rval('A8').small
2920: 65 72 28 74 65 6f 72 69 61 2e 69 6e 74 65 72 76  er(teoria.interv
2930: 61 6c 28 27 4d 39 27 29 29 2c 20 74 72 75 65 29  al('M9')), true)
2940: 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20 27 41  ;.    },..    'A
2950: 20 6d 61 6a 6f 72 20 74 68 69 72 64 20 69 73 20   major third is 
2960: 65 71 75 61 6c 20 74 6f 20 61 6e 6f 74 68 65 72  equal to another
2970: 20 6d 61 6a 6f 72 20 74 68 69 72 64 27 3a 20 66   major third': f
2980: 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20  unction() {.    
2990: 20 20 61 73 73 65 72 74 2e 65 71 75 61 6c 28 74    assert.equal(t
29a0: 65 6f 72 69 61 2e 69 6e 74 65 72 76 61 6c 28 27  eoria.interval('
29b0: 4d 33 27 29 2e 65 71 75 61 6c 28 74 65 6f 72 69  M3').equal(teori
29c0: 61 2e 69 6e 74 65 72 76 61 6c 28 27 4d 33 27 29  a.interval('M3')
29d0: 29 2c 20 74 72 75 65 29 3b 0a 20 20 20 20 7d 2c  ), true);.    },
29e0: 0a 0a 20 20 20 20 27 41 6e 20 61 75 67 6d 65 6e  ..    'An augmen
29f0: 74 65 64 20 66 69 66 74 68 20 69 73 20 6e 6f 74  ted fifth is not
2a00: 20 65 71 75 61 6c 20 74 6f 20 61 20 6d 69 6e 6f   equal to a mino
2a10: 72 20 73 69 78 74 68 27 3a 20 66 75 6e 63 74 69  r sixth': functi
2a20: 6f 6e 28 29 20 7b 0a 20 20 20 20 20 20 61 73 73  on() {.      ass
2a30: 65 72 74 2e 65 71 75 61 6c 28 74 65 6f 72 69 61  ert.equal(teoria
2a40: 2e 69 6e 74 65 72 76 61 6c 28 27 50 35 27 29 2e  .interval('P5').
2a50: 65 71 75 61 6c 28 74 65 6f 72 69 61 2e 69 6e 74  equal(teoria.int
2a60: 65 72 76 61 6c 28 27 6d 36 27 29 29 2c 20 66 61  erval('m6')), fa
2a70: 6c 73 65 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20  lse);.    },..  
2a80: 20 20 27 41 20 70 65 72 66 65 63 74 20 66 69 66    'A perfect fif
2a90: 74 68 20 69 73 20 6e 6f 74 20 65 71 75 61 6c 20  th is not equal 
2aa0: 74 6f 20 61 20 70 65 72 66 65 63 74 20 6f 63 74  to a perfect oct
2ab0: 61 76 65 27 3a 20 66 75 6e 63 74 69 6f 6e 28 29  ave': function()
2ac0: 20 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 2e   {.      assert.
2ad0: 65 71 75 61 6c 28 74 65 6f 72 69 61 2e 69 6e 74  equal(teoria.int
2ae0: 65 72 76 61 6c 28 27 50 35 27 29 2e 65 71 75 61  erval('P5').equa
2af0: 6c 28 74 65 6f 72 69 61 2e 69 6e 74 65 72 76 61  l(teoria.interva
2b00: 6c 28 27 50 38 27 29 29 2c 20 66 61 6c 73 65 29  l('P8')), false)
2b10: 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20 27 54  ;.    },..    'T
2b20: 68 65 20 73 69 6d 70 6c 65 20 70 61 72 74 20 6f  he simple part o
2b30: 66 20 61 20 6d 61 6a 6f 72 20 32 33 74 68 20 69  f a major 23th i
2b40: 73 20 61 20 6d 61 6a 6f 72 20 73 65 63 6f 6e 64  s a major second
2b50: 27 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a  ': function() {.
2b60: 20 20 20 20 20 20 61 73 73 65 72 74 2e 65 71 75        assert.equ
2b70: 61 6c 28 74 65 6f 72 69 61 2e 69 6e 74 65 72 76  al(teoria.interv
2b80: 61 6c 28 27 4d 32 33 27 29 2e 73 69 6d 70 6c 65  al('M23').simple
2b90: 28 29 2c 20 27 4d 32 27 29 3b 0a 20 20 20 20 7d  (), 'M2');.    }
2ba0: 0a 20 20 7d 2c 0a 0a 20 20 27 49 6e 74 65 72 76  .  },..  'Interv
2bb0: 61 6c 20 64 69 72 65 63 74 69 6f 6e 27 3a 20 7b  al direction': {
2bc0: 0a 20 20 20 20 27 41 33 20 74 6f 20 43 34 20 69  .    'A3 to C4 i
2bd0: 73 20 75 70 27 3a 20 66 75 6e 63 74 69 6f 6e 28  s up': function(
2be0: 29 20 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  ) {.      assert
2bf0: 2e 65 71 75 61 6c 28 74 65 6f 72 69 61 2e 6e 6f  .equal(teoria.no
2c00: 74 65 28 27 41 33 27 29 2e 69 6e 74 65 72 76 61  te('A3').interva
2c10: 6c 28 74 65 6f 72 69 61 2e 6e 6f 74 65 28 27 43  l(teoria.note('C
2c20: 34 27 29 29 2e 64 69 72 65 63 74 69 6f 6e 28 29  4')).direction()
2c30: 2c 20 27 75 70 27 29 3b 0a 20 20 20 20 7d 2c 0a  , 'up');.    },.
2c40: 0a 20 20 20 20 27 42 62 35 20 74 6f 20 42 62 35  .    'Bb5 to Bb5
2c50: 20 69 73 20 75 70 20 28 61 20 75 6e 69 73 6f 6e   is up (a unison
2c60: 20 69 73 20 61 6c 77 61 79 73 20 75 70 29 27 3a   is always up)':
2c70: 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20   function() {.  
2c80: 20 20 20 20 61 73 73 65 72 74 2e 65 71 75 61 6c      assert.equal
2c90: 28 74 65 6f 72 69 61 2e 6e 6f 74 65 28 27 42 62  (teoria.note('Bb
2ca0: 35 27 29 2e 69 6e 74 65 72 76 61 6c 28 74 65 6f  5').interval(teo
2cb0: 72 69 61 2e 6e 6f 74 65 28 27 42 62 35 27 29 29  ria.note('Bb5'))
2cc0: 2e 64 69 72 65 63 74 69 6f 6e 28 29 2c 20 27 75  .direction(), 'u
2cd0: 70 27 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 20  p');.    },..   
2ce0: 20 27 47 23 34 20 74 6f 20 44 34 20 69 73 20 64   'G#4 to D4 is d
2cf0: 6f 77 6e 27 3a 20 66 75 6e 63 74 69 6f 6e 28 29  own': function()
2d00: 20 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 2e   {.      assert.
2d10: 65 71 75 61 6c 28 74 65 6f 72 69 61 2e 6e 6f 74  equal(teoria.not
2d20: 65 28 27 47 23 34 27 29 2e 69 6e 74 65 72 76 61  e('G#4').interva
2d30: 6c 28 74 65 6f 72 69 61 2e 6e 6f 74 65 28 27 44  l(teoria.note('D
2d40: 34 27 29 29 2e 64 69 72 65 63 74 69 6f 6e 28 29  4')).direction()
2d50: 2c 20 27 64 6f 77 6e 27 29 3b 0a 20 20 20 20 7d  , 'down');.    }
2d60: 2c 0a 0a 20 20 20 20 27 46 36 20 74 6f 20 45 36  ,..    'F6 to E6
2d70: 20 69 73 20 64 6f 77 6e 27 3a 20 66 75 6e 63 74   is down': funct
2d80: 69 6f 6e 28 29 20 7b 0a 20 20 20 20 20 20 61 73  ion() {.      as
2d90: 73 65 72 74 2e 65 71 75 61 6c 28 74 65 6f 72 69  sert.equal(teori
2da0: 61 2e 6e 6f 74 65 28 27 46 36 27 29 2e 69 6e 74  a.note('F6').int
2db0: 65 72 76 61 6c 28 74 65 6f 72 69 61 2e 6e 6f 74  erval(teoria.not
2dc0: 65 28 27 45 36 27 29 29 2e 64 69 72 65 63 74 69  e('E6')).directi
2dd0: 6f 6e 28 29 2c 20 27 64 6f 77 6e 27 29 3b 0a 20  on(), 'down');. 
2de0: 20 20 20 7d 2c 0a 0a 20 20 20 20 27 43 34 20 74     },..    'C4 t
2df0: 6f 20 41 33 20 69 73 20 75 70 2c 20 77 2e 20 64  o A3 is up, w. d
2e00: 69 72 65 63 74 69 6f 6e 20 73 65 74 20 74 6f 20  irection set to 
2e10: 75 70 27 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20  up': function() 
2e20: 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 2e 65  {.      assert.e
2e30: 71 75 61 6c 28 74 65 6f 72 69 61 2e 6e 6f 74 65  qual(teoria.note
2e40: 28 27 43 34 27 29 2e 69 6e 74 65 72 76 61 6c 28  ('C4').interval(
2e50: 74 65 6f 72 69 61 2e 6e 6f 74 65 28 27 41 33 27  teoria.note('A3'
2e60: 29 29 2e 64 69 72 65 63 74 69 6f 6e 28 27 75 70  )).direction('up
2e70: 27 29 2e 64 69 72 65 63 74 69 6f 6e 28 29 2c 20  ').direction(), 
2e80: 27 75 70 27 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20  'up');.    },.. 
2e90: 20 20 20 27 41 33 20 74 6f 20 43 34 20 72 65 6d     'A3 to C4 rem
2ea0: 61 69 6e 73 20 75 70 20 77 2e 20 64 69 72 65 63  ains up w. direc
2eb0: 74 69 6f 6e 20 73 65 74 20 74 6f 20 75 70 27 3a  tion set to up':
2ec0: 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20   function() {.  
2ed0: 20 20 20 20 61 73 73 65 72 74 2e 65 71 75 61 6c      assert.equal
2ee0: 28 74 65 6f 72 69 61 2e 6e 6f 74 65 28 27 41 33  (teoria.note('A3
2ef0: 27 29 2e 69 6e 74 65 72 76 61 6c 28 74 65 6f 72  ').interval(teor
2f00: 69 61 2e 6e 6f 74 65 28 27 43 34 27 29 29 2e 64  ia.note('C4')).d
2f10: 69 72 65 63 74 69 6f 6e 28 27 75 70 27 29 2e 64  irection('up').d
2f20: 69 72 65 63 74 69 6f 6e 28 29 2c 20 27 75 70 27  irection(), 'up'
2f30: 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20 27  );.    },..    '
2f40: 6d 32 20 69 73 20 75 70 27 3a 20 66 75 6e 63 74  m2 is up': funct
2f50: 69 6f 6e 28 29 20 7b 0a 20 20 20 20 20 20 61 73  ion() {.      as
2f60: 73 65 72 74 2e 65 71 75 61 6c 28 74 65 6f 72 69  sert.equal(teori
2f70: 61 2e 69 6e 74 65 72 76 61 6c 28 27 6d 32 27 29  a.interval('m2')
2f80: 2e 64 69 72 65 63 74 69 6f 6e 28 29 2c 20 27 75  .direction(), 'u
2f90: 70 27 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 20  p');.    },..   
2fa0: 20 27 50 31 31 20 69 73 20 75 70 27 3a 20 66 75   'P11 is up': fu
2fb0: 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20 20  nction() {.     
2fc0: 20 61 73 73 65 72 74 2e 65 71 75 61 6c 28 74 65   assert.equal(te
2fd0: 6f 72 69 61 2e 69 6e 74 65 72 76 61 6c 28 27 50  oria.interval('P
2fe0: 31 31 27 29 2e 64 69 72 65 63 74 69 6f 6e 28 29  11').direction()
2ff0: 2c 20 27 75 70 27 29 3b 0a 20 20 20 20 7d 2c 0a  , 'up');.    },.
3000: 0a 20 20 20 20 27 50 31 20 69 73 20 75 70 27 3a  .    'P1 is up':
3010: 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20   function() {.  
3020: 20 20 20 20 61 73 73 65 72 74 2e 65 71 75 61 6c      assert.equal
3030: 28 74 65 6f 72 69 61 2e 69 6e 74 65 72 76 61 6c  (teoria.interval
3040: 28 27 50 31 27 29 2e 64 69 72 65 63 74 69 6f 6e  ('P1').direction
3050: 28 29 2c 20 27 75 70 27 29 3b 0a 20 20 20 20 7d  (), 'up');.    }
3060: 2c 0a 0a 20 20 20 20 27 41 31 20 69 73 20 75 70  ,..    'A1 is up
3070: 27 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a  ': function() {.
3080: 20 20 20 20 20 20 61 73 73 65 72 74 2e 65 71 75        assert.equ
3090: 61 6c 28 74 65 6f 72 69 61 2e 69 6e 74 65 72 76  al(teoria.interv
30a0: 61 6c 28 27 41 31 27 29 2e 64 69 72 65 63 74 69  al('A1').directi
30b0: 6f 6e 28 29 2c 20 27 75 70 27 29 3b 0a 20 20 20  on(), 'up');.   
30c0: 20 7d 2c 0a 0a 20 20 20 20 27 64 31 20 69 73 20   },..    'd1 is 
30d0: 75 70 27 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20  up': function() 
30e0: 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 2e 65  {.      assert.e
30f0: 71 75 61 6c 28 74 65 6f 72 69 61 2e 69 6e 74 65  qual(teoria.inte
3100: 72 76 61 6c 28 27 64 31 27 29 2e 64 69 72 65 63  rval('d1').direc
3110: 74 69 6f 6e 28 29 2c 20 27 75 70 27 29 3b 0a 20  tion(), 'up');. 
3120: 20 20 20 7d 2c 0a 0a 20 20 20 20 27 6d 2d 32 20     },..    'm-2 
3130: 69 73 20 64 6f 77 6e 27 3a 20 66 75 6e 63 74 69  is down': functi
3140: 6f 6e 28 29 20 7b 0a 20 20 20 20 20 20 61 73 73  on() {.      ass
3150: 65 72 74 2e 65 71 75 61 6c 28 74 65 6f 72 69 61  ert.equal(teoria
3160: 2e 69 6e 74 65 72 76 61 6c 28 27 6d 2d 32 27 29  .interval('m-2')
3170: 2e 64 69 72 65 63 74 69 6f 6e 28 29 2c 20 27 64  .direction(), 'd
3180: 6f 77 6e 27 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20  own');.    },.. 
3190: 20 20 20 27 4d 2d 31 37 20 69 73 20 64 6f 77 6e     'M-17 is down
31a0: 27 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a  ': function() {.
31b0: 20 20 20 20 20 20 61 73 73 65 72 74 2e 65 71 75        assert.equ
31c0: 61 6c 28 74 65 6f 72 69 61 2e 69 6e 74 65 72 76  al(teoria.interv
31d0: 61 6c 28 27 4d 2d 31 37 27 29 2e 64 69 72 65 63  al('M-17').direc
31e0: 74 69 6f 6e 28 29 2c 20 27 64 6f 77 6e 27 29 3b  tion(), 'down');
31f0: 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20 27 64 2d  .    },..    'd-
3200: 32 20 69 73 20 64 6f 77 6e 27 3a 20 66 75 6e 63  2 is down': func
3210: 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20 20 20 61  tion() {.      a
3220: 73 73 65 72 74 2e 65 71 75 61 6c 28 74 65 6f 72  ssert.equal(teor
3230: 69 61 2e 69 6e 74 65 72 76 61 6c 28 27 64 2d 32  ia.interval('d-2
3240: 27 29 2e 64 69 72 65 63 74 69 6f 6e 28 29 2c 20  ').direction(), 
3250: 27 64 6f 77 6e 27 29 3b 0a 20 20 20 20 7d 2c 0a  'down');.    },.
3260: 0a 20 20 20 20 27 64 64 2d 32 20 69 73 20 64 6f  .    'dd-2 is do
3270: 77 6e 20 28 61 6c 74 68 6f 75 67 68 20 69 74 20  wn (although it 
3280: 69 73 20 75 70 29 27 3a 20 66 75 6e 63 74 69 6f  is up)': functio
3290: 6e 28 29 20 7b 0a 20 20 20 20 20 20 61 73 73 65  n() {.      asse
32a0: 72 74 2e 65 71 75 61 6c 28 74 65 6f 72 69 61 2e  rt.equal(teoria.
32b0: 69 6e 74 65 72 76 61 6c 28 27 64 64 2d 32 27 29  interval('dd-2')
32c0: 2e 64 69 72 65 63 74 69 6f 6e 28 29 2c 20 27 64  .direction(), 'd
32d0: 6f 77 6e 27 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20  own');.    },.. 
32e0: 20 20 20 27 41 2d 32 20 69 73 20 64 6f 77 6e 27     'A-2 is down'
32f0: 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20  : function() {. 
3300: 20 20 20 20 20 61 73 73 65 72 74 2e 65 71 75 61       assert.equa
3310: 6c 28 74 65 6f 72 69 61 2e 69 6e 74 65 72 76 61  l(teoria.interva
3320: 6c 28 27 41 2d 32 27 29 2e 64 69 72 65 63 74 69  l('A-2').directi
3330: 6f 6e 28 29 2c 20 27 64 6f 77 6e 27 29 3b 0a 20  on(), 'down');. 
3340: 20 20 20 7d 2c 0a 0a 20 20 20 20 27 64 2d 31 20     },..    'd-1 
3350: 69 73 20 75 70 20 28 61 6c 6c 20 75 6e 69 73 6f  is up (all uniso
3360: 6e 20 76 61 6c 75 65 73 20 61 72 65 20 75 70 29  n values are up)
3370: 27 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a  ': function() {.
3380: 20 20 20 20 20 20 61 73 73 65 72 74 2e 65 71 75        assert.equ
3390: 61 6c 28 74 65 6f 72 69 61 2e 69 6e 74 65 72 76  al(teoria.interv
33a0: 61 6c 28 27 64 2d 31 27 29 2e 64 69 72 65 63 74  al('d-1').direct
33b0: 69 6f 6e 28 29 2c 20 27 75 70 27 29 3b 0a 20 20  ion(), 'up');.  
33c0: 20 20 7d 2c 0a 0a 20 20 20 20 27 41 2d 31 20 69    },..    'A-1 i
33d0: 73 20 75 70 20 28 61 6c 6c 20 75 6e 69 73 6f 6e  s up (all unison
33e0: 20 76 61 6c 75 65 73 20 61 72 65 20 75 70 29 27   values are up)'
33f0: 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20  : function() {. 
3400: 20 20 20 20 20 61 73 73 65 72 74 2e 65 71 75 61       assert.equa
3410: 6c 28 74 65 6f 72 69 61 2e 69 6e 74 65 72 76 61  l(teoria.interva
3420: 6c 28 27 41 2d 31 27 29 2e 64 69 72 65 63 74 69  l('A-1').directi
3430: 6f 6e 28 29 2c 20 27 75 70 27 29 3b 0a 20 20 20  on(), 'up');.   
3440: 20 7d 0a 20 20 7d 2c 0a 0a 20 20 27 49 6e 74 65   }.  },..  'Inte
3450: 72 76 61 6c 20 61 72 69 74 68 6d 65 74 69 63 27  rval arithmetic'
3460: 3a 20 7b 0a 20 20 20 20 27 6d 33 20 2b 20 4d 32  : {.    'm3 + M2
3470: 20 3d 20 50 34 27 3a 20 66 75 6e 63 74 69 6f 6e   = P4': function
3480: 28 29 20 7b 0a 20 20 20 20 20 20 61 73 73 65 72  () {.      asser
3490: 74 2e 65 71 75 61 6c 28 61 64 64 53 69 6d 70 6c  t.equal(addSimpl
34a0: 65 28 27 6d 33 27 2c 20 27 4d 32 27 29 2e 74 6f  e('m3', 'M2').to
34b0: 53 74 72 69 6e 67 28 29 2c 20 27 50 34 27 29 3b  String(), 'P4');
34c0: 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20 27 50 34  .    },..    'P4
34d0: 20 2b 20 50 35 20 3d 20 50 38 27 3a 20 66 75 6e   + P5 = P8': fun
34e0: 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20 20 20  ction() {.      
34f0: 61 73 73 65 72 74 2e 65 71 75 61 6c 28 61 64 64  assert.equal(add
3500: 53 69 6d 70 6c 65 28 27 50 34 27 2c 20 27 50 35  Simple('P4', 'P5
3510: 27 29 2e 74 6f 53 74 72 69 6e 67 28 29 2c 20 27  ').toString(), '
3520: 50 38 27 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20  P8');.    },..  
3530: 20 20 27 4d 36 20 2b 20 41 34 20 3d 20 41 39 27    'M6 + A4 = A9'
3540: 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20  : function() {. 
3550: 20 20 20 20 20 61 73 73 65 72 74 2e 65 71 75 61       assert.equa
3560: 6c 28 61 64 64 53 69 6d 70 6c 65 28 27 4d 36 27  l(addSimple('M6'
3570: 2c 20 27 41 34 27 29 2e 74 6f 53 74 72 69 6e 67  , 'A4').toString
3580: 28 29 2c 20 27 41 39 27 29 3b 0a 20 20 20 20 7d  (), 'A9');.    }
3590: 2c 0a 0a 20 20 20 20 27 4d 2d 32 20 2b 20 6d 2d  ,..    'M-2 + m-
35a0: 32 20 3d 20 6d 2d 33 27 3a 20 66 75 6e 63 74 69  2 = m-3': functi
35b0: 6f 6e 28 29 20 7b 0a 20 20 20 20 20 20 61 73 73  on() {.      ass
35c0: 65 72 74 2e 65 71 75 61 6c 28 61 64 64 53 69 6d  ert.equal(addSim
35d0: 70 6c 65 28 27 4d 2d 32 27 2c 20 27 6d 2d 32 27  ple('M-2', 'm-2'
35e0: 29 2e 74 6f 53 74 72 69 6e 67 28 29 2c 20 27 6d  ).toString(), 'm
35f0: 2d 33 27 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20  -3');.    },..  
3600: 20 20 27 41 31 31 20 2b 20 4d 39 20 3d 20 41 31    'A11 + M9 = A1
3610: 39 27 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b  9': function() {
3620: 0a 20 20 20 20 20 20 61 73 73 65 72 74 2e 65 71  .      assert.eq
3630: 75 61 6c 28 61 64 64 53 69 6d 70 6c 65 28 27 41  ual(addSimple('A
3640: 31 31 27 2c 20 27 4d 39 27 29 2e 74 6f 53 74 72  11', 'M9').toStr
3650: 69 6e 67 28 29 2c 20 27 41 31 39 27 29 3b 0a 20  ing(), 'A19');. 
3660: 20 20 20 7d 2c 0a 0a 20 20 20 20 27 6d 2d 31 30     },..    'm-10
3670: 20 2b 20 50 34 20 3d 20 6d 2d 37 27 3a 20 66 75   + P4 = m-7': fu
3680: 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20 20  nction() {.     
3690: 20 61 73 73 65 72 74 2e 65 71 75 61 6c 28 61 64   assert.equal(ad
36a0: 64 53 69 6d 70 6c 65 28 27 6d 2d 31 30 27 2c 20  dSimple('m-10', 
36b0: 27 50 34 27 29 2e 74 6f 53 74 72 69 6e 67 28 29  'P4').toString()
36c0: 2c 20 27 6d 2d 37 27 29 3b 0a 20 20 20 20 7d 0a  , 'm-7');.    }.
36d0: 20 20 7d 2c 0a 0a 20 20 27 54 68 65 6f 72 65 74    },..  'Theoret
36e0: 69 63 61 6c 20 69 6e 74 65 72 76 61 6c 73 20 2d  ical intervals -
36f0: 20 54 72 69 70 6c 65 20 61 75 67 6d 65 6e 74 65   Triple augmente
3700: 64 27 3a 20 7b 0a 20 20 20 20 74 6f 70 69 63 3a  d': {.    topic:
3710: 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20   function() {.  
3720: 20 20 20 20 72 65 74 75 72 6e 20 74 65 6f 72 69      return teori
3730: 61 2e 6e 6f 74 65 28 27 46 27 29 2e 69 6e 74 65  a.note('F').inte
3740: 72 76 61 6c 28 74 65 6f 72 69 61 2e 6e 6f 74 65  rval(teoria.note
3750: 28 27 42 78 27 29 29 3b 0a 20 20 20 20 7d 2c 0a  ('Bx'));.    },.
3760: 0a 20 20 20 20 27 46 20 74 6f 20 42 78 20 68 61  .    'F to Bx ha
3770: 73 20 71 75 61 6c 69 74 79 20 76 61 6c 75 65 20  s quality value 
3780: 3d 20 33 20 28 74 72 69 70 6c 65 20 61 75 67 6d  = 3 (triple augm
3790: 65 6e 74 65 64 29 27 3a 20 66 75 6e 63 74 69 6f  ented)': functio
37a0: 6e 28 69 6e 74 65 72 76 61 6c 29 20 7b 0a 20 20  n(interval) {.  
37b0: 20 20 20 20 61 73 73 65 72 74 2e 65 71 75 61 6c      assert.equal
37c0: 28 69 6e 74 65 72 76 61 6c 2e 71 75 61 6c 69 74  (interval.qualit
37d0: 79 56 61 6c 75 65 28 29 2c 20 33 29 3b 0a 20 20  yValue(), 3);.  
37e0: 20 20 7d 2c 0a 0a 20 20 20 20 27 23 73 69 6d 70    },..    '#simp
37f0: 6c 65 28 29 20 77 6f 72 6b 73 27 3a 20 66 75 6e  le() works': fun
3800: 63 74 69 6f 6e 28 69 6e 74 65 72 76 61 6c 29 20  ction(interval) 
3810: 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 2e 64  {.      assert.d
3820: 65 65 70 45 71 75 61 6c 28 69 6e 74 65 72 76 61  eepEqual(interva
3830: 6c 2e 73 69 6d 70 6c 65 28 29 2e 63 6f 6f 72 64  l.simple().coord
3840: 2c 20 5b 2d 31 31 2c 20 32 30 5d 29 3b 0a 20 20  , [-11, 20]);.  
3850: 20 20 7d 0a 20 20 7d 0a 7d 29 2e 65 78 70 6f 72    }.  }.}).expor
3860: 74 28 6d 6f 64 75 6c 65 29 3b 0a                 t(module);.