#### Test mod action

section data
format:
string "%d\n\x00"

section functions
import printf
export main

# Computes x - (x / y * y) - (x % y), which should be zero
test_mod:
function x y
    let q div x y
    let m mod x y
    let p mul q y
    let d sub x p
    return sub d m
end function

main:
function argc argv
    # Cases where the modulo should be zero
    let x 24
    let y mod x 1
    call printf format y
    set y mod x -1
    call printf format y
    set y mod x 3
    call printf format y
    set y mod x -3
    call printf format y
    set x -24
    set y mod x 1
    call printf format y
    set y mod x -1
    call printf format y
    set y mod x 3
    call printf format y
    set y mod x -3
    call printf format y

    # Cases where the modulo should be non-zero
    set y call test_mod 18 5
    call printf format y
    set y call test_mod 18 -5
    call printf format y
    set y call test_mod -18 5
    call printf format y
    set y call test_mod -18 -5
    call printf format y

    return 0
end function
