https://gitlab.com/tezos/tezos
Raw File
Tip revision: 4c7bc5991909be8e0b89e5587ab1c1dbbde0a958 authored by Marina Polubelova on 19 January 2024, 13:05:28 UTC
change consensus_rights_delay only for mainnet
Tip revision: 4c7bc59
coverage.md
# Instruction coverage

This file documents Michelson instruction coverage by tzt tests as of protocol
Nairobi.

## Control structures

### `APPLY`

- [apply_00.tzt](apply_00.tzt)
- [apply_01.tzt](apply_01.tzt)
- [apply_02.tzt](apply_02.tzt)

Does not check the behavior that the values that are not both pushable and
storable cannot be captured.

### `EXEC`

- [exec_00.tzt](exec_00.tzt)
- [exec_01.tzt](exec_01.tzt)
- [exec_02.tzt](exec_02.tzt)
- [exec_03.tzt](exec_03.tzt)

### `FAILWITH`

- [failwith_00.tzt](failwith_00.tzt)

### `IF`

- [if_00.tzt](if_00.tzt)
- [if_01.tzt](if_01.tzt)

These tests do not check that the non-participating end of the stack, if it
exists, is preserved.

### `IF_CONS`

- [ifcons_listint_00.tzt](ifcons_listint_00.tzt)
- [ifcons_listint_01.tzt](ifcons_listint_01.tzt)
- [ifcons_listnat_00.tzt](ifcons_listnat_00.tzt)
- [ifcons_listnat_01.tzt](ifcons_listnat_01.tzt)

These tests do not check that the non-participating end of the stack, if it
exists, is preserved.

### `IF_LEFT`

- [ifleft_orintstring_00.tzt](ifleft_orintstring_00.tzt)
- [ifleft_orstringint_00.tzt](ifleft_orstringint_00.tzt)

These tests do not check that the non-participating end of the stack, if it
exists, is preserved.
### `IF_NONE`

- [ifnone_optionint_00.tzt](ifnone_optionint_00.tzt)
- [ifnone_optionnat_00.tzt](ifnone_optionnat_00.tzt)

These tests do not check that the non-participating end of the stack, if it
exists, is preserved.

### `LAMBDA`

***None***

### `LAMBDA_REC`

***None***

### `LOOP`

- [loop_00.tzt](loop_00.tzt)
- [loop_01.tzt](loop_01.tzt)
- [loop_02.tzt](loop_02.tzt)

### `LOOP_LEFT`

- [loopleft_00.tzt](loopleft_00.tzt)
- [loopleft_01.tzt](loopleft_01.tzt)
- [loopleft_02.tzt](loopleft_02.tzt)
- [loopleft_03.tzt](loopleft_03.tzt)
- [loopleft_04.tzt](loopleft_04.tzt)

### `;`

***None***

Instruction sequencing is indirectly covered by tzts including multiple instructions, but there are no dedicated unit tests.

### `{}`

***None***

## Stack manipulation

### `DIG`

- [dig_00.tzt](dig_00.tzt)
- [dig_01.tzt](dig_01.tzt)
- [dig_02.tzt](dig_02.tzt)
- [dig_03.tzt](dig_03.tzt)
- [dig_04.tzt](dig_04.tzt)

Even numbers are conspicuous by their absence.

### `DIP`

- [dip_00.tzt](dip_00.tzt)
- [dip_01.tzt](dip_01.tzt)
- [dip_02.tzt](dip_02.tzt)

DIP is used in quite a few other tests as an utility, so it's indirectly
covered.

### `DIP n`

- [dipn_00.tzt](dipn_00.tzt)
- [dipn_01.tzt](dipn_01.tzt)
- [dipn_02.tzt](dipn_02.tzt)
- [dipn_03.tzt](dipn_03.tzt)

### `DROP`

- [drop_00.tzt](drop_00.tzt)

Used a few times as an utility in other tzts.

### `DROP n`

- [dropn_00.tzt](dropn_00.tzt)
- [dropn_01.tzt](dropn_01.tzt)
- [dropn_02.tzt](dropn_02.tzt)
- [dropn_03.tzt](dropn_03.tzt)

### `DUG`

- [dugn_00.tzt](dugn_00.tzt)

`DUG 0`, `DUG 1` edge cases are missing.

### `DUP`

- [dup_00.tzt](dup_00.tzt)

### `DUP n`

- [dupn_00.tzt](dupn_00.tzt)
- [dupn_01.tzt](dupn_01.tzt)
- [dupn_02.tzt](dupn_02.tzt)
- [dupn_03.tzt](dupn_03.tzt)
- [dupn_04.tzt](dupn_04.tzt)

### `PUSH`

- [push_int_00.tzt](push_int_00.tzt)
- [push_string_00.tzt](push_string_00.tzt)

`PUSH` is used quite a bit as a utility in other tzts, hence indirectly covered
to some extent. Not all pushable types are tested with `PUSH`, however.

### `SWAP`

- [swap_00.tzt](swap_00.tzt)

## Arithmetic

### `ABS`

- [abs_00.tzt](abs_00.tzt)
- [abs_01.tzt](abs_01.tzt)
- [abs_02.tzt](abs_02.tzt)

### `ADD: nat : nat`

- [add_nat-nat_00.tzt](add_nat-nat_00.tzt)

### `ADD: nat : int`

- [add_nat-int_00.tzt](add_nat-int_00.tzt)

### `ADD: int : nat`

- [add_int-nat_00.tzt](add_int-nat_00.tzt)
- [add_int-nat_01.tzt](add_int-nat_01.tzt)

### `ADD: int : int`

- [add_int-int_00.tzt](add_int-int_00.tzt)

### `ADD: timestamp : int`

- [add_timestamp-int_00.tzt](add_timestamp-int_00.tzt)
- [add_timestamp-int_01.tzt](add_timestamp-int_01.tzt)
- [add_timestamp-int_02.tzt](add_timestamp-int_02.tzt)
- [add_timestamp-int_03.tzt](add_timestamp-int_03.tzt) -- doesn't use `ADD` instruction, only testing `timestamp`

### `ADD: int : timestamp`

- [add_int-timestamp_00.tzt](add_int-timestamp_00.tzt)

### `ADD: mutez : mutez`

- [add_mutez-mutez_00.tzt](add_mutez-mutez_00.tzt)
- [add_mutez-mutez_01.tzt](add_mutez-mutez_01.tzt)

### `ADD: bls12_381_g1 : bls12_381_g1`

***None***

### `ADD: bls12_381_g2 : bls12_381_g2`

***None***

### `ADD: bls12_381_fr : bls12_381_fr`

***None***

### `BYTES: int`

***None***

### `BYTES: nat`

***None***

