1# Checked Tests 2 3Checked tests is the tests that have additional functionality to check result of the test being run. 4For example, check some event was raised or some IR instruction is appeared after specific optimization. 5 6Each checker's command should start with special token (`'#!'` for panda assembly language, `//!` for java) at the 7beginning of the line. 8 9Allowed multiple checkers in a single file. Each checker starts with command `CHECKER` and ends with line without 10command token at the zero position. 11 12Each command is a valid code in the `ruby` language. 13 14## List of commands 15 16* **CHECKER** (description: string) begin new Checker with specified description 17* **RUN** run panda application, following named arguments are allowed: 18 - *force_jit: bool* - run jit compilation for every executed method 19 - *options: string* - additional options for Panda VM 20 - *entry: string* - entry point, default - `_GLOBAL::main` 21 - *result: int* - expected value to be returned by the `panda` application 22 - *abort: int* - expected terminal signal 23* **RUN_PAOC** run paoc application on the compiled panda file. Output panda file will be passed to the following panda 24 run. Thus, `RUN_PAOC` command must be placed before `RUN` command. 25* **EVENT** (event: pattern) search event within all events 26* **EVENT_NEXT** (event: pattern) ordered search event, i.e. search from position of the last founded event 27* **EVENT_NOT** (event: pattern) ensure event is not occurred 28* **EVENT_NEXT_NOT** (event: pattern) ensure event is not occurred after current position 29* **METHOD** (name: string) start check of specified method, all following checks that require specific method will use method specified by this command 30* **PASS_AFTER** (pass_name: string) specify pass after which IR commands should operate 31* **PASS_BEFORE** (pass_name: string) select pass that is right before the specified one 32* **INST** (inst: pattern) search specified instruction in the ir dump file specified by commands `METHOD` and `PASS_AFTER` 33* **INST_NOT** (inst: pattern) equal to `NOT INST`, i.e. check that instruction is not exist 34* **INST_NEXT_NOT** (event: pattern) ensure instruction is not occurred after current position 35* **IR_COUNT** (inst: string) search specified phrase and counts the number in the ir dump file specified by commands `METHOD` and `PASS_AFTER`, returns the value 36* **BLOCK_COUNT** () equal to `IR_COUNT ("BB ")`, i.e. search specified basic blocks and counts the number 37* **TRUE** (condition) ensure the condition is correct 38* **SKIP_IF** (condition) if condition is `true`, skip all commands from that to end of this checker 39* **ASM_METHOD** (name: string) select a specified method in disasm file, next "ASM*" checks will be applied only for this method's code. 40* **ASM_INST** (inst: pattern) select a specified instruction in disasm file, next "ASM*" checks will be applied only for this instruction's code. 41* **ASM/ASM_NEXT/ASM_NOT/ASM_NEXT_NOT** (inst: pattern) same as other similar checks, but search only in a current disasm scope, defined by `ASM_METHOD` or `ASM_INST`. 42If none of these checks were specified, then search will be applied in the whole disasm file. 43 44*pattern* can be a string(surrounded by quotes) or regex(surrounded by slashes): string - `"SearchPattern"`, regex - `/SearchPattern/`. 45