import org.junit.Test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.util.*; import java.util.stream.*; public class MusicalNoteTest { @Test public void testTranspose() { assertEquals(MusicalNote.transpose(MusicalNote.GSharp, -50000), MusicalNote.C); } @Test public void testFifth() { List ns = MusicalNote.fifths.apply(true, MusicalNote.ASharp).limit(12).collect(Collectors.toList()); assertEquals("0", MusicalNote.ASharp, ns.get(0)); for (int i = 0; i < ns.size() - 1; i++) assertEquals((i + 1) + "", MusicalNote.transpose(ns.get(i), 7), ns.get(i + 1)); ns = MusicalNote.fifths.apply(false, MusicalNote.E).limit(12).collect(Collectors.toList()); assertEquals("0", MusicalNote.E, ns.get(0)); for (int i = 0; i < ns.size() - 1; i++) assertEquals((i + 1) + "", MusicalNote.transpose(ns.get(i), -7), ns.get(i + 1)); } @Test public void testFifthMillionth() { assertEquals(Optional.of(MusicalNote.G), MusicalNote.fifths.apply(false, MusicalNote.B).skip(1000000).findFirst()); } }