Skip to content

Commit 7d51193

Browse files
committed
Optimizer: [SMove a x, SMove a -x] => []
1 parent ed6a1d5 commit 7d51193

File tree

2 files changed

+10
-1
lines changed

2 files changed

+10
-1
lines changed

src/Optimizations.hs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,5 +50,9 @@ mergeSMoves [] = []
5050
mergeSMoves (m1@(SMove (LongLinDiff a1 d1)):m2@(SMove (LongLinDiff a2 d2)):cmds)
5151
| (a1 /= a2) || (d1 + d2 < -15) || (d1 + d2 > 15)
5252
= m1 : (mergeSMoves (m2:cmds))
53-
| otherwise = (SMove (LongLinDiff a1 (d1 + d2))) : cmds
53+
| otherwise =
54+
let d = d1 + d2
55+
in if d == 0
56+
then cmds
57+
else (SMove (LongLinDiff a1 d)) : cmds
5458
mergeSMoves (cmd:cmds) = cmd : (mergeSMoves cmds)

test/TestOptimizations.hs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,11 @@ testMergeSMoves = testGroup "mergeSMoves"
6464
m2 = SMove (LongLinDiff Z (-4))
6565
result = SMove (LongLinDiff Z (-15))
6666
in mergeSMoves [m1, m2] @?= [result]
67+
, testCase "Unoptimal input.3" $
68+
let
69+
m1 = SMove (LongLinDiff Y (-3))
70+
m2 = SMove (LongLinDiff Y 3)
71+
in mergeSMoves [m1, m2] @?= []
6772

6873
, testCase "Only first occurrence is optimized" $
6974
let

0 commit comments

Comments
 (0)