/* * Copyright (C) 2013-2017 たんらる */ package fourthline.mmlTools.optimizer; import static org.junit.Assert.*; import org.junit.After; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import fourthline.mmlTools.MMLEventList; import fourthline.mmlTools.core.MMLTicks; import fourthline.mmlTools.core.UndefinedTickException; /** * MML最適化のテスト. */ public class MMLStringOptimizerTest { private static final int TIMEOUT = 100; @Before public void setup() throws UndefinedTickException { checkMMLStringOptimize("c4", "c"); MMLStringOptimizer.setDebug(true); MMLTicks.getTick("64"); } @After public void cleanup() { MMLStringOptimizer.setDebug(false); } @Test(timeout=TIMEOUT) public void test0() { MMLStringOptimizer optimizer = new MMLStringOptimizer(""); assertEquals("", optimizer.toString()); } private void checkMMLStringOptimize(String input, String expect) { try { MMLStringOptimizer optimizer = new MMLStringOptimizer(new MMLEventList(input).toMMLString(true, true)); String mml = optimizer.toString(); System.out.println(input); System.out.println(mml); System.out.println(expect); System.out.printf("%d > %d\n", input.length(), mml.length()); System.out.printf("expect: %d\n", expect.length()); assertTrue(mml.length() <= expect.length()); assertEquals(expect, mml); MMLEventList eventList1 = new MMLEventList(input); MMLEventList eventList2 = new MMLEventList(mml); assertEquals(eventList1.getMMLNoteEventList().toString(), eventList2.getMMLNoteEventList().toString()); } catch (UndefinedTickException e) { fail(e.getMessage()); } } @Test(timeout=TIMEOUT) public void testOptimize_0() { String input = "c8c8c16c16c8c8c16"; String expect = "c8c8l16ccc8c8c"; checkMMLStringOptimize(input, expect); } @Test(timeout=TIMEOUT) public void testOptimize_1() { String input = "c8c8c16c16c8c8"; String expect = "l8ccc16c16cc"; checkMMLStringOptimize(input, expect); } @Test(timeout=TIMEOUT) public void testOptimize_2() { String input = "c4c4c16c4c4c4c16c16c8c8c4c4c16c16c4c4c4"; String expect = "ccc16cccl16ccc8c8c4c4ccl4ccc"; checkMMLStringOptimize(input, expect); } @Test(timeout=TIMEOUT) public void testOptimize_3() { String input = "c16c16c16c16c1c1c1c1c16"; String expect = "l16ccccl1ccccc16"; checkMMLStringOptimize(input, expect); } @Test(timeout=TIMEOUT) public void testOptimize_4() { String input = "c16c16c16c16c1c1c1c16"; String expect = "l16ccccc1c1c1c"; checkMMLStringOptimize(input, expect); } @Test(timeout=TIMEOUT) public void testOptimize_5() { String input = "c16c4c4c16c16c4c4c4"; String expect = "c16ccc16c16ccc"; checkMMLStringOptimize(input, expect); } @Test(timeout=TIMEOUT) public void testOptimize_6() { String input = "c16c16c4c4c16c16c4c4c4"; String expect = "l16ccc4c4ccl4ccc"; checkMMLStringOptimize(input, expect); } @Test(timeout=TIMEOUT) public void testOptimize_7() { String input = "c16ccc16c16ccc"; String expect = "c16ccc16c16ccc"; checkMMLStringOptimize(input, expect); } @Test(timeout=TIMEOUT) public void testOptimize_8() { String input = "c16c16c16c8c8c8c16c8c16c4.c8c16c8.c16c8c16c16c16"; String expect = "l16cccc8c8c8cc8cc4.c8cc8.cc8ccc"; checkMMLStringOptimize(input, expect); } @Test(timeout=TIMEOUT) public void testOptimize_9_0() { String input = "c2c8c2c8c16c16c8c8c8"; String expect = "c2l8cc2cc16c16ccc"; checkMMLStringOptimize(input, expect); } @Test(timeout=TIMEOUT) public void testOptimize_9_1() { String input = "c2c8c2c8c16c16c2c2c2"; String expect = "l2cc8cc8c16c16ccc"; checkMMLStringOptimize(input, expect); } @Test(timeout=TIMEOUT) public void testOptimize_amp_L_0() { String input = "c2&c8d8d8d8d8d8d8"; String expect = "c2l8&cdddddd"; checkMMLStringOptimize(input, expect); } @Test(timeout=TIMEOUT) public void testOptimize_x1_1() { String input = "r1.r1.r1.r1.r1.r1.r1.c4a2c4a2c4a2c4a2c4a2c4a2c4a2r1.r1.r1.r1.r1.r1.r1.r1.r1.b4"; String expect = "l1.rrrrrrrc4l2ac4ac4ac4ac4ac4ac4al1.rrrrrrrrrb4"; checkMMLStringOptimize(input, expect); } @Test(timeout=TIMEOUT) public void testOptimize_oct() { String input = ">c<<<c32.>>>c16.<<v12<c64>>t121>co6d<<d"; String expect = ">co2c21o5c16.v12o2c64t121o5c>d<<d"; checkMMLStringOptimize(input, expect); } @Test(timeout=TIMEOUT) public void testOptimize_oct2() { String input = "r.>cr16<a+r.>cr16<a+r.>cr16<a+e."; String expect = "r.b+r16a+r.b+r16a+r.b+r16a+e."; checkMMLStringOptimize(input, expect); } @Test(timeout=TIMEOUT) public void testOptimize_oct3() { String input = "r.<br16>a+r.<br16>a+r.<br16>a+g."; String expect = "r.c-r16a+r.c-r16a+r.c-r16a+g."; checkMMLStringOptimize(input, expect); } @Test(timeout=TIMEOUT) public void testOptimize_cb_oct() { String input = "c<b>c<v10b>c<t121b>v12cd<v11<b>d>>t118c<g"; String expect = "cc-cv10c-ct121c-v12cdv11<c-dt118>b+g"; checkMMLStringOptimize(input, expect); } @Test(timeout=TIMEOUT) public void testOptimize_n() { String input = "c<g+>c<g>>f<<a"; String expect = "c<g+b+gn65a"; checkMMLStringOptimize(input, expect); } @Test(timeout=TIMEOUT) public void testOptimize_n2() { String input = "o7cccc<<<<<c+>>>>cccc"; String expect = "o7ccccn25<cccc"; // other: "o7cccco2c+o6cccc" checkMMLStringOptimize(input, expect); } @Test(timeout=TIMEOUT) public void testOptimize_n3() { String input = "o7cccc<<<<<c+>>>>>cccc"; String expect = "o7ccccn25cccc"; checkMMLStringOptimize(input, expect); } @Test(timeout=TIMEOUT) public void testOptimize_n4() { String input = "o7cccc<<<<<c+c+>>>>>cccc"; String expect = "o7ccccn25n25cccc"; // other: "o7cccco2c+c+o7cccc" checkMMLStringOptimize(input, expect); } @Test(timeout=TIMEOUT) public void testOptimize_n5() { String input = "o7cccc<<<<<c+>c+>>>>cccc"; String expect = "o7ccccn25n37cccc"; // other: "o7cccco2c+>c+o7cccc" checkMMLStringOptimize(input, expect); } @Test(timeout=TIMEOUT) public void testOptimize_n6() { String input = "n1n25n1c64n25n1n25n1n25"; String expect = "n1n25n1c64n25n1n25n1n25"; checkMMLStringOptimize(input, expect); } @Ignore @Test(timeout=TIMEOUT) public void testSwap_l1() { String input = "l16aaaaaaab4&bl4ccccccccc"; String expect = "l16aaaaaaabl4&bccccccccc"; checkMMLStringOptimize(input, expect); } @Test(timeout=TIMEOUT) public void testSwap_l2() { String input = "aaaaaaab16&bl16ccccccccc"; String expect = "aaaaaaabl16&bccccccccc"; checkMMLStringOptimize(input, expect); } @Test(timeout=TIMEOUT) public void test_o0cm() { String input = "o4co0c-o4ccccco0c-c-c-c-cc-cc-c-cccc>ccc<c->ccc"; String expect = "co0c-o4ccccco0c-c-c-c-cc-cc-c-cccc>ccc<c->ccc"; checkMMLStringOptimize(input, expect); } @Test(timeout=TIMEOUT) public void test_F1() { String input = "l32ererer8.rer8.rer8."; String expect = "l32erererr8.err8.e"; checkMMLStringOptimize(input, expect); } @Test(timeout=TIMEOUT) public void test_F2() { String input = "a32a32a32a32c8&c16.a8a8a8a8a8"; String expect = "l32aaaacl8&c.aaaaa"; checkMMLStringOptimize(input, expect); } @Test(timeout=TIMEOUT) public void test_F3() { String input = "a32a32a32a32r8r16.a8a8a8a8a8"; String expect = "l32aaaarl8r.aaaaa"; checkMMLStringOptimize(input, expect); } }