whiley_test_file 0.6.2

An API for manipulating test files for the Whiley Programming Language.
Documentation
original.name="While_Valid_57"
======
>>> main.whiley
type nat is (int x) where x >= 0

function count_helper(int[] items, int item) -> (int len, int[] matches)
ensures |matches| == |items|
ensures all { k in 0..len | items[matches[k]] == item }:
    //
    int[] ms = [0;|items|]
    nat i = 0
    nat n = 0
    //
    while i < |items|     
    where n <= i && i <= |items| && |ms| == |items|
    where all { j in 0..n | items[ms[j]] == item }:
        if items[i] == item:
            ms[n] = i
            n = n + 1
        i = i + 1
    //
    assert i == |ms|
    assert n <= |ms|        
    //
    return n,ms

function count(int[] items, int item) -> (int count):
    // yuk
    (item,items) = count_helper(items,item)
    return item

public export method test():
    assume count([],1) == 0
    assume count([1],1) == 1
    assume count([0,1],1) == 1
    assume count([1,0,1],1) == 2
    assume count([0,1,2,3,1,2,1],1) == 3
    
---