summaryrefslogtreecommitdiff
path: root/files/practicum/EersteOfLaatsteTest.icl
blob: d6e89f33877c671c4cd3301fe6298cb33a782907 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
module EersteOfLaatsteTest

/*	Test module EersteOfLaatste
	Voor werken met Gast:
		(*) gebruik Environment 'Gast'
		(*) zet Project Options op 'Basic Values Only'
*/

import EersteOfLaatste
import StdEnv
import gast

Start
		= testn 1000
			(\n v ->
			   eerste2_is_eerste_2     v /\
			   laatste2_is_laatste_2   v /\
			   eersten_is_eerste_n   n v /\
			   laatsten_is_laatste_n n v /\
			   True
			)

:: BaseType :== Int

eerste2_is_eerste_2				:: [BaseType] -> Property
eerste2_is_eerste_2 l			= name "eerste2 is eerste twee"
									((length l > 1) ==> let l` = eerste2 l in zelfde_deel 2 l` l)

laatste2_is_laatste_2			:: [BaseType] -> Property
laatste2_is_laatste_2 l			= name "laatste2 is laatste twee"
									((length l > 1) ==> let l` = laatste2 l in zelfde_deel 2 l` (drop (length l - 2) l))

eersten_is_eerste_n				:: Int [BaseType] -> Property
eersten_is_eerste_n n l			= name "eersten is eerste n"
									((n >= 0 && n < length l) ==> let l` = eersten n l in zelfde_deel n l` l)

laatsten_is_laatste_n			:: Int [BaseType] -> Property
laatsten_is_laatste_n n l		= name "laatsten is laatste n"
									((n >= 0 && n < length l) ==> let l` = laatsten n l in zelfde_deel n l` (drop (length l - n) l))

zelfde_deel						:: Int [BaseType] [BaseType] -> Bool
zelfde_deel 0 _ _				= True
zelfde_deel n [a:as] [b:bs]		= a == b && zelfde_deel (n-1) as bs
zelfde_deel _ _ _				= False