@@ -7,7 +7,10 @@ import Optimizations
77import Trace
88
99optimizations :: TestTree
10- optimizations = testGroup " Optimizations" [testSplitLMove]
10+ optimizations = testGroup " Optimizations"
11+ [ testSplitLMove
12+ , testMergeSMoves
13+ ]
1114
1215testSplitLMove :: TestTree
1316testSplitLMove = testGroup " splitLMove"
@@ -32,3 +35,40 @@ testSplitLMove = testGroup "splitLMove"
3235 splitLMove [LMove a b, Wait , LMove a b, Wait ]
3336 @?= [SMove a', SMove b', LMove a b, Wait ]
3437 ]
38+
39+ testMergeSMoves :: TestTree
40+ testMergeSMoves = testGroup " mergeSMoves"
41+ [ testCase " Empty input" $ mergeSMoves [] @?= []
42+
43+ , testCase " SMoves on different axis" $
44+ let
45+ m1 = SMove (LongLinDiff X 13 )
46+ m2 = SMove (LongLinDiff Y (- 11 ))
47+ in mergeSMoves [m1, m2] @?= [m1, m2]
48+
49+ , testCase " Long SMoves can't be combined" $
50+ let
51+ m1 = SMove (LongLinDiff X 13 )
52+ m2 = SMove (LongLinDiff X 11 )
53+ in mergeSMoves [m1, m2] @?= [m1, m2]
54+
55+ , testCase " Unoptimal input.1" $
56+ let
57+ m1 = SMove (LongLinDiff X 4 )
58+ m2 = SMove (LongLinDiff X 3 )
59+ result = SMove (LongLinDiff X 7 )
60+ in mergeSMoves [m1, m2] @?= [result]
61+ , testCase " Unoptimal input.2" $
62+ let
63+ m1 = SMove (LongLinDiff Z (- 11 ))
64+ m2 = SMove (LongLinDiff Z (- 4 ))
65+ result = SMove (LongLinDiff Z (- 15 ))
66+ in mergeSMoves [m1, m2] @?= [result]
67+
68+ , testCase " Only first occurrence is optimized" $
69+ let
70+ m1 = SMove (LongLinDiff X 4 )
71+ m2 = SMove (LongLinDiff X 3 )
72+ combined = SMove (LongLinDiff X 7 )
73+ in mergeSMoves [m1, m2, m1, m2] @?= [combined, m1, m2]
74+ ]
0 commit comments