### `COMPARE`

- [compare_bool_00.tzt](compare_bool_00.tzt)
- [compare_bool_01.tzt](compare_bool_01.tzt)
- [compare_bool_02.tzt](compare_bool_02.tzt)
- [compare_bool_03.tzt](compare_bool_03.tzt)
- [compare_bytes_00.tzt](compare_bytes_00.tzt)
- [compare_bytes_01.tzt](compare_bytes_01.tzt)
- [compare_bytes_02.tzt](compare_bytes_02.tzt)
- [compare_bytes_03.tzt](compare_bytes_03.tzt)
- [compare_bytes_04.tzt](compare_bytes_04.tzt)
- [compare_int_00.tzt](compare_int_00.tzt)
- [compare_int_01.tzt](compare_int_01.tzt)
- [compare_int_02.tzt](compare_int_02.tzt)
- [compare_int_03.tzt](compare_int_03.tzt)
- [compare_int_04.tzt](compare_int_04.tzt)
- [compare_keyhash_00.tzt](compare_keyhash_00.tzt)
- [compare_keyhash_01.tzt](compare_keyhash_01.tzt)
- [compare_keyhash_02.tzt](compare_keyhash_02.tzt)
- [compare_mutez_00.tzt](compare_mutez_00.tzt)
- [compare_mutez_01.tzt](compare_mutez_01.tzt)
- [compare_mutez_02.tzt](compare_mutez_02.tzt)
- [compare_mutez_03.tzt](compare_mutez_03.tzt)
- [compare_mutez_04.tzt](compare_mutez_04.tzt)
- [compare_mutez_05.tzt](compare_mutez_05.tzt)
- [compare_nat_00.tzt](compare_nat_00.tzt)
- [compare_nat_01.tzt](compare_nat_01.tzt)
- [compare_nat_02.tzt](compare_nat_02.tzt)
- [compare_nat_03.tzt](compare_nat_03.tzt)
- [compare_nat_04.tzt](compare_nat_04.tzt)
- [compare_nat_05.tzt](compare_nat_05.tzt)
- [compare_never_00.tzt](compare_never_00.tzt)
- [compare_pairintint_00.tzt](compare_pairintint_00.tzt)
- [compare_pairintint_01.tzt](compare_pairintint_01.tzt)
- [compare_pairintint_02.tzt](compare_pairintint_02.tzt)
- [compare_pairintint_03.tzt](compare_pairintint_03.tzt)
- [compare_string_00.tzt](compare_string_00.tzt)
- [compare_string_01.tzt](compare_string_01.tzt)
- [compare_string_02.tzt](compare_string_02.tzt)
- [compare_string_03.tzt](compare_string_03.tzt)
- [compare_string_04.tzt](compare_string_04.tzt)
- [compare_timestamp_00.tzt](compare_timestamp_00.tzt)
- [compare_timestamp_01.tzt](compare_timestamp_01.tzt)
- [compare_timestamp_02.tzt](compare_timestamp_02.tzt)
- [compare_timestamp_03.tzt](compare_timestamp_03.tzt)
- [compare_timestamp_04.tzt](compare_timestamp_04.tzt)
- [compare_timestamp_05.tzt](compare_timestamp_05.tzt)

Missing edge cases:

- No comparison of negative integers
- No comparison for `0 int`
- No comparison for `0 mutez`
- No comparison for `0 nat`
- Only zero- or single-character strings are compared

Duplicate files:

- `compare_mutez_03.tzt` is a duplicate of `compare_mutez_00.tzt`
- `compare_nat_03.tzt` is a duplicate of `compare_nat_00.tzt`

Types `COMPARE` isn't tested for:

- `address`
- `chain_id`
- `key`
- `signature`
- `timestamp`
- `unit`
- `or`
- `option`

### `EDIV: nat : nat`

***None***

### `EDIV: nat : int`

***None***

### `EDIV: int : nat`

***None***

### `EDIV: int : int`

- [ediv_int-int_00.tzt](ediv_int-int_00.tzt)
- [ediv_int-int_01.tzt](ediv_int-int_01.tzt)
- [ediv_int-int_02.tzt](ediv_int-int_02.tzt)
- [ediv_int-int_03.tzt](ediv_int-int_03.tzt)

Missing edge cases:

- No division of positive over positive
- No division of negative over negative
- No division of zero over non-zero
- No division of zero over zero
- No division with the result of 1

### `EDIV: mutez : nat`

- [ediv_mutez-nat_00.tzt](ediv_mutez-nat_00.tzt)
- [ediv_mutez-nat_01.tzt](ediv_mutez-nat_01.tzt)
- [ediv_mutez-nat_02.tzt](ediv_mutez-nat_02.tzt)
- [ediv_mutez-nat_03.tzt](ediv_mutez-nat_03.tzt)
- [ediv_mutez-nat_04.tzt](ediv_mutez-nat_04.tzt)
- [ediv_mutez-nat_05.tzt](ediv_mutez-nat_05.tzt)
- [ediv_mutez-nat_06.tzt](ediv_mutez-nat_06.tzt)

### `EDIV: mutez : mutez`

- [ediv_mutez-mutez_00.tzt](ediv_mutez-mutez_00.tzt)
- [ediv_mutez-mutez_01.tzt](ediv_mutez-mutez_01.tzt)
- [ediv_mutez-mutez_02.tzt](ediv_mutez-mutez_02.tzt)
- [ediv_mutez-mutez_03.tzt](ediv_mutez-mutez_03.tzt)

Missing edge cases:

- No division of zero over non-zero
- No division of zero over zero

### `EQ`

- [eq_00.tzt](eq_00.tzt)
- [eq_01.tzt](eq_01.tzt)
- [eq_02.tzt](eq_02.tzt)
- [eq_03.tzt](eq_03.tzt)
- [eq_04.tzt](eq_04.tzt)

### `GE`

- [ge_00.tzt](ge_00.tzt)
- [ge_01.tzt](ge_01.tzt)
- [ge_02.tzt](ge_02.tzt)
- [ge_03.tzt](ge_03.tzt)
- [ge_04.tzt](ge_04.tzt)

### `GT`

- [gt_00.tzt](gt_00.tzt)
- [gt_01.tzt](gt_01.tzt)
- [gt_02.tzt](gt_02.tzt)
- [gt_03.tzt](gt_03.tzt)
- [gt_04.tzt](gt_04.tzt)

### `INT: nat`

- [int_nat_00.tzt](int_nat_00.tzt)
- [int_nat_01.tzt](int_nat_01.tzt)

### `INT: bls12_381_fr`

***None***

### `INT: bytes`

***None***

### `ISNAT`

