llm
Download
29 lines 1 KiBTomoModified 2026-09-02 raw
1234567891011121314151617181920212223242526272829

struct Foo{x:Int, y:Int}
    func len(f:Foo->Float64)
        return Float64.sqrt(Float64(f.x*f.x + f.y*f.y))!

test "min and max operators"
    >> (3 _min_ 5)
    assert (3 _min_ 5) == 3
    >> (5 _min_ 3)
    assert (5 _min_ 3) == 3
    >> (Foo{5, 1} _min_ Foo{5, 999})
    assert (Foo{5, 1} _min_ Foo{5, 999}) == Foo{x=5, y=1}
    >> (Foo{5, 999} _min_.x Foo{5, 1})
    assert (Foo{5, 999} _min_.x Foo{5, 1}) == Foo{x=5, y=999}
    >> (Foo{999, 1} _min_.y Foo{1, 10})
    assert (Foo{999, 1} _min_.y Foo{1, 10}) == Foo{x=999, y=1}
    >> (Foo{-999, -999} _max_.len() Foo{10, 10})
    assert (Foo{-999, -999} _max_.len() Foo{10, 10}) == Foo{x=-999, y=-999}
    >> foos := [Foo{5, 1}, Foo{5, 99}, Foo{-999, -999}]
    >> (_max_: foos)
    assert (_max_: foos)! == Foo{x=5, y=99}

# `_min_`/`_max_` are ordinary infix operators: whatever follows them stays part
# of the same expression.
test "min/max alongside other operators"
    assert 3 _min_ 5 == 3
    assert 1 _min_ 2 _min_ 3 == 1
    assert 5 _max_ 2 _max_ 9 == 9
    assert 2 + 3 _min_ 10 == 5