Skip to content

Commit f6a13cb

Browse files
committed
fix tournament server + benchmarks
1 parent 25a88b6 commit f6a13cb

File tree

2 files changed

+25
-20
lines changed

2 files changed

+25
-20
lines changed

src/swarm-tournament/Swarm/Web/Tournament/Validate.hs

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ module Swarm.Web.Tournament.Validate where
99

1010
import Control.Arrow (left)
1111
import Control.Carrier.Accum.Strict (evalAccum)
12+
import Control.Carrier.Error.Either (runError)
1213
import Control.Carrier.Throw.Either (runThrow)
1314
import Control.Lens
1415
import Control.Monad (unless)
@@ -17,6 +18,7 @@ import Control.Monad.State (evalStateT)
1718
import Control.Monad.Trans.Except
1819
import Data.ByteString.Lazy qualified as LBS
1920
import Data.Either.Extra (maybeToEither)
21+
import Data.Map qualified as M
2022
import Data.Sequence (Seq)
2123
import Data.Text qualified as T
2224
import Data.Text.Encoding (decodeUtf8')
@@ -34,7 +36,8 @@ import Swarm.Game.State.Runtime (RuntimeOptions (..), initRuntimeState, initScen
3436
import Swarm.Game.State.Substate (initState, seed)
3537
import Swarm.Game.Step.Validate (playUntilWin)
3638
import Swarm.Language.Pipeline
37-
import Swarm.Language.Syntax (TSyntax)
39+
import Swarm.Language.Syntax (Phase (..), Syntax)
40+
import Swarm.Pretty (prettyString, prettyText)
3841
import Swarm.Util.Yaml
3942
import Swarm.Web.Tournament.Database.Query
4043
import Swarm.Web.Tournament.Type
@@ -128,8 +131,8 @@ validateSubmittedSolution (CommonValidationArgs solnTimeout persistenceArgs) sce
128131
. decodeUtf8'
129132
. LBS.toStrict
130133
$ fileContent file
131-
soln <- withExceptT SolutionParseError . except $ processTermEither solText
132-
134+
res <- liftIO $ processTermEither solText
135+
(_srcMap, soln) <- withExceptT (SolutionParseError . prettyText) . except $ res
133136
gs <- withExceptT ScenarioRetrievalFailure $ do
134137
scenarioContent <-
135138
withExceptT DatabaseRetrievalFailure $
@@ -155,7 +158,7 @@ validateSubmittedSolution (CommonValidationArgs solnTimeout persistenceArgs) sce
155158

156159
initScenarioObjectWithEnv ::
157160
LBS.ByteString ->
158-
ExceptT ScenarioInstantiationFailure IO Scenario
161+
ExceptT ScenarioInstantiationFailure IO (Scenario Elaborated)
159162
initScenarioObjectWithEnv content = do
160163
scenarioInputs <-
161164
withExceptT (ScenarioEnvironmentFailure . ContextInitializationFailure)
@@ -168,16 +171,18 @@ initScenarioObjectWithEnv content = do
168171
initScenarioObject ::
169172
ScenarioInputs ->
170173
LBS.ByteString ->
171-
ExceptT ScenarioInstantiationFailure IO Scenario
174+
ExceptT ScenarioInstantiationFailure IO (Scenario Elaborated)
172175
initScenarioObject scenarioInputs content = do
173176
rawYaml <- withExceptT YamlDecodeError . except . decodeEither' $ LBS.toStrict content
174-
withExceptT ScenarioParseFailure $
177+
rawScenario <- withExceptT ScenarioParseFailure $
175178
except $
176179
parseEither (parseJSONE' scenarioInputs) rawYaml
180+
res <- runError @SystemFailure $ process (rawScenario :: Scenario Raw)
181+
withExceptT (ScenarioParseFailure . prettyString) (except res)
177182

178183
gamestateFromScenarioText ::
179184
LBS.ByteString ->
180-
ExceptT ScenarioInstantiationFailure IO (GameState, Scenario)
185+
ExceptT ScenarioInstantiationFailure IO (GameState, Scenario Elaborated)
181186
gamestateFromScenarioText content = do
182187
rs <-
183188
withExceptT (ScenarioEnvironmentFailure . ContextInitializationFailure)
@@ -198,7 +203,7 @@ gamestateFromScenarioText content = do
198203

199204
verifySolution ::
200205
SolutionTimeout ->
201-
TSyntax ->
206+
Syntax Elaborated ->
202207
GameState ->
203208
ExceptT SolutionEvaluationFailure IO SolutionCharacterization
204209
verifySolution (SolutionTimeout timeoutSeconds) sol gs = do
@@ -219,4 +224,4 @@ verifySolution (SolutionTimeout timeoutSeconds) sol gs = do
219224
codeMetrics
220225
where
221226
codeMetrics = codeMetricsFromSyntax sol
222-
gs' = gs & baseRobot . machine %~ continue sol
227+
gs' = gs & baseRobot . machine %~ continue M.empty sol

test/bench/Benchmark.hs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import Swarm.Failure (SystemFailure, simpleErrorHandle)
1818
import Swarm.Game.CESK (initMachine)
1919
import Swarm.Game.Cosmetic.Display (defaultRobotDisplay)
2020
import Swarm.Game.Location
21-
import Swarm.Game.Robot (TRobot, mkRobot)
21+
import Swarm.Game.Robot (Robot, mkRobot)
2222
import Swarm.Game.Robot.Walk (emptyExceptions)
2323
import Swarm.Game.Scenario (loadStandaloneScenario)
2424
import Swarm.Game.Scenario.Status
@@ -38,13 +38,13 @@ import Swarm.Util.Erasable
3838
import Test.Tasty.Bench (Benchmark, bcompare, bench, bgroup, defaultMain, whnfAppIO)
3939

4040
-- | The program of a robot that does nothing.
41-
idleProgram :: TSyntax
41+
idleProgram :: Syntax Elaborated
4242
idleProgram = [tmQ| {} |]
4343

4444
-- | The program of a robot which waits a random number of ticks, changes its
4545
-- appearance, then waits another random number of ticks, places a tree, and
4646
-- then self-destructs.
47-
treeProgram :: TSyntax
47+
treeProgram :: Syntax Elaborated
4848
treeProgram =
4949
[tmQ|
5050
{
@@ -59,15 +59,15 @@ treeProgram =
5959
|]
6060

6161
-- | The program of a robot that moves forward forever.
62-
moverProgram :: TSyntax
62+
moverProgram :: Syntax Elaborated
6363
moverProgram =
6464
[tmQ|
6565
let forever : Cmd Unit -> Cmd Unit = \c. c; forever c
6666
in forever move
6767
|]
6868

6969
-- | The program of a robot that moves in circles forever.
70-
circlerProgram :: TSyntax
70+
circlerProgram :: Syntax Elaborated
7171
circlerProgram =
7272
[tmQ|
7373
let forever : Cmd Unit -> Cmd Unit = \c. c; forever c
@@ -91,13 +91,13 @@ circlerProgram =
9191
-- This is used to compare the performance degradation caused
9292
-- by using definitions and chains of ifs. Ideally there should
9393
-- not be cost if the code is inlined and simplified. TODO: #1557
94-
waveProgram :: Bool -> TSyntax
94+
waveProgram :: Bool -> Syntax Elaborated
9595
waveProgram manualInline =
96-
let inlineDef = if manualInline then (1 :: Integer) else 0
96+
let _inlineDef = if manualInline then (1 :: Integer) else 0
9797
in [tmQ|
9898
def doN = \n. \f. if (n > 0) {f; doN (n - 1) f} {}; end;
9999
def crossPath =
100-
if ($int:inlineDef == 0) {
100+
if ($int:_inlineDef == 0) {
101101
doN 6 move;
102102
} {
103103
move; move; move; move; move; move;
@@ -119,7 +119,7 @@ waveProgram manualInline =
119119
|]
120120

121121
-- | Initializes a robot with program prog at location loc facing north.
122-
initRobot :: TSyntax -> Location -> TRobot
122+
initRobot :: Syntax Elaborated -> Location -> Robot Elaborated
123123
initRobot prog loc =
124124
mkRobot
125125
Nothing
@@ -138,7 +138,7 @@ initRobot prog loc =
138138

139139
-- | Creates a GameState with numRobot copies of robot on a blank map, aligned
140140
-- in a row starting at (0,0) and spreading east.
141-
mkGameState :: TSyntax -> (Location -> TRobot) -> Int -> IO GameState
141+
mkGameState :: Syntax Elaborated -> (Location -> Robot Elaborated) -> Int -> IO GameState
142142
mkGameState prog robotMaker numRobots = do
143143
let robots = [robotMaker (Location (fromIntegral x) 0) | x <- [0 .. numRobots - 1]]
144144

@@ -208,7 +208,7 @@ main = do
208208
robotNumbers = [10, 20 .. 40]
209209
largeRobotNumbers = take 4 $ iterate (* 2) 100
210210

211-
mkGameStates :: [Int] -> TSyntax -> IO [(Int, GameState)]
211+
mkGameStates :: [Int] -> Syntax Elaborated -> IO [(Int, GameState)]
212212
mkGameStates botCounts prog = mapM (traverse (mkGameState prog $ initRobot prog) . dupe) botCounts
213213

214214
toBenchmarks :: Int -> [(Int, GameState)] -> [Benchmark]

0 commit comments

Comments
 (0)