- [isnat_00.tzt](isnat_00.tzt)
- [isnat_01.tzt](isnat_01.tzt)

Missing edge cases:

- Only tests `0` and `-1`, missing tests for positive integers.

### `LE`

- [le_00.tzt](le_00.tzt)
- [le_01.tzt](le_01.tzt)
- [le_02.tzt](le_02.tzt)
- [le_03.tzt](le_03.tzt)
- [le_04.tzt](le_04.tzt)

### `LSL: nat : nat`

- [lsl_00.tzt](lsl_00.tzt)
- [lsl_01.tzt](lsl_01.tzt)
- [lsl_02.tzt](lsl_02.tzt)
- [lsl_03.tzt](lsl_03.tzt)
- [lsl_04.tzt](lsl_04.tzt)
- [lsl_05.tzt](lsl_05.tzt)
- [lsl_06.tzt](lsl_06.tzt)

Missing edge cases:

- No zero shift test for non-zero argument

### `LSL: bytes : nat`

***None***

### `LSR: nat : nat`

- [lsr_00.tzt](lsr_00.tzt)
- [lsr_01.tzt](lsr_01.tzt)
- [lsr_02.tzt](lsr_02.tzt)
- [lsr_03.tzt](lsr_03.tzt)
- [lsr_04.tzt](lsr_04.tzt)
- [lsr_05.tzt](lsr_05.tzt)

Missing edge cases:

- No zero shift test for non-zero argument

### `LSR: bytes : nat`

***None***

### `LT`

- [lt_00.tzt](lt_00.tzt)
- [lt_01.tzt](lt_01.tzt)
- [lt_02.tzt](lt_02.tzt)
- [lt_03.tzt](lt_03.tzt)
- [lt_04.tzt](lt_04.tzt)

### `MUL: nat : nat`

- [mul_nat-nat_00.tzt](mul_nat-nat_00.tzt)

Missing edge cases:

- No multiplication by zero (both from left and right)

### `MUL: nat : int`

- [mul_nat-int_00.tzt](mul_nat-int_00.tzt)

Missing edge cases:

- No multiplication by zero (both from left and right)
- No multiplication by positive int

### `MUL: int : nat`

- [mul_int-nat_00.tzt](mul_int-nat_00.tzt)

Missing edge cases:

- No multiplication by zero (both from left and right)
- No multiplication by negative int

### `MUL: int : int`

- [mul_int-int_00.tzt](mul_int-int_00.tzt)

Missing edge cases:

- No multiplication by zero (both from left and right)
- No multiplication of two negatives
- No multiplication of two positives
- No multiplication of negative by positive

### `MUL: mutez : nat`

- [mul_mutez-nat_00.tzt](mul_mutez-nat_00.tzt)
- [mul_mutez-nat_01.tzt](mul_mutez-nat_01.tzt)

Missing edge cases:

- No multiplication by zero (both from left and right)

### `MUL: nat : mutez`

- [mul_nat-mutez_00.tzt](mul_nat-mutez_00.tzt)
- [mul_nat-mutez_01.tzt](mul_nat-mutez_01.tzt)

Missing edge cases:

- No multiplication by zero (both from left and right)

### `MUL: bls12_381_g1 : bls12_381_fr`

***None***

### `MUL: bls12_381_g2 : bls12_381_fr`

***None***

### `MUL: bls12_381_fr : bls12_381_fr`

***None***

### `MUL: nat : bls12_381_fr`

***None***

### `MUL: int : bls12_381_fr`

***None***

### `MUL: bls12_381_fr : nat`

***None***

### `MUL: bls12_381_fr : int`

***None***

### `NAT`

***None***

### `NEG: nat`

- [neg_nat_00.tzt](neg_nat_00.tzt)
- [neg_nat_01.tzt](neg_nat_01.tzt)

### `NEG: int`

- [neg_int_00.tzt](neg_int_00.tzt)
- [neg_int_01.tzt](neg_int_01.tzt)
- [neg_int_02.tzt](neg_int_02.tzt)

### `NEG: bls12_381_g1`

***None***

### `NEG: bls12_381_g2`

***None***

### `NEG: bls12_381_fr`

***None***

### `NEQ`

- [neq_00.tzt](neq_00.tzt)
- [neq_01.tzt](neq_01.tzt)
- [neq_02.tzt](neq_02.tzt)
- [neq_03.tzt](neq_03.tzt)
- [neq_04.tzt](neq_04.tzt)

### `SUB: nat : nat`

***None***

### `SUB: nat : int`

***None***

### `SUB: int : nat`

***None***

### `SUB: int : int`

- [sub_int-int_00.tzt](sub_int-int_00.tzt)
- [sub_int-int_01.tzt](sub_int-int_01.tzt)

Missing edge cases:

- No subtraction of 0
- No subtraction from 0
- No subtraction of negative integers

### `SUB: timestamp : int`

- [sub_timestamp-int_00.tzt](sub_timestamp-int_00.tzt)
- [sub_timestamp-int_01.tzt](sub_timestamp-int_01.tzt)
- [sub_timestamp-int_02.tzt](sub_timestamp-int_02.tzt)
- [sub_timestamp-int_03.tzt](sub_timestamp-int_03.tzt)
- [sub_timestamp-int_04.tzt](sub_timestamp-int_04.tzt)

Missing edge cases:

- No subtraction of zero
- No subtraction from zero

### `SUB: timestamp : timestamp`

- [sub_timestamp-timestamp_00.tzt](sub_timestamp-timestamp_00.tzt)
- [sub_timestamp-timestamp_01.tzt](sub_timestamp-timestamp_01.tzt)
- [sub_timestamp-timestamp_02.tzt](sub_timestamp-timestamp_02.tzt)
- [sub_timestamp-timestamp_03.tzt](sub_timestamp-timestamp_03.tzt)

Missing edge cases:

- No test for realistic timestamps producing negative difference

### `SUB_MUTEZ`

***None***, but there are tests for the deprecated `SUB: mutez : mutez`:

- [sub_mutez-mutez_00.tzt](sub_mutez-mutez_00.tzt)
- [sub_mutez-mutez_01.tzt](sub_mutez-mutez_01.tzt)

## Boolean operations

### `AND bool:bool`

- [and_bool-bool_00.tzt](and_bool-bool_00.tzt)
- [and_bool-bool_01.tzt](and_bool-bool_01.tzt)
- [and_bool-bool_02.tzt](and_bool-bool_02.tzt)
- [and_bool-bool_03.tzt](and_bool-bool_03.tzt)

### `AND nat:nat`

- [and_nat-nat_00.tzt](and_nat-nat_00.tzt)
- [and_nat-nat_01.tzt](and_nat-nat_01.tzt)
- [and_nat-nat_02.tzt](and_nat-nat_02.tzt)

