packages feed

Agda-2.3.2.2: test/js/TestNat.agda

open import Common.Prelude
open import TestHarness
open import TestBool using ( not; _∧_ ; _↔_ )

module TestNat where

_*_ : Nat → Nat → Nat
zero  * n = zero
suc m * n = n + (m * n)

{-# COMPILED_JS _*_ function (x) { return function (y) { return x*y; }; } #-}

fact : Nat → Nat
fact zero    = 1
fact (suc x) = suc x * fact x

_≟_ : Nat → Nat → Bool
zero  ≟ zero  = true
suc x ≟ suc y = x ≟ y
x     ≟ y     = false

{-# COMPILED_JS _≟_ function (x) { return function (y) { return x === y; }; } #-}

tests : Tests
tests _ = (
    assert (0 ≟ 0) "0=0" ,
    assert (not (0 ≟ 1)) "0≠1" ,
    assert ((1 + 2) ≟ 3) "1+2=3" ,
    assert ((2 ∸ 1) ≟ 1) "2∸1=1" ,
    assert ((1 ∸ 2) ≟ 0) "1∸2=0" ,
    assert ((2 * 3) ≟ 6) "2+3=6" ,
    assert (fact 0 ≟ 1) "0!=1" ,
    assert (fact 1 ≟ 1) "1!=1" ,
    assert (fact 2 ≟ 2) "2!=2" ,
    assert (fact 3 ≟ 6) "3!=6" ,
    assert (fact 4 ≟ 24) "4!=24"
  )