summaryrefslogtreecommitdiff
path: root/files/practicum/FragsTest.icl
blob: c1469949490792cdb89e196f0142f9425f9dc3e7 (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
module FragsTest

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

import StdEnv
import gast
import Frags

Start						= testn 1000
								( \xs -> alle_lengtes_komen_voor  xs /\
								         alle_elementen_zijn_frag xs /\
								         True
								)

alle_lengtes_komen_voor		:: [Int] -> Property
alle_lengtes_komen_voor xs	= name "alle_lengtes_komen_voor"
							       (let n = length xs
							         in sort (removeDup (map length (frags xs))) == [0..n]
							       )

alle_elementen_zijn_frag	:: [Int] -> Property
alle_elementen_zijn_frag xs	= name "alle_elementen_zijn_frag"
							       (and [is_frag f xs \\ f <- frags xs])

/*	is_frag fragment lijst is True alleen als fragment een strikte deellijst is
	van lijst, dwz: de elementen van fragment komen direct achter elkaar in lijst voor.
*/
is_frag						:: [a] [a] -> Bool | Eq a
is_frag [] _				= True
is_frag _  []				= False
is_frag [f:fs] [x:xs]
| f == x
	| is_frag fs xs			= True
	| otherwise				= is_frag [f:fs] xs
| otherwise					= is_frag [f:fs] xs