Missing edge cases:

- One argument is `0` (both from left and right)
- Result is `0` with non-zero arguments

### `AND int:nat`

- [and_int-nat_00.tzt](and_int-nat_00.tzt)
- [and_int-nat_01.tzt](and_int-nat_01.tzt)
- [and_int-nat_02.tzt](and_int-nat_02.tzt)
- [and_int-nat_03.tzt](and_int-nat_03.tzt)
- [and_int-nat_04.tzt](and_int-nat_04.tzt)
- [and_int-nat_05.tzt](and_int-nat_05.tzt)
- [and_int-nat_06.tzt](and_int-nat_06.tzt)

### `AND: bytes:bytes`

- [and_bytes-bytes_00.tzt](and_bytes-bytes_00.tzt)
- [and_bytes-bytes_01.tzt](and_bytes-bytes_01.tzt)
- [and_bytes-bytes_02.tzt](and_bytes-bytes_02.tzt)
- [and_bytes-bytes_03.tzt](and_bytes-bytes_03.tzt)
- [and_bytes-bytes_04.tzt](and_bytes-bytes_04.tzt)
- [and_bytes-bytes_05.tzt](and_bytes-bytes_05.tzt)
- [and_bytes-bytes_06.tzt](and_bytes-bytes_06.tzt)

### `NOT: bool`

- [not_bool_00.tzt](not_bool_00.tzt)
- [not_bool_01.tzt](not_bool_01.tzt)

### `NOT: nat`

- [not_nat_00.tzt](not_nat_00.tzt)
- [not_nat_01.tzt](not_nat_01.tzt)
- [not_nat_02.tzt](not_nat_02.tzt)

### `NOT: int`

- [not_int_00.tzt](not_int_00.tzt)
- [not_nat_03.tzt](not_nat_03.tzt)
- [not_nat_04.tzt](not_nat_04.tzt)
- [not_nat_05.tzt](not_nat_05.tzt)
- [not_nat_06.tzt](not_nat_06.tzt)
- [not_nat_07.tzt](not_nat_07.tzt)

Files do not follow naming convention.

### `NOT: bytes`

- [not_bytes_00.tzt](not_bytes_00.tzt)
- [not_bytes_01.tzt](not_bytes_01.tzt)
- [not_bytes_02.tzt](not_bytes_02.tzt)
- [not_bytes_03.tzt](not_bytes_03.tzt)
- [not_bytes_04.tzt](not_bytes_04.tzt)
- [not_bytes_05.tzt](not_bytes_05.tzt)

### `OR bool:bool`

- [or_bool-bool_00.tzt](or_bool-bool_00.tzt)
- [or_bool-bool_01.tzt](or_bool-bool_01.tzt)
- [or_bool-bool_02.tzt](or_bool-bool_02.tzt)
- [or_bool-bool_03.tzt](or_bool-bool_03.tzt)

### `OR nat:nat`

- [or_nat-nat_00.tzt](or_nat-nat_00.tzt)
- [or_nat-nat_01.tzt](or_nat-nat_01.tzt)
- [or_nat-nat_02.tzt](or_nat-nat_02.tzt)
- [or_nat-nat_03.tzt](or_nat-nat_03.tzt)
- [or_nat-nat_04.tzt](or_nat-nat_04.tzt)
- [or_nat-nat_05.tzt](or_nat-nat_05.tzt)
- [or_nat-nat_06.tzt](or_nat-nat_06.tzt)

### `OR bytes`

- [or_bytes-bytes_00.tzt](or_bytes-bytes_00.tzt)
- [or_bytes-bytes_01.tzt](or_bytes-bytes_01.tzt)
- [or_bytes-bytes_02.tzt](or_bytes-bytes_02.tzt)
- [or_bytes-bytes_03.tzt](or_bytes-bytes_03.tzt)
- [or_bytes-bytes_04.tzt](or_bytes-bytes_04.tzt)
- [or_bytes-bytes_05.tzt](or_bytes-bytes_05.tzt)
- [or_bytes-bytes_06.tzt](or_bytes-bytes_06.tzt)

### `XOR: bool:bool`

- [xor_bool-bool_00.tzt](xor_bool-bool_00.tzt)
- [xor_bool-bool_01.tzt](xor_bool-bool_01.tzt)
- [xor_bool-bool_02.tzt](xor_bool-bool_02.tzt)
- [xor_bool-bool_03.tzt](xor_bool-bool_03.tzt)

### `XOR: nat:nat`

- [xor_nat-nat_00.tzt](xor_nat-nat_00.tzt)
- [xor_nat-nat_01.tzt](xor_nat-nat_01.tzt)
- [xor_nat-nat_02.tzt](xor_nat-nat_02.tzt)
- [xor_nat-nat_03.tzt](xor_nat-nat_03.tzt)
- [xor_nat-nat_04.tzt](xor_nat-nat_04.tzt)
- [xor_nat-nat_05.tzt](xor_nat-nat_05.tzt)
- [xor_nat-nat_06.tzt](xor_nat-nat_06.tzt)

### `XOR: bytes:bytes`

- [xor_bytes-bytes_00.tzt](xor_bytes-bytes_00.tzt)
- [xor_bytes-bytes_01.tzt](xor_bytes-bytes_01.tzt)
- [xor_bytes-bytes_02.tzt](xor_bytes-bytes_02.tzt)
- [xor_bytes-bytes_03.tzt](xor_bytes-bytes_03.tzt)
- [xor_bytes-bytes_04.tzt](xor_bytes-bytes_04.tzt)
- [xor_bytes-bytes_05.tzt](xor_bytes-bytes_05.tzt)
- [xor_bytes-bytes_06.tzt](xor_bytes-bytes_06.tzt)

## Data structure manipulation

### `CAR`

- [car_00.tzt](car_00.tzt)
- [car_01.tzt](car_01.tzt)

### `CDR`

- [cdr_00.tzt](cdr_00.tzt)
- [cdr_01.tzt](cdr_01.tzt)

### `CONCAT: string : string`

- [concat_string_00.tzt](concat_string_00.tzt)
- [concat_string_01.tzt](concat_string_01.tzt)
- [concat_string_02.tzt](concat_string_02.tzt)

### `CONCAT: list string`

- [concat_liststring_00.tzt](concat_liststring_00.tzt)
- [concat_liststring_01.tzt](concat_liststring_01.tzt)
- [concat_liststring_02.tzt](concat_liststring_02.tzt)
- [concat_liststring_03.tzt](concat_liststring_03.tzt)
- [concat_liststring_04.tzt](concat_liststring_04.tzt)

### `CONCAT: bytes : bytes`

