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);.