scratch-judge
Version:
A custom scratch-vm used to watch program status and output result about the program.
127 lines (106 loc) • 3.96 kB
Markdown
# scratch-judge
A custom scratch-vm used to watch program status and output result about the program.
## Usage (English)
By Bash:
```bash
npm i -g scratch-judge
scj -h
scj src/index.js -p test/test.sb3 -d test/ -o 3
# Do your own :D
```
By NodeJS:
```javascript
const judge = require('scratch-judge')
judge({
projectFile: 'path/to/your/scratch/project/file',
fileNameFormat: '#{n}',
testFolder: 'path/to/your/test/folder',
testpoints: 10,
time: 1000,
mem: 40960,
turbo: true,
format: false
}).then((evt) => {
evt.on('point', (result) => {
// Emit when a point is finished its test.
}).on('error', (err) => {
// Emit when a point occurs an error.
}).once('end', (results) => {
// Emit when all the points are finished their test.
// Result is an array contains all the result.
})
})
```
### CLI Description
Run `scj -h` to check usage.
### API Description
`Promise judge(Object options)` Start a test.
If runs as command, it will output the testing result to stdout.
Or if be invoke as module, it will return a Promise and resolve the result types of JSON.
Here is a list of available options:
- `String projectFile`
Path to the scratch project which is supported by the
Scratch 3.0 and needs to be tested.
- `String fileNameFormat`
Optional. The format of the file name.
Will replace `#{n}` to the testing point number.
Such as `P1000-#{n}` will be translated to `P1000-1.in` and `P1000-1.out` .
Default is `#{n}`.
- `String testFolder`
Path to your test folder which is included your input file
like `1.in` `1.out` in order.
- `Number testpoints`
Optional. The amount of testing points will be run.
Default is `10`.
- `Number time`
Optional. Time that each testing points can use.
The unit is milliseconds.
Default is `1000`.
- `Number mem`
Optional. Memory that each testing points can use.
The unit is kilobytes.
Default is `25600` (25MB) if `traceFullMemory` is `true`
, or it's `40960` (4MB).
- `Boolean turbo`
Optional. Using turbo mode to test.
Default is `true`.
- `Boolean debug`
Optional. Output debug message to stdout.
Default is `false`.
- `Boolean format`
Optional. Output formatted json result after test.
Only be used in cli.
Default is `false`, output unformatted result.
- `Boolean traceFullMemory`
Optional. Trace memory of the NodeJS runtime.
Or it will subtract from the memory scratch-vm running to the memory before start testing.
Default is `true`.
Then it will return a promise will reslove with a `JudgeEvent` extends on `EventEmitter`,
it will emit these events while testing:
- `point` `JudgeTestingPointResult` Emit when a point is finished its test.
It will return a value contain the result.
- `end` `JudgeTestingPointResult[]` Emit when all points are finished their tests.
It will return a array contains all result each testing point.
- `error` `Error`
Emit when a point occurred an error.
But the other testing points will ***not stop and continue running***.
`JudgeTestingPointResult` struct:
- `number` `id`
Point number.
- `string` `status`
Result of the test. Such as `AC`, `RE`, `TLE`, `MLE`, `WA`.
- `string` `details`
Detail of result, it will contain error string if `status` is `RE`,
or line number of wrong answer if `status` is `WA`.
- `Error` `error`
An error object if `status` is `RE`.
- `number` `usedTime`
Time that testing point has used. In milliseconds.
- `number` `usedMemory`
Memory that testing point has used. In kilobytes.
- `string[]` `answer`
An array of project output if `status` is `WA`.
### Like this project?
Feel free to give tips to me!
[Chinese link.](https://afdian.net/@SteveXMH)
(I don't have patreon sry ;-;)