- [concat_bytes_00.tzt](concat_bytes_00.tzt)
- [concat_bytes_01.tzt](concat_bytes_01.tzt)

### `CONCAT: list bytes`

- [concat_listbytes_00.tzt](concat_listbytes_00.tzt)
- [concat_listbytes_01.tzt](concat_listbytes_01.tzt)
- [concat_listbytes_02.tzt](concat_listbytes_02.tzt)

### `CONS`

- [cons_int_00.tzt](cons_int_00.tzt)
- [cons_int_01.tzt](cons_int_01.tzt)
- [cons_int_02.tzt](cons_int_02.tzt)
- [cons_string_00.tzt](cons_string_00.tzt)

### `EMPTY_BIG_MAP`

- [emptybigmap_nat-nat_00.tzt](emptybigmap_nat-nat_00.tzt)

### `EMPTY_MAP`

- [emptymap_nat-nat_00.tzt](emptymap_nat-nat_00.tzt)
- [emptymap_string-string_00.tzt](emptymap_string-string_00.tzt)

### `EMPTY_SET`

- [emptyset_nat_00.tzt](emptyset_nat_00.tzt)

### `GET: kty : map kty vty`

- [get_mapintint_00.tzt](get_mapintint_00.tzt)
- [get_mapintint_01.tzt](get_mapintint_01.tzt)
- [get_mapstringstring_00.tzt](get_mapstringstring_00.tzt)
- [get_mapstringstring_01.tzt](get_mapstringstring_01.tzt)
- [get_mapstringstring_02.tzt](get_mapstringstring_02.tzt)

### `GET: kty : big_map kty vty`

- [get_bigmapstringstring_00.tzt](get_bigmapstringstring_00.tzt)
- [get_bigmapstringstring_01.tzt](get_bigmapstringstring_01.tzt)
- [get_bigmapstringstring_02.tzt](get_bigmapstringstring_02.tzt)

### `GET n`

***None***

### `GET_AND_UPDATE: kty : option vty : map kty vty`

***None***

### `GET_AND_UPDATE: kty : option vty : big_map kty vty`

***None***

### `ITER: list ty`

- [iter_listint_00.tzt](iter_listint_00.tzt)
- [iter_listint_01.tzt](iter_listint_01.tzt)
- [iter_listint_02.tzt](iter_listint_02.tzt)
- [iter_listint_03.tzt](iter_listint_03.tzt)
- [iter_liststring_00.tzt](iter_liststring_00.tzt)
- [iter_liststring_01.tzt](iter_liststring_01.tzt)

### `ITER: set cty`

- [iter_setint_00.tzt](iter_setint_00.tzt)
- [iter_setint_01.tzt](iter_setint_01.tzt)
- [iter_setint_02.tzt](iter_setint_02.tzt)
- [iter_setstring_00.tzt](iter_setstring_00.tzt)
- [iter_setstring_01.tzt](iter_setstring_01.tzt)
- [iter_setstring_02.tzt](iter_setstring_02.tzt)

### `ITER: map kty vty`

- [iter_mapintint_00.tzt](iter_mapintint_00.tzt)
- [iter_mapintint_01.tzt](iter_mapintint_01.tzt)
- [iter_mapintint_02.tzt](iter_mapintint_02.tzt)
- [iter_mapintint_03.tzt](iter_mapintint_03.tzt)
- [iter_mapintint_04.tzt](iter_mapintint_04.tzt)
- [iter_mapstringstring_00.tzt](iter_mapstringstring_00.tzt)

### `LEFT`

- [left_int-nat_00.tzt](left_int-nat_00.tzt)

### `MAP: list ty`

- [map_listint_00.tzt](map_listint_00.tzt)
- [map_listint_01.tzt](map_listint_01.tzt)
- [map_listint_02.tzt](map_listint_02.tzt)
- [map_listint_03.tzt](map_listint_03.tzt)
- [map_listint_04.tzt](map_listint_04.tzt)
- [map_listint_05.tzt](map_listint_05.tzt)
- [map_listint_06.tzt](map_listint_06.tzt)
- [map_liststring_00.tzt](map_liststring_00.tzt)
- [map_liststring_01.tzt](map_liststring_01.tzt)
- [map_liststring_02.tzt](map_liststring_02.tzt)
- [map_liststring_04.tzt](map_liststring_04.tzt)
- [map_liststring_05.tzt](map_liststring_05.tzt)
- [map_liststring_06.tzt](map_liststring_06.tzt)
- [map_liststring_07.tzt](map_liststring_07.tzt)
- [map_liststring_08.tzt](map_liststring_08.tzt)

### `MAP: option ty`

***None***

### `MAP: map kty ty1`

- [map_mapintint_00.tzt](map_mapintint_00.tzt)
- [map_mapintint_01.tzt](map_mapintint_01.tzt)
- [map_mapintstring_00.tzt](map_mapintstring_00.tzt)
- [map_mapintstring_01.tzt](map_mapintstring_01.tzt)
- [map_mapstringnat_00.tzt](map_mapstringnat_00.tzt)
- [map_mapstringnat_01.tzt](map_mapstringnat_01.tzt)
- [map_mapstringnat_02.tzt](map_mapstringnat_02.tzt)

### `MEM: cty : set cty`

- [mem_setint_00.tzt](mem_setint_00.tzt)
- [mem_setint_01.tzt](mem_setint_01.tzt)
- [mem_setstring_00.tzt](mem_setstring_00.tzt)
- [mem_setstring_01.tzt](mem_setstring_01.tzt)
- [mem_setstring_02.tzt](mem_setstring_02.tzt)

### `MEM: kty : map kty vty`

- [mem_mapintint_00.tzt](mem_mapintint_00.tzt)
- [mem_mapnatnat_00.tzt](mem_mapnatnat_00.tzt)
- [mem_mapnatnat_01.tzt](mem_mapnatnat_01.tzt)
- [mem_mapnatnat_02.tzt](mem_mapnatnat_02.tzt)
- [mem_mapnatnat_03.tzt](mem_mapnatnat_03.tzt)
- [mem_mapnatnat_04.tzt](mem_mapnatnat_04.tzt)
- [mem_mapnatnat_05.tzt](mem_mapnatnat_05.tzt)
- [mem_mapstringnat_00.tzt](mem_mapstringnat_00.tzt)
- [mem_mapstringnat_01.tzt](mem_mapstringnat_01.tzt)
- [mem_mapstringnat_02.tzt](mem_mapstringnat_02.tzt)
- [mem_mapstringnat_03.tzt](mem_mapstringnat_03.tzt)
- [mem_mapstringnat_04.tzt](mem_mapstringnat_04.tzt)
- [mem_mapstringnat_05.tzt](mem_mapstringnat_05.tzt)

