Skip to content

Commit 15b9ad5

Browse files
Use assert in power_of_integer function
1 parent a6b5f0c commit 15b9ad5

File tree

3 files changed

+63
-57
lines changed

3 files changed

+63
-57
lines changed

exercises/practice/rational-numbers/.meta/example.gleam

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import gleam/int
22
import gleam/float
3+
import gleam/result
34

45
pub type RationalNumber {
56
RationalNumber(numerator: Int, denominator: Int)
@@ -45,7 +46,7 @@ pub fn absolute_value(r: RationalNumber) -> RationalNumber {
4546
pub fn power_of_rational(
4647
number base: RationalNumber,
4748
to exponent: Int,
48-
) -> Result(RationalNumber, Nil) {
49+
) -> RationalNumber {
4950
case base {
5051
RationalNumber(numerator, denominator) if exponent < 0 ->
5152
power_of_rational(
@@ -54,12 +55,10 @@ pub fn power_of_rational(
5455
)
5556

5657
RationalNumber(numerator, denominator) -> {
57-
try numerator = power_of_integer(numerator, to: exponent)
58-
try denominator = power_of_integer(denominator, to: exponent)
58+
let numerator = power_of_integer(numerator, to: exponent)
59+
let denominator = power_of_integer(denominator, to: exponent)
5960

60-
let power = reduce(RationalNumber(numerator, denominator))
61-
62-
Ok(power)
61+
reduce(RationalNumber(numerator, denominator))
6362
}
6463
}
6564
}
@@ -70,7 +69,7 @@ pub fn power_of_real(
7069
) -> Result(Float, Nil) {
7170
let RationalNumber(numerator, denominator) = exponent
7271

73-
try power = float.power(base, int.to_float(numerator))
72+
use power <- result.then(float.power(base, int.to_float(numerator)))
7473

7574
nth_root(denominator, of: power)
7675
}
@@ -91,10 +90,10 @@ pub fn reduce(r: RationalNumber) -> RationalNumber {
9190
}
9291
}
9392

94-
fn power_of_integer(number base: Int, to exponent: Int) -> Result(Int, Nil) {
95-
try power = int.power(base, int.to_float(exponent))
93+
fn power_of_integer(number base: Int, to exponent: Int) -> Int {
94+
let assert Ok(power) = int.power(base, int.to_float(exponent))
9695

97-
Ok(float.round(power))
96+
float.round(power)
9897
}
9998

10099
fn nth_root(n: Int, of p: Float) -> Result(Float, Nil) {

exercises/practice/rational-numbers/src/rational_numbers.gleam

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ pub fn absolute_value(r: RationalNumber) -> RationalNumber {
2525
pub fn power_of_rational(
2626
number base: RationalNumber,
2727
to exponent: Int,
28-
) -> Result(RationalNumber, Nil) {
28+
) -> RationalNumber {
2929
todo
3030
}
3131

exercises/practice/rational-numbers/test/rational_numbers_test.gleam

Lines changed: 53 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -7,216 +7,223 @@ pub fn main() {
77
}
88

99
pub fn arithmetic_addition_add_two_positive_rational_numbers_test() {
10-
assert RationalNumber(7, 6) =
10+
let assert RationalNumber(7, 6) =
1111
rational_numbers.add(RationalNumber(1, 2), RationalNumber(2, 3))
1212
}
1313

1414
pub fn arithmetic_addition_add_a_positive_rational_number_and_a_negative_rational_number_test() {
15-
assert RationalNumber(-1, 6) =
15+
let assert RationalNumber(-1, 6) =
1616
rational_numbers.add(RationalNumber(1, 2), RationalNumber(-2, 3))
1717
}
1818

1919
pub fn arithmetic_addition_add_two_negative_rational_numbers_test() {
20-
assert RationalNumber(-7, 6) =
20+
let assert RationalNumber(-7, 6) =
2121
rational_numbers.add(RationalNumber(-1, 2), RationalNumber(-2, 3))
2222
}
2323

2424
pub fn arithmetic_addition_add_a_rational_number_to_its_additive_inverse_test() {
25-
assert RationalNumber(0, 1) =
25+
let assert RationalNumber(0, 1) =
2626
rational_numbers.add(RationalNumber(1, 2), RationalNumber(-1, 2))
2727
}
2828

2929
pub fn arithmetic_subtraction_subtract_two_positive_rational_numbers_test() {
30-
assert RationalNumber(-1, 6) =
30+
let assert RationalNumber(-1, 6) =
3131
rational_numbers.subtract(RationalNumber(1, 2), RationalNumber(2, 3))
3232
}
3333

3434
pub fn arithmetic_subtraction_subtract_a_positive_rational_number_and_a_negative_rational_number_test() {
35-
assert RationalNumber(7, 6) =
35+
let assert RationalNumber(7, 6) =
3636
rational_numbers.subtract(RationalNumber(1, 2), RationalNumber(-2, 3))
3737
}
3838

3939
pub fn arithmetic_subtraction_subtract_two_negative_rational_numbers_test() {
40-
assert RationalNumber(1, 6) =
40+
let assert RationalNumber(1, 6) =
4141
rational_numbers.subtract(RationalNumber(-1, 2), RationalNumber(-2, 3))
4242
}
4343

4444
pub fn arithmetic_subtraction_subtract_a_rational_number_from_itself_test() {
45-
assert RationalNumber(0, 1) =
45+
let assert RationalNumber(0, 1) =
4646
rational_numbers.subtract(RationalNumber(1, 2), RationalNumber(1, 2))
4747
}
4848

4949
pub fn arithmetic_multiplication_multiply_two_positive_rational_numbers_test() {
50-
assert RationalNumber(1, 3) =
50+
let assert RationalNumber(1, 3) =
5151
rational_numbers.multiply(RationalNumber(1, 2), RationalNumber(2, 3))
5252
}
5353

5454
pub fn arithmetic_multiplication_multiply_a_negative_rational_number_by_a_positive_rational_number_test() {
55-
assert RationalNumber(-1, 3) =
55+
let assert RationalNumber(-1, 3) =
5656
rational_numbers.multiply(RationalNumber(-1, 2), RationalNumber(2, 3))
5757
}
5858

5959
pub fn arithmetic_multiplication_multiply_two_negative_rational_numbers_test() {
60-
assert RationalNumber(1, 3) =
60+
let assert RationalNumber(1, 3) =
6161
rational_numbers.multiply(RationalNumber(-1, 2), RationalNumber(-2, 3))
6262
}
6363

6464
pub fn arithmetic_multiplication_multiply_a_rational_number_by_its_reciprocal_test() {
65-
assert RationalNumber(1, 1) =
65+
let assert RationalNumber(1, 1) =
6666
rational_numbers.multiply(RationalNumber(1, 2), RationalNumber(2, 1))
6767
}
6868

6969
pub fn arithmetic_multiplication_multiply_a_rational_number_by_1_test() {
70-
assert RationalNumber(1, 2) =
70+
let assert RationalNumber(1, 2) =
7171
rational_numbers.multiply(RationalNumber(1, 2), RationalNumber(1, 1))
7272
}
7373

7474
pub fn arithmetic_multiplication_multiply_a_rational_number_by_0_test() {
75-
assert RationalNumber(0, 1) =
75+
let assert RationalNumber(0, 1) =
7676
rational_numbers.multiply(RationalNumber(1, 2), RationalNumber(0, 1))
7777
}
7878

7979
pub fn arithmetic_division_divide_two_positive_rational_numbers_test() {
80-
assert RationalNumber(3, 4) =
80+
let assert RationalNumber(3, 4) =
8181
rational_numbers.divide(RationalNumber(1, 2), RationalNumber(2, 3))
8282
}
8383

8484
pub fn arithmetic_division_divide_a_positive_rational_number_by_a_negative_rational_number_test() {
85-
assert RationalNumber(-3, 4) =
85+
let assert RationalNumber(-3, 4) =
8686
rational_numbers.divide(RationalNumber(1, 2), RationalNumber(-2, 3))
8787
}
8888

8989
pub fn arithmetic_division_divide_two_negative_rational_numbers_test() {
90-
assert RationalNumber(3, 4) =
90+
let assert RationalNumber(3, 4) =
9191
rational_numbers.divide(RationalNumber(-1, 2), RationalNumber(-2, 3))
9292
}
9393

9494
pub fn arithmetic_division_divide_a_rational_number_by_1_test() {
95-
assert RationalNumber(1, 2) =
95+
let assert RationalNumber(1, 2) =
9696
rational_numbers.divide(RationalNumber(1, 2), RationalNumber(1, 1))
9797
}
9898

9999
pub fn absolute_value_absolute_value_of_a_positive_rational_number_test() {
100-
assert RationalNumber(1, 2) =
100+
let assert RationalNumber(1, 2) =
101101
rational_numbers.absolute_value(RationalNumber(1, 2))
102102
}
103103

104104
pub fn absolute_value_absolute_value_of_a_positive_rational_number_with_negative_numerator_and_denominator_test() {
105-
assert RationalNumber(1, 2) =
105+
let assert RationalNumber(1, 2) =
106106
rational_numbers.absolute_value(RationalNumber(-1, -2))
107107
}
108108

109109
pub fn absolute_value_absolute_value_of_a_negative_rational_number_test() {
110-
assert RationalNumber(1, 2) =
110+
let assert RationalNumber(1, 2) =
111111
rational_numbers.absolute_value(RationalNumber(-1, 2))
112112
}
113113

114114
pub fn absolute_value_absolute_value_of_a_negative_rational_number_with_negative_denominator_test() {
115-
assert RationalNumber(1, 2) =
115+
let assert RationalNumber(1, 2) =
116116
rational_numbers.absolute_value(RationalNumber(1, -2))
117117
}
118118

119119
pub fn absolute_value_absolute_value_of_zero_test() {
120-
assert RationalNumber(0, 1) =
120+
let assert RationalNumber(0, 1) =
121121
rational_numbers.absolute_value(RationalNumber(0, 1))
122122
}
123123

124124
pub fn absolute_value_absolute_value_of_a_rational_number_is_reduced_to_lowest_terms_test() {
125-
assert RationalNumber(1, 2) =
125+
let assert RationalNumber(1, 2) =
126126
rational_numbers.absolute_value(RationalNumber(2, 4))
127127
}
128128

129129
pub fn exponentiation_of_a_rational_number_raise_a_positive_rational_number_to_a_positive_integer_power_test() {
130-
assert Ok(RationalNumber(1, 8)) =
130+
let assert RationalNumber(1, 8) =
131131
rational_numbers.power_of_rational(number: RationalNumber(1, 2), to: 3)
132132
}
133133

134134
pub fn exponentiation_of_a_rational_number_raise_a_negative_rational_number_to_a_positive_integer_power_test() {
135-
assert Ok(RationalNumber(-1, 8)) =
135+
let assert RationalNumber(-1, 8) =
136136
rational_numbers.power_of_rational(number: RationalNumber(-1, 2), to: 3)
137137
}
138138

139139
pub fn exponentiation_of_a_rational_number_raise_a_positive_rational_number_to_a_negative_integer_power_test() {
140-
assert Ok(RationalNumber(25, 9)) =
140+
let assert RationalNumber(25, 9) =
141141
rational_numbers.power_of_rational(number: RationalNumber(3, 5), to: -2)
142142
}
143143

144144
pub fn exponentiation_of_a_rational_number_raise_a_negative_rational_number_to_an_even_negative_integer_power_test() {
145-
assert Ok(RationalNumber(25, 9)) =
145+
let assert RationalNumber(25, 9) =
146146
rational_numbers.power_of_rational(number: RationalNumber(-3, 5), to: -2)
147147
}
148148

149149
pub fn exponentiation_of_a_rational_number_raise_a_negative_rational_number_to_an_odd_negative_integer_power_test() {
150-
assert Ok(RationalNumber(-125, 27)) =
150+
let assert RationalNumber(-125, 27) =
151151
rational_numbers.power_of_rational(number: RationalNumber(-3, 5), to: -3)
152152
}
153153

154154
pub fn exponentiation_of_a_rational_number_raise_zero_to_an_integer_power_test() {
155-
assert Ok(RationalNumber(0, 1)) =
155+
let assert RationalNumber(0, 1) =
156156
rational_numbers.power_of_rational(number: RationalNumber(0, 1), to: 5)
157157
}
158158

159159
pub fn exponentiation_of_a_rational_number_raise_one_to_an_integer_power_test() {
160-
assert Ok(RationalNumber(1, 1)) =
160+
let assert RationalNumber(1, 1) =
161161
rational_numbers.power_of_rational(number: RationalNumber(1, 1), to: 4)
162162
}
163163

164164
pub fn exponentiation_of_a_rational_number_raise_a_positive_rational_number_to_the_power_of_zero_test() {
165-
assert Ok(RationalNumber(1, 1)) =
165+
let assert RationalNumber(1, 1) =
166166
rational_numbers.power_of_rational(number: RationalNumber(1, 2), to: 0)
167167
}
168168

169169
pub fn exponentiation_of_a_rational_number_raise_a_negative_rational_number_to_the_power_of_zero_test() {
170-
assert Ok(RationalNumber(1, 1)) =
170+
let assert RationalNumber(1, 1) =
171171
rational_numbers.power_of_rational(number: RationalNumber(-1, 2), to: 0)
172172
}
173173

174174
pub fn exponentiation_of_a_real_number_to_a_rational_number_raise_a_real_number_to_a_positive_rational_number_test() {
175-
assert Ok(power) =
175+
let assert Ok(power) =
176176
rational_numbers.power_of_real(number: 8.0, to: RationalNumber(4, 3))
177177

178-
assert True = float.loosely_equals(power, with: 16.0, tolerating: 0.001)
178+
let assert True = float.loosely_equals(power, with: 16.0, tolerating: 0.001)
179179
}
180180

181181
pub fn exponentiation_of_a_real_number_to_a_rational_number_raise_a_real_number_to_a_negative_rational_number_test() {
182-
assert Ok(power) =
182+
let assert Ok(power) =
183183
rational_numbers.power_of_real(number: 9.0, to: RationalNumber(-1, 2))
184184

185-
assert True =
185+
let assert True =
186186
float.loosely_equals(power, with: 0.3333333333333333, tolerating: 0.001)
187187
}
188188

189189
pub fn exponentiation_of_a_real_number_to_a_rational_number_raise_a_real_number_to_a_zero_rational_number_test() {
190-
assert Ok(power) =
190+
let assert Ok(power) =
191191
rational_numbers.power_of_real(number: 2.0, to: RationalNumber(0, 1))
192192

193-
assert True = float.loosely_equals(power, with: 1.0, tolerating: 0.001)
193+
let assert True = float.loosely_equals(power, with: 1.0, tolerating: 0.001)
194194
}
195195

196196
pub fn reduction_to_lowest_terms_reduce_a_positive_rational_number_to_lowest_terms_test() {
197-
assert RationalNumber(1, 2) = rational_numbers.reduce(RationalNumber(2, 4))
197+
let assert RationalNumber(1, 2) =
198+
rational_numbers.reduce(RationalNumber(2, 4))
198199
}
199200

200201
pub fn reduction_to_lowest_terms_reduce_places_the_minus_sign_on_the_numerator_test() {
201-
assert RationalNumber(-3, 4) = rational_numbers.reduce(RationalNumber(3, -4))
202+
let assert RationalNumber(-3, 4) =
203+
rational_numbers.reduce(RationalNumber(3, -4))
202204
}
203205

204206
pub fn reduction_to_lowest_terms_reduce_a_negative_rational_number_to_lowest_terms_test() {
205-
assert RationalNumber(-2, 3) = rational_numbers.reduce(RationalNumber(-4, 6))
207+
let assert RationalNumber(-2, 3) =
208+
rational_numbers.reduce(RationalNumber(-4, 6))
206209
}
207210

208211
pub fn reduction_to_lowest_terms_reduce_a_rational_number_with_a_negative_denominator_to_lowest_terms_test() {
209-
assert RationalNumber(-1, 3) = rational_numbers.reduce(RationalNumber(3, -9))
212+
let assert RationalNumber(-1, 3) =
213+
rational_numbers.reduce(RationalNumber(3, -9))
210214
}
211215

212216
pub fn reduction_to_lowest_terms_reduce_zero_to_lowest_terms_test() {
213-
assert RationalNumber(0, 1) = rational_numbers.reduce(RationalNumber(0, 6))
217+
let assert RationalNumber(0, 1) =
218+
rational_numbers.reduce(RationalNumber(0, 6))
214219
}
215220

216221
pub fn reduction_to_lowest_terms_reduce_an_integer_to_lowest_terms_test() {
217-
assert RationalNumber(-2, 1) = rational_numbers.reduce(RationalNumber(-14, 7))
222+
let assert RationalNumber(-2, 1) =
223+
rational_numbers.reduce(RationalNumber(-14, 7))
218224
}
219225

220226
pub fn reduction_to_lowest_terms_reduce_one_to_lowest_terms_test() {
221-
assert RationalNumber(1, 1) = rational_numbers.reduce(RationalNumber(13, 13))
227+
let assert RationalNumber(1, 1) =
228+
rational_numbers.reduce(RationalNumber(13, 13))
222229
}

0 commit comments

Comments
 (0)