Skip to content

Commit 8690a48

Browse files
authored
Update wordy (#1798)
1 parent 1afb11e commit 8690a48

File tree

3 files changed

+148
-40
lines changed

3 files changed

+148
-40
lines changed

exercises/practice/wordy/.meta/example.rb

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,24 @@
11
class WordProblem
22
attr_reader :question
3+
34
def initialize(question)
45
@question = question
56
end
67

78
def answer
8-
if too_complicated?
9-
fail ArgumentError.new("I don't understand the question")
10-
end
9+
raise ArgumentError, "I don't understand the question" if too_complicated?
1110

12-
unless @answer
11+
if matches[2].nil?
12+
@answer = n1
13+
else
1314
@answer = n1.send(operation(2), n2)
14-
@answer = @answer.send(operation(5), n3) if chain?
15+
@answer = @answer.send(operation(4), n3) if chain?
1516
end
1617

1718
@answer
1819
end
1920

2021
private
21-
2222
def too_complicated?
2323
matches.nil?
2424
end
@@ -29,7 +29,7 @@ def matches
2929

3030
def pattern
3131
operations = '(plus|minus|multiplied by|divided by)'
32-
/What is (-?\d+) #{operations} (-?\d+)( #{operations} (-?\d+))?\?/
32+
/What is (-?\d+)(?: #{operations} (-?\d+))?(?: #{operations} (-?\d+))?\?/
3333
end
3434

3535
def operation(index)
@@ -50,7 +50,7 @@ def n2
5050
end
5151

5252
def n3
53-
matches[6].to_i
53+
matches[-1].to_i
5454
end
5555

5656
def chain?

exercises/practice/wordy/.meta/tests.toml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,21 @@
1212
[88bf4b28-0de3-4883-93c7-db1b14aa806e]
1313
description = "just a number"
1414

15+
[18983214-1dfc-4ebd-ac77-c110dde699ce]
16+
description = "just a zero"
17+
18+
[607c08ee-2241-4288-916d-dae5455c87e6]
19+
description = "just a negative number"
20+
1521
[bb8c655c-cf42-4dfc-90e0-152fcfd8d4e0]
1622
description = "addition"
1723

24+
[bb9f2082-171c-46ad-ad4e-c3f72087c1b5]
25+
description = "addition with a left hand zero"
26+
27+
[6fa05f17-405a-4742-80ae-5d1a8edb0d5d]
28+
description = "addition with a right hand zero"
29+
1830
[79e49e06-c5ae-40aa-a352-7a3a01f70015]
1931
description = "more addition"
2032

exercises/practice/wordy/wordy_test.rb

Lines changed: 128 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -2,103 +2,199 @@
22
require_relative 'wordy'
33

44
class WordyTest < Minitest::Test
5-
def test_addition
5+
def test_just_a_number
66
# skip
7-
problem = WordProblem.new("What is 1 plus 1?")
8-
assert_equal(2, problem.answer)
7+
actual = WordProblem.new("What is 5?").answer
8+
expected = 5
9+
assert_equal expected, actual
10+
end
11+
12+
def test_just_a_zero
13+
skip
14+
actual = WordProblem.new("What is 0?").answer
15+
expected = 0
16+
assert_equal expected, actual
17+
end
18+
19+
def test_just_a_negative_number
20+
skip
21+
actual = WordProblem.new("What is -123?").answer
22+
expected = -123
23+
assert_equal expected, actual
24+
end
25+
26+
def test_addition
27+
skip
28+
actual = WordProblem.new("What is 1 plus 1?").answer
29+
expected = 2
30+
assert_equal expected, actual
31+
end
32+
33+
def test_addition_with_a_left_hand_zero
34+
skip
35+
actual = WordProblem.new("What is 0 plus 2?").answer
36+
expected = 2
37+
assert_equal expected, actual
38+
end
39+
40+
def test_addition_with_a_right_hand_zero
41+
skip
42+
actual = WordProblem.new("What is 3 plus 0?").answer
43+
expected = 3
44+
assert_equal expected, actual
945
end
1046

1147
def test_more_addition
1248
skip
13-
problem = WordProblem.new("What is 53 plus 2?")
14-
assert_equal(55, problem.answer)
49+
actual = WordProblem.new("What is 53 plus 2?").answer
50+
expected = 55
51+
assert_equal expected, actual
1552
end
1653

1754
def test_addition_with_negative_numbers
1855
skip
19-
problem = WordProblem.new("What is -1 plus -10?")
20-
assert_equal(-11, problem.answer)
56+
actual = WordProblem.new("What is -1 plus -10?").answer
57+
expected = -11
58+
assert_equal expected, actual
2159
end
2260

2361
def test_large_addition
2462
skip
25-
problem = WordProblem.new("What is 123 plus 45678?")
26-
assert_equal(45_801, problem.answer)
63+
actual = WordProblem.new("What is 123 plus 45678?").answer
64+
expected = 45_801
65+
assert_equal expected, actual
2766
end
2867

2968
def test_subtraction
3069
skip
31-
problem = WordProblem.new("What is 4 minus -12?")
32-
assert_equal(16, problem.answer)
70+
actual = WordProblem.new("What is 4 minus -12?").answer
71+
expected = 16
72+
assert_equal expected, actual
3373
end
3474

3575
def test_multiplication
3676
skip
37-
problem = WordProblem.new("What is -3 multiplied by 25?")
38-
assert_equal(-75, problem.answer)
77+
actual = WordProblem.new("What is -3 multiplied by 25?").answer
78+
expected = -75
79+
assert_equal expected, actual
3980
end
4081

4182
def test_division
4283
skip
43-
problem = WordProblem.new("What is 33 divided by -3?")
44-
assert_equal(-11, problem.answer)
84+
actual = WordProblem.new("What is 33 divided by -3?").answer
85+
expected = -11
86+
assert_equal expected, actual
4587
end
4688

4789
def test_multiple_additions
4890
skip
49-
problem = WordProblem.new("What is 1 plus 1 plus 1?")
50-
assert_equal(3, problem.answer)
91+
actual = WordProblem.new("What is 1 plus 1 plus 1?").answer
92+
expected = 3
93+
assert_equal expected, actual
5194
end
5295

5396
def test_addition_and_subtraction
5497
skip
55-
problem = WordProblem.new("What is 1 plus 5 minus -2?")
56-
assert_equal(8, problem.answer)
98+
actual = WordProblem.new("What is 1 plus 5 minus -2?").answer
99+
expected = 8
100+
assert_equal expected, actual
57101
end
58102

59103
def test_multiple_subtraction
60104
skip
61-
problem = WordProblem.new("What is 20 minus 4 minus 13?")
62-
assert_equal(3, problem.answer)
105+
actual = WordProblem.new("What is 20 minus 4 minus 13?").answer
106+
expected = 3
107+
assert_equal expected, actual
63108
end
64109

65110
def test_subtraction_then_addition
66111
skip
67-
problem = WordProblem.new("What is 17 minus 6 plus 3?")
68-
assert_equal(14, problem.answer)
112+
actual = WordProblem.new("What is 17 minus 6 plus 3?").answer
113+
expected = 14
114+
assert_equal expected, actual
69115
end
70116

71117
def test_multiple_multiplication
72118
skip
73-
problem = WordProblem.new("What is 2 multiplied by -2 multiplied by 3?")
74-
assert_equal(-12, problem.answer)
119+
actual = WordProblem.new("What is 2 multiplied by -2 multiplied by 3?").answer
120+
expected = -12
121+
assert_equal expected, actual
75122
end
76123

77124
def test_addition_and_multiplication
78125
skip
79-
problem = WordProblem.new("What is -3 plus 7 multiplied by -2?")
80-
message = "You should ignore order of precedence. -3 + 7 * -2 = -8, not #{problem.answer}"
81-
assert_equal(-8, problem.answer, message)
126+
actual = WordProblem.new("What is -3 plus 7 multiplied by -2?").answer
127+
expected = -8
128+
assert_equal expected, actual
82129
end
83130

84131
def test_multiple_division
85132
skip
86-
problem = WordProblem.new("What is -12 divided by 2 divided by -3?")
87-
assert_equal(2, problem.answer)
133+
actual = WordProblem.new("What is -12 divided by 2 divided by -3?").answer
134+
expected = 2
135+
assert_equal expected, actual
88136
end
89137

90138
def test_unknown_operation
91139
skip
92-
problem = WordProblem.new("What is 52 cubed?")
93140
assert_raises(ArgumentError) do
141+
problem = WordProblem.new("What is 52 cubed?")
94142
problem.answer
95143
end
96144
end
97145

98146
def test_non_math_question
99147
skip
100-
problem = WordProblem.new("Who is the President of the United States?")
101148
assert_raises(ArgumentError) do
149+
problem = WordProblem.new("Who is the President of the United States?")
150+
problem.answer
151+
end
152+
end
153+
154+
def test_reject_problem_missing_an_operand
155+
skip
156+
assert_raises(ArgumentError) do
157+
problem = WordProblem.new("What is 1 plus?")
158+
problem.answer
159+
end
160+
end
161+
162+
def test_reject_problem_with_no_operands_or_operators
163+
skip
164+
assert_raises(ArgumentError) do
165+
problem = WordProblem.new("What is?")
166+
problem.answer
167+
end
168+
end
169+
170+
def test_reject_two_operations_in_a_row
171+
skip
172+
assert_raises(ArgumentError) do
173+
problem = WordProblem.new("What is 1 plus plus 2?")
174+
problem.answer
175+
end
176+
end
177+
178+
def test_reject_two_numbers_in_a_row
179+
skip
180+
assert_raises(ArgumentError) do
181+
problem = WordProblem.new("What is 1 plus 2 1?")
182+
problem.answer
183+
end
184+
end
185+
186+
def test_reject_postfix_notation
187+
skip
188+
assert_raises(ArgumentError) do
189+
problem = WordProblem.new("What is 1 2 plus?")
190+
problem.answer
191+
end
192+
end
193+
194+
def test_reject_prefix_notation
195+
skip
196+
assert_raises(ArgumentError) do
197+
problem = WordProblem.new("What is plus 1 2?")
102198
problem.answer
103199
end
104200
end

0 commit comments

Comments
 (0)