### `MEM: kty : big_map kty vty`

- [mem_bigmapnatnat_00.tzt](mem_bigmapnatnat_00.tzt)
- [mem_bigmapnatnat_01.tzt](mem_bigmapnatnat_01.tzt)
- [mem_bigmapnatnat_02.tzt](mem_bigmapnatnat_02.tzt)
- [mem_bigmapnatnat_03.tzt](mem_bigmapnatnat_03.tzt)
- [mem_bigmapnatnat_04.tzt](mem_bigmapnatnat_04.tzt)
- [mem_bigmapnatnat_05.tzt](mem_bigmapnatnat_05.tzt)
- [mem_bigmapstringnat_00.tzt](mem_bigmapstringnat_00.tzt)
- [mem_bigmapstringnat_01.tzt](mem_bigmapstringnat_01.tzt)
- [mem_bigmapstringnat_02.tzt](mem_bigmapstringnat_02.tzt)
- [mem_bigmapstringnat_03.tzt](mem_bigmapstringnat_03.tzt)
- [mem_bigmapstringnat_04.tzt](mem_bigmapstringnat_04.tzt)
- [mem_bigmapstringnat_05.tzt](mem_bigmapstringnat_05.tzt)

### `NEVER`

- [never_00.tzt](never_00.tzt)

### `NIL`

- [nil_nat_00.tzt](nil_nat_00.tzt)

### `NONE`

- [none_int_00.tzt](none_int_00.tzt)
- [none_pair-nat-string.tzt](none_pair-nat-string.tzt)

### `PACK`

- `pack_*.tzt`
- [packunpack_address_00.tzt](packunpack_address_00.tzt)
- [packunpack_bool_00.tzt](packunpack_bool_00.tzt)
- [packunpack_bytes_00.tzt](packunpack_bytes_00.tzt)
- [packunpack_int_00.tzt](packunpack_int_00.tzt)
- [packunpack_keyhash_00.tzt](packunpack_keyhash_00.tzt)
- [packunpack_mutez_00.tzt](packunpack_mutez_00.tzt)
- [packunpack_nat_00.tzt](packunpack_nat_00.tzt)
- [packunpack_string_00.tzt](packunpack_string_00.tzt)
- [packunpack_timestamp_00.tzt](packunpack_timestamp_00.tzt)

Only few value types are covered.

Among tests on values serialization:
- Addresses with entrypoints are not covered.

### `PAIR`

- [pair_int-int_00.tzt](pair_int-int_00.tzt)
- [pair_nat-string_00.tzt](pair_nat-string_00.tzt)
- [pair_pair-nat-string-pair-string-nat_00.tzt](pair_pair-nat-string-pair-string-nat_00.tzt)

### `PAIR n`

***None***

### `RIGHT`

- [right_nat-int_00.tzt](right_nat-int_00.tzt)

### `SIZE: set cty`

- [size_setint_00.tzt](size_setint_00.tzt)
- [size_setint_01.tzt](size_setint_01.tzt)
- [size_setint_02.tzt](size_setint_02.tzt)
- [size_setint_03.tzt](size_setint_03.tzt)
- [size_setstring_00.tzt](size_setstring_00.tzt)

### `SIZE: map kty vty`

- [size_mapintint_00.tzt](size_mapintint_00.tzt)
- [size_mapstringnat_00.tzt](size_mapstringnat_00.tzt)
- [size_mapstringnat_01.tzt](size_mapstringnat_01.tzt)
- [size_mapstringnat_02.tzt](size_mapstringnat_02.tzt)
- [size_mapstringnat_03.tzt](size_mapstringnat_03.tzt)

### `SIZE: list ty`

- [size_listint_00.tzt](size_listint_00.tzt)
- [size_listint_01.tzt](size_listint_01.tzt)
- [size_listint_02.tzt](size_listint_02.tzt)
- [size_listint_03.tzt](size_listint_03.tzt)

### `SIZE: string`

- [size_string_00.tzt](size_string_00.tzt)

### `SIZE: bytes`

- [size_bytes_00.tzt](size_bytes_00.tzt)

### `SLICE: nat : nat : string`

- [slice_string_00.tzt](slice_string_00.tzt)
- [slice_string_01.tzt](slice_string_01.tzt)
- [slice_string_02.tzt](slice_string_02.tzt)
- [slice_string_03.tzt](slice_string_03.tzt)
- [slice_string_04.tzt](slice_string_04.tzt)
- [slice_string_05.tzt](slice_string_05.tzt)

### `SLICE: nat : nat : bytes`

- [slice_bytes_00.tzt](slice_bytes_00.tzt)
- [slice_bytes_01.tzt](slice_bytes_01.tzt)
- [slice_bytes_02.tzt](slice_bytes_02.tzt)
- [slice_bytes_03.tzt](slice_bytes_03.tzt)
- [slice_bytes_04.tzt](slice_bytes_04.tzt)

### `SOME`

- [some_int_00.tzt](some_int_00.tzt)
- [some_pairintint_00.tzt](some_pairintint_00.tzt)
- [some_string_00.tzt](some_string_00.tzt)

### `UNIT`

- [unit_00.tzt](unit_00.tzt)

### `UNPACK`

- [packunpack_address_00.tzt](packunpack_address_00.tzt)
- [packunpack_bool_00.tzt](packunpack_bool_00.tzt)
- [packunpack_bytes_00.tzt](packunpack_bytes_00.tzt)
- [packunpack_int_00.tzt](packunpack_int_00.tzt)
- [packunpack_keyhash_00.tzt](packunpack_keyhash_00.tzt)
- [packunpack_mutez_00.tzt](packunpack_mutez_00.tzt)
- [packunpack_nat_00.tzt](packunpack_nat_00.tzt)
- [packunpack_string_00.tzt](packunpack_string_00.tzt)
- [packunpack_timestamp_00.tzt](packunpack_timestamp_00.tzt)

Tested only with conjunction with `PACK`

### `UNPAIR`

- [unpair_pairstringstring_00.tzt](unpair_pairstringstring_00.tzt)

### `UPDATE: cty : bool : set cty`

- [update_setint_00.tzt](update_setint_00.tzt)
- [update_setint_01.tzt](update_setint_01.tzt)
- [update_setint_02.tzt](update_setint_02.tzt)

### `UPDATE: kty : option vty : map kty vty`

- [update_mapintint_00.tzt](update_mapintint_00.tzt)
- [update_mapintint_01.tzt](update_mapintint_01.tzt)

### `UPDATE: kty : option vty : big_map kty vty`

