go-engine 0.1.5

The wrapper of the Goscript project.
Documentation
package main

import "fmt2"


func shortCircuit() bool {
    i := 1
    assert(i == 0)
    return true
}

func shortCircuit2() BOOL_ {
    i := 1
    assert(i == 0)
    return BOOL_(true)
}

func test1() {
    var i, j = 80, 8
    assert( i + j == 88)
    assert( i - j == 72)
    assert( i * j == 640)
    assert( i / j == 10)
    assert( i % j == 0)
    var k = i
    k += j
    assert(k == i + j)
    k = i
    k -= j
    assert(k == i - j)
    k = i
    k *= j
    assert(k == i * j)
    k = i
    k /= j
    assert(k == i / j)
    k = i
    k %= j
    assert(k == i % j)

    {
        var i, j = 80.0, 0.1
        assert( i + j == 80.1)
        assert( i - j == 79.9)
        assert( i * j == 8.0)
        assert( i / j == 800.0)
        var k = i
        k += j
        assert(k == i + j)
        k = i
        k -= j
        assert(k == i - j)
        k = i
        k *= j
        assert(k == i * j)
        k = i
        k /= j
        assert(k == i / j)
    }

    {
        type S1 struct {i, j int}
        var s S1
        s.i = 1
        s.j = 2000000000
        s.i--
        s.j++
        assert(s.i == 0)
        assert(s.j == 2000000001)
    }

    {
        var a = [3]int{1, 8}

        f := uint(2)
        i := 1 <<f 
        j := 8 >>f
        a[0] <<= 2  
        a[1] >>= 2   
        assert(i == 4)
        assert(j == 2)
        assert(a[0] == 4)
        assert(a[1] == 2)
        
    }

    {
        i := 1
        i ++
        assert(i == 2)

        type S1 struct {i, j int}
        var s S1
        s.i++
        assert(s.i == 1)

        p := &i;
        *p++
        assert(i == 3)
    }

    {
        t := true
        f := false

        assert(!(t&&f))
        assert(t&&t)
        assert(t&&t||f)
        assert(!(t&&t&&f)) 

        assert(t||shortCircuit())
        assert(!(f&&shortCircuit()))
    }
}

type INT_ int
type BOOL_ bool
type FLOAT_ float32

func test2() {
    var i, j INT_ = 80, 8
    fmt2.Println(i + j)
    assert (i != j)
    assert (i == j + 72)
    assert( i + j == 88)
    assert( i - j == 72)
    assert( i * j == 640)
    assert( i / j == 10)
    assert( i % j == 0)
    var k = i
    k += j
    assert(k == i + j)
    k = i
    k -= j
    assert(k == i - j)
    k = i
    k *= j
    assert(k == i * j)
    k = i
    k /= j
    assert(k == i / j)
    k = i
    k %= j
    assert(k == i % j)

    {
        var i, j FLOAT_ = 80.0, 0.1
        assert( i + j == 80.1)
        assert( i - j == 79.9)
        assert( i * j == 8.0)
        assert( i / j == 800.0)
        var k = i
        k += j
        assert(k == i + j)
        k = i
        k -= j
        assert(k == i - j)
        k = i
        k *= j
        assert(k == i * j)
        k = i
        k /= j
        assert(k == i / j)
    }

    {
        type S1 struct {i, j INT_}
        var s S1
        s.i = 1
        s.j = 2000000000
        s.i--
        s.j++
        assert(s.i == 0)
        assert(s.j == 2000000001)
    }

    {
        var a = [3]INT_{1, 8}

        f := uint(2)
        i := INT_(1) <<f 
        j := INT_(8) >>f
        a[0] <<= 2  
        a[1] >>= 2   
        assert(i == 4)
        assert(j == 2)
        assert(a[0] == 4)
        assert(a[1] == 2)
        
    }

     {
        i := INT_(1)
        i ++
        assert(i == 2)

        type S1 struct {i, j INT_}
        var s S1
        s.i++
        assert(s.i == 1)

        p := &i;
        *p++
        assert(i == 3)
    }

      {
        var t BOOL_ = true
        var f BOOL_ = false

        assert(!(t&&f))
        assert(t&&t)
        assert(t&&t||f)
        assert(!(t&&t&&f)) 

        assert(t||shortCircuit2())
        assert(!(f&&shortCircuit2()))
    }
}

func main() {


    test1()
    test2()
}