Spaces:
Running
Running
# Simulate | |
`index.js` allows for running multiple random simulations of Pokemon battles | |
for testing or benchmarking purposes. Without any arguments, `index.js` will | |
run 100 random battles and report any errors that occur. | |
Using any flag will trigger [minimist](https://github.com/substack/minimist) to | |
be installed if it has not been already. | |
## multi | |
The `multi` subcommand (alias: `random`) allows for configuring the amount of | |
battles played, which formats are used, how they are run, and what to output. | |
### General | |
- **`--num`**: play a specific number of games for a format instead of the | |
default 100. | |
- **`--seed`**: PRNG seed to use (eg. `'1234,5678,9012,3456'`). | |
- **`--output`**: makes the harness display the _output_ logs of each battle | |
it runs. | |
- **`--input`**: dump the battle _input_ logs of each battle it runs. | |
- **`--error`**: dump the battle _input_ logs of each battle which errors. | |
### Format | |
By default, the harness will select the format of the next game it runs randomly | |
based on its initial `--seed`. Alternatively, it can run games all in the same | |
format, cycle through the formats or run all formats. | |
- **`--format`**: play the specified format for each of the games it runs. | |
Note that the harness only supports formats where the team can be randomly | |
generated. | |
- **`--cycle`**: cycles through the possible formats, playing one battle in | |
each `--num` battles in total. | |
- **`--all`**: plays every supported format `--num` times before moving on to | |
the next format. | |
### Concurrency | |
The harness runs games sequentially by default, but can be configured to run | |
games asynchronously. | |
- **`--async`**: runs each game concurrently instead of waiting for the | |
previous game to complete before starting the next. Note that since battles | |
run through the harness should not be blocking to begin with (battles | |
naturally wait for players to make their decisions, but the AI's should be | |
making decisions pretty much immediately), this mode is not expected to have | |
large performance benefits over the default sequential mode and may require | |
additional memory. | |
**TODO**: Add support for running battles in `--parallel` on muliple cores with | |
[`worker_threads`](https://nodejs.org/api/worker_threads.html). | |
## exhaustive | |
The `exhaustive` subcommand cycles through all generations and game types, | |
attempting to use as many different effects as possible in the battles it | |
randomly simulates. This can be useful as a form of | |
['smoke testing'](https://en.wikipedia.org/wiki/Smoke_testing_\(software\)), a | |
form of sanity testing/build verification which can be used to expose obvious | |
critical issues with the application. Making it through a successful cycle of | |
smoke tests does *not* mean the application is without bugs, or even that it is | |
crash free - it simply provides some confidence that the application is less | |
likely to catch fire. | |
### Flags | |
- **`--format`** / **`--formats`**: play the specified format(s) instead of | |
iterating through all possible formats. If multiple formats are specified, | |
separate each format with a comma (eg. `format1,format2`). | |
- **`--cycles`**: exhaust the pools of effects `--cycles` times instead of | |
just once. If `--cycles` is negative, `--forever` is implied. | |
- **`--forever`**: continue iterating through formats infinitely, exhausting | |
each `--cycles` times. | |
- **`--seed`**: PRNG seed to use (eg. `'1234,5678,9012,3456'`). | |
- **`--maxFailures`**: exit early if this many failures have occured. | |