- [update_bigmapstringstring_00.tzt](update_bigmapstringstring_00.tzt)
- [update_bigmapstringstring_01.tzt](update_bigmapstringstring_01.tzt)
- [update_bigmapstringstring_02.tzt](update_bigmapstringstring_02.tzt)
- [update_bigmapstringstring_03.tzt](update_bigmapstringstring_03.tzt)
- [update_bigmapstringstring_04.tzt](update_bigmapstringstring_04.tzt)
- [update_bigmapstringstring_05.tzt](update_bigmapstringstring_05.tzt)
- [update_bigmapstringstring_06.tzt](update_bigmapstringstring_06.tzt)
- [update_bigmapstringstring_07.tzt](update_bigmapstringstring_07.tzt)

### `UPDATE n`

***None***

## Ticket manipulation

### `JOIN_TICKETS`

- [join_tickets_00.tzt](join_tickets_00.tzt)
- [join_tickets_01.tzt](join_tickets_01.tzt)
- [join_tickets_02.tzt](join_tickets_02.tzt)
- [join_tickets_03.tzt](join_tickets_03.tzt)

### `READ_TICKET`

- [read_ticket_00.tzt](read_ticket_00.tzt)

### `SPLIT_TICKET`

- [split_ticket_00.tzt](split_ticket_00.tzt)
- [split_ticket_01.tzt](split_ticket_01.tzt)
- [split_ticket_02.tzt](split_ticket_02.tzt)
- [split_ticket_03.tzt](split_ticket_03.tzt)
- [split_ticket_04.tzt](split_ticket_04.tzt)

### `TICKET`

- [ticket_00.tzt](ticket_00.tzt)
- [ticket_01.tzt](ticket_01.tzt)

## Cryptographic operations

Not covered

### `BLAKE2B`

- [blake2b_00.tzt](blake2b_00.tzt)
- [blake2b_01.tzt](blake2b_01.tzt)

### `CHECK_SIGNATURE`

- [checksignature_00.tzt](checksignature_00.tzt)
- [checksignature_01.tzt](checksignature_01.tzt)

Does not check different types of key.

### `HASH_KEY`

***None***

### `KECCAK`

- [keccak_00.tzt](keccak_00.tzt)
- [keccak_01.tzt](keccak_01.tzt)

### `PAIRING_CHECK`

***None***

### `SAPLING_EMPTY_STATE ms`

***None***

### `SAPLING_VERIFY_UPDATE`

***None***

### `SHA256`

- [sha256_00.tzt](sha256_00.tzt)
- [sha256_01.tzt](sha256_01.tzt)

### `SHA3`

- [sha3_00.tzt](sha3_00.tzt)
- [sha3_01.tzt](sha3_01.tzt)

### `SHA512`

- [sha512_00.tzt](sha512_00.tzt)
- [sha512_01.tzt](sha512_01.tzt)

## Blockchain operations

### `ADDRESS`

- [address_00.tzt](address_00.tzt)
- [address_01.tzt](address_01.tzt) -- on implicit contract
- [address_02.tzt](address_02.tzt)

### `AMOUNT`

- [amount_00.tzt](amount_00.tzt)

### `BALANCE`

- [balance_00.tzt](balance_00.tzt)

### `CHAIN_ID`

- [chain_id_00.tzt](chain_id_00.tzt)
- [chain_id_01.tzt](chain_id_01.tzt)

### `CONTRACT`

Note: invariants are taken from the table in <https://tezos.gitlab.io/michelson-reference/#instr-CONTRACT> section, copied below for posterity.

- [contract_00.tzt](contract_00.tzt) -- valid_contract_type "addr" t holds
- [contract_01.tzt](contract_01.tzt) -- no_contract "addr" holds
- [contract_02.tzt](contract_02.tzt) -- invalid_contract_type "addr" t holds
- [contract_03.tzt](contract_03.tzt) -- valid_contract_type "addr" t holds
- [contract_04.tzt](contract_04.tzt) -- valid_contract_type "addr" t holds on implicit contract
- [contract_05.tzt](contract_05.tzt) -- no_contract "addr" holds

No tests with entrypoints (the cases represented by rows 3, 4, 5, 6, 7, 9, 10 from the table are not covered)

```
+---------------+---------------------+------------------------------------------+-------------------------------------------------+
| input address | instruction         | output contract                          | predicate                                       |
+---------------+---------------------+------------------------------------------+-------------------------------------------------+
| "addr"        | CONTRACT t          | None if addr does not exist              | no_contract "addr" holds                        |
+---------------+---------------------+------------------------------------------+-------------------------------------------------+
| "addr"        | CONTRACT t          | None if addr exists, but has a default   | invalid_contract_type "addr" t holds            |
|               |                     | entrypoint not of type t, or has no      |                                                 |
|               |                     | default entrypoint and parameter is not  |                                                 |
|               |                     | of type t                                |                                                 |
+---------------+---------------------+------------------------------------------+-------------------------------------------------+
| "addr%name"   | CONTRACT t          | None if addr does not exist, or exists   | no_contract "addr%name" holds                   |
|               |                     | but does not have a "name" entrypoint    |                                                 |
+---------------+---------------------+                                          |                                                 |
| "addr"        | CONTRACT %name t    |                                          |                                                 |
|               |                     |                                          |                                                 |
+---------------+---------------------+------------------------------------------+-------------------------------------------------+
| "addr%name"   | CONTRACT t          | None if addr exists, but has an          | invalid_contract_type "addr%name" t holds       |
|               |                     | entrypoint %name not of type t           |                                                 |
+---------------+---------------------+                                          |                                                 |
| "addr"        | CONTRACT %name t    |                                          |                                                 |
+---------------+---------------------+------------------------------------------+-------------------------------------------------+
| "addr%name1"  | CONTRACT %name2 t   | None                                     | entrypoint_ambiguity "addr%name1" "name2" holds |
+---------------+---------------------+------------------------------------------+-------------------------------------------------+
| "addr"        | CONTRACT t          | (Some "addr") if contract exists, has a  | valid_contract_type "addr" t holds              |
|               |                     | default entrypoint of type t, or has no  |                                                 |
|               |                     | default entrypoint and parameter type t  |                                                 |
+---------------+---------------------+------------------------------------------+-------------------------------------------------+
| "addr%name"   | CONTRACT t          | (Some "addr%name") if addr exists and    | valid_contract_type "addr%name" t holds         |
+---------------+---------------------+ has an entrypoint %name of type t        |                                                 |
| "addr"        | CONTRACT %name t    |                                          |                                                 |
+---------------+---------------------+------------------------------------------+-------------------------------------------------+
```

### `CREATE_CONTRACT`

- [createcontract_00.tzt](createcontract_00.tzt)
- [createcontract_01.tzt](createcontract_01.tzt)

### `EMIT`

***None***

### `IMPLICIT_ACCOUNT`

