package com.xenoage.zong.musiclayout.stamper;
import static com.xenoage.utils.kernel.Range.range;
import static com.xenoage.utils.math.Delta.df;
import static com.xenoage.zong.musiclayout.notation.chord.NoteDisplacementTest.note;
import static com.xenoage.zong.musiclayout.notation.chord.NoteSuspension.Left;
import static com.xenoage.zong.musiclayout.notation.chord.NoteSuspension.None;
import static com.xenoage.zong.musiclayout.notation.chord.NoteSuspension.Right;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
import com.xenoage.zong.musiclayout.notation.chord.NoteDisplacement;
import com.xenoage.zong.musiclayout.notation.chord.NoteSuspension;
/**
* Tests for {@link LegerLinesStamper}.
*
* @author Andreas Wenger
*/
public class LegerLinesStamperTest {
private LegerLinesStamper stamper = LegerLinesStamper.legerLinesStamper;
private NoteDisplacement[] noteAlignmentsTopLeftSuspended = {
note(-2),
note(11, -1, NoteSuspension.Left),
note(12),
};
private NoteDisplacement[] noteAlignmentsBottomRightSuspended = {
note(-4),
note(-3, 1, NoteSuspension.Right),
note(10),
};
@Test public void getBottomCountTest() {
assertEquals(2, stamper.getBottomCount(-5));
assertEquals(2, stamper.getBottomCount(-4));
assertEquals(1, stamper.getBottomCount(-3));
assertEquals(1, stamper.getBottomCount(-2));
for (int lp : range(-1, 13))
assertEquals(0, stamper.getBottomCount(lp));
}
@Test public void getTopCountTest() {
int lines = 5;
for (int lp : range(-5, 9))
assertEquals(0, stamper.getTopCount(lp, lines));
assertEquals(1, stamper.getTopCount(10, lines));
assertEquals(1, stamper.getTopCount(11, lines));
assertEquals(2, stamper.getTopCount(12, lines));
assertEquals(2, stamper.getTopCount(13, lines));
}
@Test public void getXMmTest() {
assertEquals(6.6f, stamper.getXMm(5, 2, None, 1.6f), df);
assertEquals(5, stamper.getXMm(5, 2, Left, 1.6f), df);
assertEquals(8.2f, stamper.getXMm(5, 2, Right, 1.6f), df);
}
@Test public void getBottomSuspensionTest() {
assertEquals(None, stamper.getBottomSuspension(noteAlignmentsTopLeftSuspended));
assertEquals(Right, stamper.getBottomSuspension(noteAlignmentsBottomRightSuspended));
}
@Test public void getTopSuspensionTest() {
assertEquals(Left, stamper.getTopSuspension(noteAlignmentsTopLeftSuspended, 5));
assertEquals(None, stamper.getTopSuspension(noteAlignmentsBottomRightSuspended, 5));
}
@Test public void getTopLpsTest() {
assertArrayEquals(new int[]{}, stamper.getTopLps(0, 5));
assertArrayEquals(new int[]{10}, stamper.getTopLps(1, 5));
assertArrayEquals(new int[]{10, 12}, stamper.getTopLps(2, 5));
assertArrayEquals(new int[]{10, 12, 14}, stamper.getTopLps(3, 5));
}
@Test public void getBottomLpsTest() {
assertArrayEquals(new int[]{}, stamper.getBottomLps(0));
assertArrayEquals(new int[]{-2}, stamper.getBottomLps(1));
assertArrayEquals(new int[]{-4, -2}, stamper.getBottomLps(2));
assertArrayEquals(new int[]{-6, -4, -2}, stamper.getBottomLps(3));
}
}