# Homework 10: Testing

CIS 194: Homework 10

Due Tuesday, November 8

The is just small, 10 points, finger exercise to reinforce the lecture material. Your main task is to work on the project.

## Exercise 1

From your or the example solution of week 7, extract the `Tree`

data type and the `labelTree`

function. You can add `Eq`

to the derived classes of `Tree`

.

Declare an `Arbitrary`

instance for trees:

`instance Arbitrary a => Arbitrary (Tree a) where …`

You do not have to implement a `shrink`

function.

Use `sample`

in GHCi to visually assess whether you generate useful looking trees.

## Exercise 2

Implement these functions:

```
size :: Tree a -> Int
toList :: Tree a -> [a]
```

where `size`

counts the number of leaves in the tree, and `toList`

contains all the values in the leafs, from left to right.

## Exercise 3

Create these QuickCheck properties:

`prop_lengthToList :: Tree Integer -> Bool`

The length of the list produced by

`toList`

is the size of the given tree.`prop_sizeLabelTree :: Tree Integer -> Bool`

`labelTree`

does not change the size of the tree.`prop_labelTree :: Tree Integer -> Bool`

For every tree

`t`

,`toList (labelTree t)`

is the expected list.Hint:

`[0..n]`

denotes the list of numbers from`0`

to`n`

, inclusively.`prop_labelTreeIdempotent :: Tree Integer -> Bool`

Applying

`labelTree`

to a list twice does yield the same list as applying it once.