original.name="Property_Valid_12"
======
>>> main.whiley
// This benchmark was created specifically to test recursive
// properties.
type Node is {int data, List next}
type List is null|Node
// A recursive property capturing the concept of
// the length of a List
property length(List l, int len) -> (bool r):
return (l is null && len == 0) ||
(l is Node && length(l.next, len-1))
public export method test():
// List of length 1
List l1 = {data: 0, next: null}
// List of length 2
List l2 = {data: 0, next: l1}
// List of length 3
List l3 = {data: 0, next: l2}
//
assert length(null,0)
//
assert length(l1,1)
//
assert length(l2,2)
//
assert length(l3,3)
---