1- using FsCheck . Xunit ;
21using FsCheck ;
2+
33using Exercism . Tests ;
44
5+ using FsCheck . Fluent ;
6+
57public class HyperiaForexTests
68{
7- [ Property ]
9+ [ Fact ]
810 [ Task ( 1 ) ]
9- public void Equality_with_same_currency ( decimal value )
11+ public void Equality_with_same_currency ( )
1012 {
11- var amount1 = new CurrencyAmount ( value , "HD" ) ;
12- var amount2 = new CurrencyAmount ( value , "HD" ) ;
13+ Prop . ForAll < decimal > ( value =>
14+ {
15+ var amount1 = new CurrencyAmount ( value , "HD" ) ;
16+ var amount2 = new CurrencyAmount ( value , "HD" ) ;
1317
14- Assert . True ( amount1 == amount2 ) ;
18+ Assert . True ( amount1 == amount2 ) ;
19+ } ) . QuickCheckThrowOnFailure ( ) ;
1520 }
1621
17- [ Property ]
22+ [ Fact ]
1823 [ Task ( 1 ) ]
19- public void Equality_with_different_currency ( decimal value )
24+ public void Equality_with_different_currency ( )
2025 {
21- var amount1 = new CurrencyAmount ( value , "HD" ) ;
22- var amount2 = new CurrencyAmount ( value , "USD" ) ;
26+ Prop . ForAll < decimal > ( value =>
27+ {
28+ var amount1 = new CurrencyAmount ( value , "HD" ) ;
29+ var amount2 = new CurrencyAmount ( value , "USD" ) ;
2330
24- Assert . Throws < ArgumentException > ( ( ) => amount1 == amount2 ) ;
31+ Assert . Throws < ArgumentException > ( ( ) => amount1 == amount2 ) ;
32+ } ) . QuickCheckThrowOnFailure ( ) ;
2533 }
2634
27- [ Property ]
35+ [ Fact ]
2836 [ Task ( 1 ) ]
29- public Property Inequality_with_same_currency ( decimal value1 , decimal value2 )
37+ public void Inequality_with_same_currency ( )
3038 {
31- var amount1 = new CurrencyAmount ( value1 , "HD" ) ;
32- var amount2 = new CurrencyAmount ( value2 , "HD" ) ;
39+ Prop . ForAll < ( decimal , decimal ) > ( values =>
40+ {
41+ var amount1 = new CurrencyAmount ( values . Item1 , "HD" ) ;
42+ var amount2 = new CurrencyAmount ( values . Item2 , "HD" ) ;
3343
34- return Prop . When ( value1 != value2 , ( ) => Assert . True ( amount1 != amount2 ) ) ;
44+ return Prop . When ( values . Item1 != values . Item2 , ( ) => Assert . True ( amount1 != amount2 ) ) ;
45+ } ) . QuickCheckThrowOnFailure ( ) ;
3546 }
3647
37- [ Property ]
48+ [ Fact ]
3849 [ Task ( 1 ) ]
39- public void Inequality_with_different_currency ( decimal value1 , decimal value2 )
50+ public void Inequality_with_different_currency ( )
4051 {
41- var amount1 = new CurrencyAmount ( value1 , "HD" ) ;
42- var amount2 = new CurrencyAmount ( value2 , "USD" ) ;
52+ Prop . ForAll < ( decimal , decimal ) > ( values =>
53+ {
54+ var amount1 = new CurrencyAmount ( values . Item1 , "HD" ) ;
55+ var amount2 = new CurrencyAmount ( values . Item2 , "USD" ) ;
4356
44- Assert . Throws < ArgumentException > ( ( ) => amount1 != amount2 ) ;
57+ Assert . Throws < ArgumentException > ( ( ) => amount1 != amount2 ) ;
58+ } ) . QuickCheckThrowOnFailure ( ) ;
4559 }
4660
47- [ Property ]
61+ [ Fact ]
4862 [ Task ( 2 ) ]
49- public Property LessThan_with_same_currency ( decimal value1 , decimal value2 )
63+ public void LessThan_with_same_currency ( )
5064 {
51- var amount1 = new CurrencyAmount ( value1 , "HD" ) ;
52- var amount2 = new CurrencyAmount ( value2 , "HD" ) ;
65+ Prop . ForAll < ( decimal , decimal ) > ( values =>
66+ {
67+ var amount1 = new CurrencyAmount ( values . Item1 , "HD" ) ;
68+ var amount2 = new CurrencyAmount ( values . Item2 , "HD" ) ;
5369
54- return Prop . When ( value1 < value2 , ( ) => Assert . True ( amount1 < amount2 ) ) ;
70+ return Prop . When ( values . Item1 < values . Item2 , ( ) => Assert . True ( amount1 < amount2 ) ) ;
71+ } ) . QuickCheckThrowOnFailure ( ) ;
5572 }
5673
57- [ Property ]
74+ [ Fact ]
5875 [ Task ( 2 ) ]
59- public void LessThan_with_different_currency ( decimal value1 , decimal value2 )
76+ public void LessThan_with_different_currency ( )
6077 {
61- var amount1 = new CurrencyAmount ( value1 , "HD" ) ;
62- var amount2 = new CurrencyAmount ( value2 , "USD" ) ;
78+ Prop . ForAll < ( decimal , decimal ) > ( values =>
79+ {
80+ var amount1 = new CurrencyAmount ( values . Item1 , "HD" ) ;
81+ var amount2 = new CurrencyAmount ( values . Item2 , "USD" ) ;
6382
64- Assert . Throws < ArgumentException > ( ( ) => amount1 < amount2 ) ;
83+ Assert . Throws < ArgumentException > ( ( ) => amount1 < amount2 ) ;
84+ } ) . QuickCheckThrowOnFailure ( ) ;
6585 }
6686
67- [ Property ]
87+ [ Fact ]
6888 [ Task ( 2 ) ]
69- public Property GreaterThan_with_same_currency ( decimal value1 , decimal value2 )
89+ public void GreaterThan_with_same_currency ( )
7090 {
71- var amount1 = new CurrencyAmount ( value1 , "HD" ) ;
72- var amount2 = new CurrencyAmount ( value2 , "HD" ) ;
91+ Prop . ForAll < ( decimal , decimal ) > ( values =>
92+ {
93+ var amount1 = new CurrencyAmount ( values . Item1 , "HD" ) ;
94+ var amount2 = new CurrencyAmount ( values . Item2 , "HD" ) ;
7395
74- return Prop . When ( value1 > value2 , ( ) => Assert . True ( amount1 > amount2 ) ) ;
96+ return Prop . When ( values . Item1 > values . Item2 , ( ) => Assert . True ( amount1 > amount2 ) ) ;
97+ } ) . QuickCheckThrowOnFailure ( ) ;
7598 }
7699
77- [ Property ]
100+ [ Fact ]
78101 [ Task ( 2 ) ]
79- public void GreaterThan_with_different_currency ( decimal value1 , decimal value2 )
102+ public void GreaterThan_with_different_currency ( )
80103 {
81- var amount1 = new CurrencyAmount ( value1 , "HD" ) ;
82- var amount2 = new CurrencyAmount ( value2 , "USD" ) ;
104+ Prop . ForAll < ( decimal , decimal ) > ( values =>
105+ {
106+ var amount1 = new CurrencyAmount ( values . Item1 , "HD" ) ;
107+ var amount2 = new CurrencyAmount ( values . Item2 , "USD" ) ;
83108
84- Assert . Throws < ArgumentException > ( ( ) => amount1 > amount2 ) ;
109+ Assert . Throws < ArgumentException > ( ( ) => amount1 > amount2 ) ;
110+ } ) . QuickCheckThrowOnFailure ( ) ;
85111 }
86112
87- [ Property ]
113+ [ Fact ]
88114 [ Task ( 3 ) ]
89- public void Addition_with_same_currency ( decimal value1 , decimal value2 )
115+ public void Addition_with_same_currency ( )
90116 {
91- var amount1 = new CurrencyAmount ( value1 , "HD" ) ;
92- var amount2 = new CurrencyAmount ( value2 , "HD" ) ;
93- var expected = new CurrencyAmount ( value1 + value2 , "HD" ) ;
117+ Prop . ForAll < ( decimal , decimal ) > ( values =>
118+ {
119+ var amount1 = new CurrencyAmount ( values . Item1 , "HD" ) ;
120+ var amount2 = new CurrencyAmount ( values . Item2 , "HD" ) ;
121+ var expected = new CurrencyAmount ( values . Item1 + values . Item2 , "HD" ) ;
94122
95- Assert . Equal ( expected , amount1 + amount2 ) ;
123+ Assert . Equal ( expected , amount1 + amount2 ) ;
124+ } ) . QuickCheckThrowOnFailure ( ) ;
96125 }
97126
98- [ Property ]
127+ [ Fact ]
99128 [ Task ( 3 ) ]
100- public void Addition_is_commutative ( decimal value1 , decimal value2 )
129+ public void Addition_is_commutative ( )
101130 {
102- var amount1 = new CurrencyAmount ( value1 , "HD" ) ;
103- var amount2 = new CurrencyAmount ( value2 , "HD" ) ;
131+ Prop . ForAll < ( decimal , decimal ) > ( values =>
132+ {
133+ var amount1 = new CurrencyAmount ( values . Item1 , "HD" ) ;
134+ var amount2 = new CurrencyAmount ( values . Item2 , "HD" ) ;
104135
105- Assert . Equal ( amount1 + amount2 , amount2 + amount1 ) ;
136+ Assert . Equal ( amount1 + amount2 , amount2 + amount1 ) ;
137+ } ) . QuickCheckThrowOnFailure ( ) ;
106138 }
107139
108- [ Property ]
140+ [ Fact ]
109141 [ Task ( 3 ) ]
110- public void Addition_with_different_currency ( decimal value1 , decimal value2 )
142+ public void Addition_with_different_currency ( )
111143 {
112- var amount1 = new CurrencyAmount ( value1 , "HD" ) ;
113- var amount2 = new CurrencyAmount ( value2 , "USD" ) ;
144+ Prop . ForAll < ( decimal , decimal ) > ( values =>
145+ {
146+ var amount1 = new CurrencyAmount ( values . Item1 , "HD" ) ;
147+ var amount2 = new CurrencyAmount ( values . Item2 , "USD" ) ;
114148
115- Assert . Throws < ArgumentException > ( ( ) => amount1 + amount2 ) ;
149+ Assert . Throws < ArgumentException > ( ( ) => amount1 + amount2 ) ;
150+ } ) . QuickCheckThrowOnFailure ( ) ;
116151 }
117152
118- [ Property ]
153+ [ Fact ]
119154 [ Task ( 3 ) ]
120- public void Subtraction_with_same_currency ( decimal value1 , decimal value2 )
155+ public void Subtraction_with_same_currency ( )
121156 {
122- var amount1 = new CurrencyAmount ( value1 , "HD" ) ;
123- var amount2 = new CurrencyAmount ( value2 , "HD" ) ;
124- var expected = new CurrencyAmount ( value1 - value2 , "HD" ) ;
157+ Prop . ForAll < ( decimal , decimal ) > ( values =>
158+ {
159+ var amount1 = new CurrencyAmount ( values . Item1 , "HD" ) ;
160+ var amount2 = new CurrencyAmount ( values . Item2 , "HD" ) ;
161+ var expected = new CurrencyAmount ( values . Item1 - values . Item2 , "HD" ) ;
125162
126- Assert . Equal ( expected , amount1 - amount2 ) ;
163+ Assert . Equal ( expected , amount1 - amount2 ) ;
164+ } ) . QuickCheckThrowOnFailure ( ) ;
127165 }
128166
129- [ Property ]
167+ [ Fact ]
130168 [ Task ( 3 ) ]
131- public void Subtraction_with_different_currency ( decimal value1 , decimal value2 )
169+ public void Subtraction_with_different_currency ( )
132170 {
133- var amount1 = new CurrencyAmount ( value1 , "HD" ) ;
134- var amount2 = new CurrencyAmount ( value2 , "USD" ) ;
171+ Prop . ForAll < ( decimal , decimal ) > ( values =>
172+ {
173+ var amount1 = new CurrencyAmount ( values . Item1 , "HD" ) ;
174+ var amount2 = new CurrencyAmount ( values . Item2 , "USD" ) ;
135175
136- Assert . Throws < ArgumentException > ( ( ) => amount1 - amount2 ) ;
176+ Assert . Throws < ArgumentException > ( ( ) => amount1 - amount2 ) ;
177+ } ) . QuickCheckThrowOnFailure ( ) ;
137178 }
138179
139- [ Property ]
180+ [ Fact ]
140181 [ Task ( 4 ) ]
141- public void Multiplication ( decimal value , decimal factor )
182+ public void Multiplication ( )
142183 {
143- Assert . Equal ( new CurrencyAmount ( factor * value , "HD" ) ,
144- factor * new CurrencyAmount ( value , "HD" ) ) ;
184+ Prop . ForAll < ( decimal , decimal ) > ( values =>
185+ {
186+ var ( value , factor ) = values ;
187+ Assert . Equal ( new CurrencyAmount ( factor * value , "HD" ) ,
188+ factor * new CurrencyAmount ( value , "HD" ) ) ;
189+ } ) . QuickCheckThrowOnFailure ( ) ;
145190 }
146191
147- [ Property ]
192+ [ Fact ]
148193 [ Task ( 4 ) ]
149- public void Multiplication_is_commutative ( decimal value , decimal factor )
194+ public void Multiplication_is_commutative ( )
150195 {
151- var amount = new CurrencyAmount ( value , "HD" ) ;
196+ Prop . ForAll < ( decimal , decimal ) > ( values =>
197+ {
198+ var ( value , factor ) = values ;
199+ var amount = new CurrencyAmount ( value , "HD" ) ;
152200
153- Assert . Equal ( amount * factor , factor * amount ) ;
201+ Assert . Equal ( amount * factor , factor * amount ) ;
202+ } ) . QuickCheckThrowOnFailure ( ) ;
154203 }
155204
156- [ Property ]
205+ [ Fact ]
157206 [ Task ( 4 ) ]
158- public Property Division ( decimal value , decimal divisor )
207+ public void Division ( )
159208 {
160- return Prop . When (
161- divisor != 0 ,
162- ( ) => Assert . True ( new CurrencyAmount ( value , "HD" ) / divisor ==
163- new CurrencyAmount ( value / divisor , "HD" ) ) ) ;
209+ Prop . ForAll < ( decimal , decimal ) > ( values =>
210+ {
211+ var ( value , divisor ) = values ;
212+ return Prop . When (
213+ divisor != 0 ,
214+ ( ) => Assert . True ( new CurrencyAmount ( value , "HD" ) / divisor ==
215+ new CurrencyAmount ( value / divisor , "HD" ) ) ) ;
216+ } ) . QuickCheckThrowOnFailure ( ) ;
164217 }
165218
166- [ Property ]
219+ [ Fact ]
167220 [ Task ( 5 ) ]
168- public void Cast_to_double ( decimal value )
221+ public void Cast_to_double ( )
169222 {
170- Assert . Equal ( Convert . ToDouble ( value ) , ( double ) new CurrencyAmount ( value , "HD" ) ) ;
223+ Prop . ForAll < decimal > ( value =>
224+ {
225+ Assert . Equal ( Convert . ToDouble ( value ) , ( double ) new CurrencyAmount ( value , "HD" ) ) ;
226+ } ) . QuickCheckThrowOnFailure ( ) ;
171227 }
172228
173- [ Property ]
229+ [ Fact ]
174230 [ Task ( 6 ) ]
175- public void Cast_to_decimal ( decimal value )
231+ public void Cast_to_decimal ( )
176232 {
177- decimal actual = new CurrencyAmount ( value , "HD" ) ;
178- Assert . Equal ( value , actual ) ;
233+ Prop . ForAll < decimal > ( value =>
234+ {
235+ decimal actual = new CurrencyAmount ( value , "HD" ) ;
236+ Assert . Equal ( value , actual ) ;
237+ } ) . QuickCheckThrowOnFailure ( ) ;
179238 }
180- }
239+ }
0 commit comments