package com.xenoage.zong.musiclayout.notator.chord.stem.single;
import static com.xenoage.zong.core.music.chord.StemDirection.Down;
import static com.xenoage.zong.core.music.chord.StemDirection.Up;
import static com.xenoage.zong.musiclayout.notator.chord.stem.single.SingleStemDirector.singleStemDirector;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
import com.xenoage.zong.musiclayout.notation.chord.ChordLps;
/**
* Tests for {@link SingleStemDirector}.
*
* @author Andreas Wenger
*/
public class SingleStemDirectorTest {
SingleStemDirector testee = singleStemDirector;
@Test public void computeStemDirectionTest() {
int linesCount = 5;
int[] lps;
//single notes
lps = new int[1];
for (int i = -2; i <= 3; i++) {
lps[0] = i;
assertEquals(Up, testee.compute(clp(lps), linesCount));
}
for (int i = 4; i <= 13; i++) {
lps[0] = i;
assertEquals(Down, testee.compute(clp(lps), linesCount));
}
//chords with 2 notes
//stem down
lps = new int[2];
lps[0] = 2;
lps[1] = 7;
assertEquals(Down, testee.compute(clp(lps), linesCount));
lps[0] = 1;
lps[1] = 9;
assertEquals(Down, testee.compute(clp(lps), linesCount));
lps[0] = 0;
lps[1] = 9;
assertEquals(Down, testee.compute(clp(lps), linesCount));
lps[0] = 3;
lps[1] = 6;
assertEquals(Down, testee.compute(clp(lps), linesCount));
lps[0] = 4;
lps[1] = 6;
assertEquals(Down, testee.compute(clp(lps), linesCount));
lps[0] = 3;
lps[1] = 7;
assertEquals(Down, testee.compute(clp(lps), linesCount));
lps[0] = 2;
lps[1] = 8;
assertEquals(Down, testee.compute(clp(lps), linesCount));
lps[0] = -1;
lps[1] = 11;
assertEquals(Down, testee.compute(clp(lps), linesCount));
//stem up
lps[0] = -1;
lps[1] = 6;
assertEquals(Up, testee.compute(clp(lps), linesCount));
lps[0] = 1;
lps[1] = 5;
assertEquals(Up, testee.compute(clp(lps), linesCount));
lps[0] = 2;
lps[1] = 4;
assertEquals(Up, testee.compute(clp(lps), linesCount));
lps[0] = 0;
lps[1] = 7;
assertEquals(Up, testee.compute(clp(lps), linesCount));
lps[0] = -1;
lps[1] = 8;
assertEquals(Up, testee.compute(clp(lps), linesCount));
lps[0] = -2;
lps[1] = 9;
assertEquals(Up, testee.compute(clp(lps), linesCount));
lps[0] = -4;
lps[1] = 9;
assertEquals(Up, testee.compute(clp(lps), linesCount));
//chords with more than 2 notes
lps = new int[3];
lps[0] = 1;
lps[1] = 3;
lps[2] = 6;
assertEquals(Up, testee.compute(clp(lps), linesCount));
lps[0] = 3;
lps[1] = 6;
lps[2] = 8;
assertEquals(Down, testee.compute(clp(lps), linesCount));
lps[0] = 2;
lps[1] = 5;
lps[2] = 7;
assertEquals(Down, testee.compute(clp(lps), linesCount));
lps[0] = 0;
lps[1] = 4;
lps[2] = 7;
assertEquals(Up, testee.compute(clp(lps), linesCount));
lps = new int[4];
lps[0] = -4;
lps[1] = 1;
lps[2] = 5;
lps[3] = 8;
assertEquals(Up, testee.compute(clp(lps), linesCount));
lps = new int[5];
lps[0] = -2;
lps[1] = 2;
lps[2] = 5;
lps[3] = 10;
lps[4] = 14;
assertEquals(Down, testee.compute(clp(lps), linesCount));
//chords with the same distance from top and lowest note
lps = new int[4];
lps[0] = 0;
lps[1] = 4;
lps[2] = 6;
lps[3] = 8;
assertEquals(Down, testee.compute(clp(lps), linesCount));
lps = new int[3];
lps[0] = 1;
lps[1] = 5;
lps[2] = 7;
assertEquals(Down, testee.compute(clp(lps), linesCount));
lps = new int[3];
lps[0] = -1;
lps[1] = 6;
lps[2] = 9;
assertEquals(Down, testee.compute(clp(lps), linesCount));
lps = new int[5];
lps[0] = -2;
lps[1] = 1;
lps[2] = 5;
lps[3] = 8;
lps[4] = 10;
assertEquals(Down, testee.compute(clp(lps), linesCount));
lps = new int[4];
lps[0] = 0;
lps[1] = 2;
lps[2] = 4;
lps[3] = 8;
assertEquals(Up, testee.compute(clp(lps), linesCount));
lps = new int[3];
lps[0] = 1;
lps[1] = 3;
lps[2] = 7;
assertEquals(Up, testee.compute(clp(lps), linesCount));
lps = new int[5];
lps[0] = -2;
lps[1] = 1;
lps[2] = 3;
lps[3] = 8;
lps[4] = 10;
assertEquals(Up, testee.compute(clp(lps), linesCount));
}
private ChordLps clp(int... lps) {
return new ChordLps(lps);
}
}