- [implicitaccount_00.tzt](implicitaccount_00.tzt)

### `LEVEL`

***None***

TZT format doesn't have the necessary field(s) to set the return value of `LEVEL` instruction

### `MIN_BLOCK_TIME`

***None***

TZT format doesn't have the necessary field(s) to set the return value of
`MIN_BLOCK_TIME` instruction

### `NOW`

- [now_00.tzt](now_00.tzt)

### `SELF`

- [self_00.tzt](self_00.tzt)

### `SELF_ADDRESS`

***None***

### `SENDER`

- [sender_00.tzt](sender_00.tzt)

It would be nice to add test where the result of `SOURCE` isn't equal to the result of `SENDER`

### `SET_DELEGATE`

- [setdelegate_00.tzt](setdelegate_00.tzt)

No test with `None` parameter

### `SOURCE`

- [source_00.tzt](source_00.tzt)

### `TOTAL_VOTING_POWER`

***None***

TZT format doesn't have the necessary field(s) to set the return value of
`TOTAL_VOTING_POWER` instruction

### `TRANSFER_TOKENS`

- [transfertokens_00.tzt](transfertokens_00.tzt)
- [transfertokens_01.tzt](transfertokens_01.tzt)

### `VIEW`

***None***

### `VOTING_POWER`

***None***

TZT format doesn't have the necessary field(s) to set the return value of
`VOTING_POWER` instruction

## Missing tests summary

There are no tests for ill-typed code.

Instructions with no tests:

- `{}`
- `ADD: bls12_381_fr : bls12_381_fr`
- `ADD: bls12_381_g1 : bls12_381_g1`
- `ADD: bls12_381_g2 : bls12_381_g2`
- `AND: bytes:bytes`
- `BYTES: int`
- `BYTES: nat`
- `CHECK_SIGNATURE`
- `COMPARE: address : address`
- `COMPARE: chain_id : chain_id`
- `COMPARE: key : key`
- `COMPARE: option _ : option _`
- `COMPARE: or _ _ : or _ _`
- `COMPARE: signature : signature`
- `COMPARE: timestamp : timestamp`
- `COMPARE: unit : unit`
- `DUP n`
- `DUP`
- `EDIV: int : nat`
- `EDIV: nat : int`
- `EDIV: nat : nat`
- `EMIT`
- `GET n`
- `GET_AND_UPDATE: kty : option vty : big_map kty vty`
- `GET_AND_UPDATE: kty : option vty : map kty vty`
- `HASH_KEY`
- `INT: bls12_381_fr`
- `INT: bytes`
- `JOIN_TICKETS`
- `LAMBDA_REC`
- `LAMBDA`
- `LEVEL`
- `LSL: bytes : nat`
- `LSR: bytes : nat`
- `MAP: option ty`
- `MIN_BLOCK_TIME`
- `MUL: bls12_381_fr : bls12_381_fr`
- `MUL: bls12_381_fr : int`
- `MUL: bls12_381_fr : nat`
- `MUL: bls12_381_g1 : bls12_381_fr`
- `MUL: bls12_381_g2 : bls12_381_fr`
- `MUL: int : bls12_381_fr`
- `MUL: nat : bls12_381_fr`
- `NAT`
- `NEG: bls12_381_fr`
- `NEG: bls12_381_g1`
- `NEG: bls12_381_g2`
- `NOT: bytes`
- `OR bytes`
- `PAIR n`
- `PAIRING_CHECK`
- `READ_TICKET`
- `SAPLING_EMPTY_STATE ms`
- `SAPLING_VERIFY_UPDATE`
- `SELF_ADDRESS`
- `SPLIT_TICKET`
- `SUB_MUTEZ`
- `SUB: int : nat`
- `SUB: nat : int`
- `SUB: nat : nat`
- `SWAP`
- `TICKET`
- `TOTAL_VOTING_POWER`
- `UPDATE n`
- `VIEW`
- `VOTING_POWER`
- `XOR: bytes:bytes`

Instructions with missing edge cases:

- `AND int:nat` 0 & x
- `AND int:nat` positive & x
- `AND int:nat` result `0` with non-zero arguments
- `AND int:nat` x & 0
- `AND nat:nat` 0 & x
- `AND nat:nat` result `0` with non-zero arguments
- `AND nat:nat` x & 0
- `COMPARE: int : int` with 0
- `COMPARE: int : int` with negative argument(s)
- `COMPARE: mutez : mutez` with 0
- `COMPARE: nat : nat` with 0
- `COMPARE: string : string` with strings longer than 1 character
- `CONTRACT` with entrypoints
- `DIG n` for even n (e.g. n = 2)
- `DIP n` for n = 0
- `DIP n` for n = 1
- `DROP n` for n = 1
- `DUG n` for n = 0
- `DUG n` for n = 1
- `EDIV: int : int` negative / negative
- `EDIV: int : int` positive / positive
- `EDIV: int : int` with result 1
- `EDIV: int : int` zero / non-zero
- `EDIV: int : int` zero / zero
- `EDIV: mutez : mutez` zero / non-zero
- `EDIV: mutez : mutez` zero / zero
- `IF_CONS` -- check that stack tail is preserved
- `IF_LEFT` -- check that stack tail is preserved
- `IF_NONE` -- check that stack tail is preserved
- `IF` -- check that stack tail is preserved
- `ISNAT` for positive argument
- `LSL: nat : nat` zero shift for non-zero argument
- `LSR: nat : nat` zero shift for non-zero argument
- `MUL: int : int` 0 * x
- `MUL: int : int` negative * negative
- `MUL: int : int` negative * positive
- `MUL: int : int` positive * positive
- `MUL: int : int` x * 0
- `MUL: int : nat` 0 * x
- `MUL: int : nat` negative * x
- `MUL: int : nat` x * 0
- `MUL: mutez : nat` 0 * x
- `MUL: mutez : nat` x * 0
- `MUL: nat : int` 0 * x
- `MUL: nat : int` x * 0
- `MUL: nat : int` x * positive
- `MUL: nat : mutez` 0 * x
- `MUL: nat : mutez` x * 0
- `MUL: nat : nat` 0 * x
- `MUL: nat : nat` x * 0
- `PACK` standalone tests (without `UNPACK`)
- `PUSH` for more pushable types
- `SENDER` when sender != source
- `SET_DELEGATE` with `None`
- `SUB: int : int` 0 - x
- `SUB: int : int` x - 0
- `SUB: int : int` x - negative
- `SUB: timestamp : int` 0 - x
- `SUB: timestamp : int` x - 0
- `SUB: timestamp : timestamp` realistic timestamps with negative difference
- `UNPACK` standalone tests (without `PACK`)
back to top