forked from pharo-project/pharo
/
TRemoveForMultiplenessTest.trait.st
133 lines (113 loc) · 4.24 KB
/
TRemoveForMultiplenessTest.trait.st
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
"
A trait for test purposes
"
Trait {
#name : #TRemoveForMultiplenessTest,
#traits : 'TRemoveTest',
#classTraits : 'TRemoveTest classTrait',
#category : #'Collections-Abstract-Tests-Traits'
}
{ #category : #requirements }
TRemoveForMultiplenessTest >> elementNotIn [
" return an element not included in nonEmptyWithoutEqualElements"
self explicitRequirement
]
{ #category : #requirements }
TRemoveForMultiplenessTest >> elementTwiceIn [
^ self explicitRequirement
]
{ #category : #requirements }
TRemoveForMultiplenessTest >> empty [
self explicitRequirement
]
{ #category : #requirements }
TRemoveForMultiplenessTest >> nonEmptyWithoutEqualElements [
" return a collection without equal elements "
self explicitRequirement
]
{ #category : #'tests - fixture' }
TRemoveForMultiplenessTest >> test0FixtureTRemoveTest [
| duplicate |
self empty.
self nonEmptyWithoutEqualElements.
self denyEmpty: self nonEmptyWithoutEqualElements.
duplicate := true.
self nonEmptyWithoutEqualElements detect: [ :each | (self nonEmptyWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ duplicate := false ].
self assert: duplicate = false.
self elementNotIn.
self assertEmpty: self empty.
self denyEmpty: self nonEmptyWithoutEqualElements.
self deny: (self nonEmptyWithoutEqualElements includes: self elementNotIn)
]
{ #category : #'tests - remove' }
TRemoveForMultiplenessTest >> testRemoveAll [
| el aSubCollection collection |
collection := self nonEmptyWithoutEqualElements.
el := collection anyOne.
aSubCollection := collection copyWithout: el.
collection removeAll: aSubCollection.
self assert: collection size = 1.
self nonEmptyWithoutEqualElements do: [ :each | self assert: each = el ]
]
{ #category : #'tests - remove' }
TRemoveForMultiplenessTest >> testRemoveAllError [
| el aSubCollection |
el := self elementNotIn.
aSubCollection := self nonEmptyWithoutEqualElements copyWith: el.
self should: [ self nonEmptyWithoutEqualElements removeAll: aSubCollection ] raise: Error
]
{ #category : #'tests - remove' }
TRemoveForMultiplenessTest >> testRemoveAllFoundIn [
| el aSubCollection |
el := self nonEmptyWithoutEqualElements anyOne.
aSubCollection := (self nonEmptyWithoutEqualElements copyWithout: el) copyWith: self elementNotIn.
self nonEmptyWithoutEqualElements removeAllFoundIn: aSubCollection.
self assert: self nonEmptyWithoutEqualElements size = 1.
self nonEmptyWithoutEqualElements do: [ :each | self assert: each = el ]
]
{ #category : #'tests - remove' }
TRemoveForMultiplenessTest >> testRemoveAllSuchThat [
| el aSubCollection |
el := self nonEmptyWithoutEqualElements anyOne.
aSubCollection := self nonEmptyWithoutEqualElements copyWithout: el.
self nonEmptyWithoutEqualElements removeAllSuchThat: [ :each | aSubCollection includes: each ].
self assert: self nonEmptyWithoutEqualElements size = 1.
self nonEmptyWithoutEqualElements do: [ :each | self assert: each = el ]
]
{ #category : #'tests - remove' }
TRemoveForMultiplenessTest >> testRemoveElementFromEmpty [
self
should: [ self empty remove: self nonEmptyWithoutEqualElements anyOne ]
raise: Error
]
{ #category : #'tests - remove' }
TRemoveForMultiplenessTest >> testRemoveElementReallyRemovesElement [
| size |
size := self nonEmptyWithoutEqualElements size.
self nonEmptyWithoutEqualElements remove: self nonEmptyWithoutEqualElements anyOne.
self assert: size - 1 = self nonEmptyWithoutEqualElements size
]
{ #category : #'tests - remove' }
TRemoveForMultiplenessTest >> testRemoveElementThatExists [
| el res |
el := self nonEmptyWithoutEqualElements anyOne.
res := self nonEmptyWithoutEqualElements remove: el.
self assert: res == el
]
{ #category : #'tests - remove' }
TRemoveForMultiplenessTest >> testRemoveElementThatExistsTwice [
| size |
size := self nonEmpty size.
self assert: (self nonEmpty includes: self elementTwiceIn).
self nonEmpty remove: self elementTwiceIn.
self assert: size - 1 = self nonEmpty size.
self assert: (self nonEmpty includes: self elementTwiceIn).
self nonEmpty remove: self elementTwiceIn.
self assert: size - 2 = self nonEmpty size
]
{ #category : #'tests - remove' }
TRemoveForMultiplenessTest >> testRemoveIfAbsent [
| res |
res := self nonEmptyWithoutEqualElements remove: self elementNotIn ifAbsent: [ 33 ].
self assert: res equals: 33
]