type Holder { values: List } identity(values: List) (result: List) { result = values } measure(values: List) (result: Int) { result = length(values) } compare(values: List, size: Int) (same: Bool) { same = length(values) == size } selected(keep: true, values: List) (result: List) { result = values } selected(keep: other, values: List) (result: List) { result = [] } readField(holder: Holder) (result: List) { result = selected(true, holder.values) } verify() (valid: Bool) { values = [1, 2, 3] direct = compare(values, measure(values)) holder = Holder { values = [4, 5] } field = compare(holder.values, measure(holder.values)) items = [6] forwarded = compare(identity(items), measure(identity(items))) consumed = Holder { values = [7, 8, 9, 10] } moved = readField(consumed) reused = Holder { values = [11, 12] } borrowed = readField(reused) preserved = compare(reused.values, measure(borrowed)) repeated = Holder { values = [13, 14, 15] } duplicated = compare(repeated.values, measure(selected(true, repeated.values))) valid = direct and field and forwarded and length(moved) == 4 and preserved and duplicated }