summaryrefslogtreecommitdiffstatshomepage
path: root/src/tools/runtest.cmd
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/runtest.cmd')
-rw-r--r--src/tools/runtest.cmd156
1 files changed, 156 insertions, 0 deletions
diff --git a/src/tools/runtest.cmd b/src/tools/runtest.cmd
new file mode 100644
index 00000000000..65f63c2ad7e
--- /dev/null
+++ b/src/tools/runtest.cmd
@@ -0,0 +1,156 @@
+@rem ----------------------------------------------------
+@rem MAME Testing script
+@rem (Windows only at the moment, sorry!)
+@rem
+@rem Initial setup of the script:
+@rem
+@rem 1. Create a fresh directory mametest/
+@rem 2. Copy this script into it (mametest/runtest.cmd)
+@rem 3. Copy a mame.ini with your ROM paths into it
+@rem (mametest/mame.ini)
+@rem 4. Copy a transparent crosshair cursor into it
+@rem (mametest/cross.png)
+@rem
+@rem How to run a test:
+@rem
+@rem 1. Create a new subdirectory mametest/version/
+@rem 2. Copy mame.exe into it (mametest/version/mame.exe)
+@rem 3. Open a command prompt to mametest/version
+@rem 4. Run "..\runtest"
+@rem 5. Wait for all the tests to complete
+@rem
+@rem How to generate a report:
+@rem
+@rem 1. Open a command prompt to mametest.
+@rem 2. Make sure you have run tests for at least two
+@rem versions (mametest/ver1 and mametest/ver2)
+@rem 3. Create an output directory (mametest/report)
+@rem 4. Run "regrep report ver1\summary.log ver2\summary.log"
+@rem 5. Upload the report directory to mamedev.org :)
+@rem 6. Differing files are printed to stdout; redirect
+@rem to create a list that can be run again via
+@rem this script
+@rem ----------------------------------------------------
+
+@echo off
+
+@rem ----------------------------------------------------
+@rem We require mame.exe to be present
+@rem ----------------------------------------------------
+
+if not exist mame.exe (
+@echo Missing mame.exe!
+@goto :eof
+)
+
+@rem ----------------------------------------------------
+@rem By default we generate our own list; however, a list
+@rem can be specified by an alternate parameter. If a
+@rem parameter is given, we leave the existing log and
+@rem snap directories intact; otherwise, we delete them
+@rem and start fresh.
+@rem ----------------------------------------------------
+
+set LIST=gamelist.txt
+if "%1"=="" (
+@echo Generating full list
+mame -ls >%LIST%
+@echo Deleting old data
+if exist log rmdir /s/q log
+if exist snap rmdir /s/q snap
+if exist summary.log del summary.log
+) else (
+set LIST=%1
+@echo Re-testing %1
+)
+
+@rem ----------------------------------------------------
+@rem Always delete all cfg, nvram, and diff files.
+@rem ----------------------------------------------------
+
+if exist cfg rmdir /s/q cfg
+if exist nvram rmdir /s/q nvram
+if exist diff rmdir /s/q diff
+
+@rem ----------------------------------------------------
+@rem Make sure we use transparent crosshairs.
+@rem ----------------------------------------------------
+
+if not exist artwork mkdir artwork
+copy /y ..\cross.png artwork\cross0.png
+copy /y ..\cross.png artwork\cross1.png
+copy /y ..\cross.png artwork\cross2.png
+copy /y ..\cross.png artwork\cross3.png
+
+@rem ----------------------------------------------------
+@rem If we don't yet have a summary.log, create a new one.
+@rem ----------------------------------------------------
+
+if not exist summary.log (
+mame -help >summary.log
+echo @@@@@dir=%CD%>>summary.log
+)
+
+@rem ----------------------------------------------------
+@rem Create the log directory and a starting timestamp.
+@rem ----------------------------------------------------
+
+if not exist log mkdir log
+echo @@@@@start=%TIME%>>summary.log
+
+@rem ----------------------------------------------------
+@rem Iterate over drivers in the log, extracting the
+@rem source filename as well, and passing both to runone.
+@rem ----------------------------------------------------
+
+for /f "tokens=1-5 delims=/ " %%i in (%LIST%) do (
+if not "%%m"=="" (
+call :runone %%i %%m
+) else if not "%%l"=="" (
+call :runone %%i %%l
+) else if not "%%k"=="" (
+call :runone %%i %%k
+) else (
+call :runone %%i %%j
+)
+)
+
+@rem ----------------------------------------------------
+@rem Add a final timestamp and we're done.
+@rem ----------------------------------------------------
+
+echo @@@@@stop=%TIME%>>summary.log
+goto :eof
+
+
+
+@rem ----------------------------------------------------
+@rem runone: Execute a single game for 30 seconds and
+@rem output the results to the summary.log.
+@rem ----------------------------------------------------
+
+:runone
+@echo Testing %1 (%2)...
+echo.>>summary.log
+mame %1 -str 30 -nodebug -nothrottle -inipath .. -video none -nosound 1>log\%1.txt 2>log\%1.err
+if %errorlevel% equ 100 (
+echo @@@@@driver=%1: Exception>>summary.log
+type log\%1.err >>summary.log
+) else if %errorlevel% equ 5 (
+@rem Do nothing -- game does not exist in this build
+) else if %errorlevel% equ 3 (
+echo @@@@@driver=%1: Fatal error>>summary.log
+type log\%1.err >>summary.log
+) else if %errorlevel% equ 2 (
+echo @@@@@driver=%1: Missing files>>summary.log
+type log\%1.err >>summary.log
+) else if %errorlevel% equ 1 (
+echo @@@@@driver=%1: Failed validity check>>summary.log
+type log\%1.err >>summary.log
+) else if %errorlevel% equ 0 (
+echo @@@@@driver=%1: Success>>summary.log
+) else (
+echo @@@@@driver=%1: Unknown error %errorlevel%>>summary.log
+)
+echo @@@@@source=%2>>summary.log
+goto :eof