Transfers
At this point creating and applying a transfer should be relatively straightforward. Simply create
the operation using michelson's TRANSFER_TOKENS, and apply it with APPLY_OPERATIONS. For
instance, transfer.techel builds on inspection.techel. It creates an instance of
simpleExample.tz, and creates and applies two operations: the first transfers 7 tokens with a
parameter equal to False, and the second transfers 13 tokens with True. (Remember that
simpleExample.tz will count transfers for which the parameter is False.)
{
    PUSH @storage nat 0 ;
    PUSH @amount mutez 3 ;
    PUSH @delegatable bool True ;
    PUSH @spendable bool True ;
    NONE @delegate key_hash ;
    PUSH key "manager address" ;
    SHA512 @manager ;
    CREATE_CONTRACT @main @main_op "SimpleExample" ;
    ... # Omitting code creating the contract.
    {   # Making a non-ghost transfer.
        DUP ;
        PUSH @amount mutez 7 ;
        PUSH @ghost bool False ;
        TRANSFER_TOKENS ;
    } ;
    DIP {   # Making a ghost transfer.
        DUP ;
        PUSH @amount mutez 13 ;
        PUSH @ghost bool True ;
        TRANSFER_TOKENS ;
    } ;
    {   # Creating the list of all operations.
        DIP { DIP {NIL operation } ; CONS } ;
        CONS ;
    } ;
    APPLY_OPERATIONS ;
Finally, it checks that the balance and storage are the ones expected:
    GET_BALANCE ;
    PRINT_STACK ;
    STEP "retrieved the balance of the contract" ;
    PUSH mutez 23 ;
    IFCMPNEQ {
        PUSH string "balance should be 23utz" ;
        FAILWITH
    } {} ;
    GET_STORAGE nat ;
    IF_NONE {
        PUSH string "unable to retrieve storage of contract" ;
        FAILWITH
    } {
        PRINT_STACK ;
        STEP "retrieved the storage of the contract" ;
        PUSH nat 1 ;
        IFCMPNEQ {
            PUSH string "storage should be 1 (nat)" ;
            FAILWITH
        } {} ;
    }
}
The test passes and its output is
$ techelson --contract rsc/simpleExample/contracts/simpleExample.tz -- rsc/simpleExample/okay/transfer.techel
Running test `Transfer`
running test script...
   timestamp: 1970-01-01 00:00:00 +00:00
applying operation CREATE[uid:0] (@address[1]@main, "sha512:manager address", None, true, true, 3utz) "SimpleExample"
   timestamp: 1970-01-01 00:00:00 +00:00
   live contracts: none
=> live contracts: SimpleExample (3utz) address[1]@main
running test script...
   timestamp: 1970-01-01 00:00:00 +00:00
applying operation TRANSFER[uid:1] address[0]@Transfer -> address[1]@main 7utz False
   timestamp: 1970-01-01 00:00:00 +00:00
   live contracts: SimpleExample (3utz) address[1]@main
running TRANSFER[uid:1] address[0]@Transfer -> address[1]@main 7utz False
   timestamp: 1970-01-01 00:00:00 +00:00
=> live contracts: SimpleExample (10utz) address[1]@main
applying operation TRANSFER[uid:2] address[0]@Transfer -> address[1]@main 13utz True
   timestamp: 1970-01-01 00:00:00 +00:00
   live contracts: SimpleExample (10utz) address[1]@main
running TRANSFER[uid:2] address[0]@Transfer -> address[1]@main 13utz True
   timestamp: 1970-01-01 00:00:00 +00:00
=> live contracts: SimpleExample (23utz) address[1]@main
running test script...
   timestamp: 1970-01-01 00:00:00 +00:00
stack:
|==================================================================================================|
| address[1]@main                                                                                  |
| (contract bool)                                                                                  |
|--------------------------------------------------------------------------------------------------|
| 23utz                                                                                            |
| mutez                                                                                            |
|==================================================================================================|
running test script...
   timestamp: 1970-01-01 00:00:00 +00:00
stopping [retrieved the balance of the contract] press `return` to continue
running test script...
   timestamp: 1970-01-01 00:00:00 +00:00
stack:
|==================================================================================================|
| 1p                                                                                               |
| nat                                                                                              |
|==================================================================================================|
running test script...
   timestamp: 1970-01-01 00:00:00 +00:00
stopping [retrieved the storage of the contract] press `return` to continue
running test script...
   timestamp: 1970-01-01 00:00:00 +00:00
Done running test `Transfer`