games_dice 0.3.12 → 0.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/.github/workflows/ci.yml +38 -0
- data/.gitignore +1 -0
- data/.rubocop.yml +53 -0
- data/.yardopts +1 -1
- data/CHANGELOG.md +18 -0
- data/Gemfile +12 -0
- data/README.md +11 -33
- data/Rakefile +10 -23
- data/ext/games_dice/extconf.rb +4 -22
- data/ext/games_dice/games_dice.c +1 -1
- data/ext/games_dice/probabilities.c +128 -9
- data/ext/games_dice/probabilities.h +1 -1
- data/games_dice.gemspec +22 -36
- data/lib/games_dice/bunch.rb +203 -247
- data/lib/games_dice/bunch_helpers.rb +68 -0
- data/lib/games_dice/complex_die.rb +151 -270
- data/lib/games_dice/complex_die_helpers.rb +260 -60
- data/lib/games_dice/constants.rb +10 -10
- data/lib/games_dice/dice.rb +153 -143
- data/lib/games_dice/die.rb +101 -97
- data/lib/games_dice/die_result.rb +206 -189
- data/lib/games_dice/map_rule.rb +72 -70
- data/lib/games_dice/marshal.rb +41 -13
- data/lib/games_dice/parser.rb +245 -218
- data/lib/games_dice/reroll_rule.rb +76 -77
- data/lib/games_dice/version.rb +4 -1
- data/lib/games_dice.rb +23 -25
- data/spec/bunch_spec.rb +399 -420
- data/spec/complex_die_spec.rb +314 -305
- data/spec/dice_spec.rb +33 -34
- data/spec/die_result_spec.rb +174 -181
- data/spec/die_spec.rb +81 -81
- data/spec/helpers.rb +25 -25
- data/spec/map_rule_spec.rb +40 -44
- data/spec/parser_spec.rb +106 -82
- data/spec/probability_spec.rb +522 -526
- data/spec/readme_spec.rb +410 -390
- data/spec/reroll_rule_spec.rb +40 -44
- metadata +17 -129
- data/.travis.yml +0 -14
- data/lib/games_dice/prob_helpers.rb +0 -259
- data/lib/games_dice/probabilities.rb +0 -244
data/spec/dice_spec.rb
CHANGED
|
@@ -1,34 +1,33 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
before
|
|
8
|
-
srand(
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
describe '1d10+2' do
|
|
12
|
-
let(:dice) {
|
|
13
|
-
|
|
14
|
-
it
|
|
15
|
-
[5,4,10,10,7,5,9].each do |expected_total|
|
|
16
|
-
dice.roll.
|
|
17
|
-
dice.result.
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
describe '2d6+6' do
|
|
23
|
-
let(:dice) {
|
|
24
|
-
|
|
25
|
-
it
|
|
26
|
-
[15,12,17,15,13,13,16].each do |expected_total|
|
|
27
|
-
dice.roll.
|
|
28
|
-
dice.result.
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'helpers'
|
|
4
|
+
|
|
5
|
+
describe GamesDice::Dice do
|
|
6
|
+
describe 'dice scheme' do
|
|
7
|
+
before do
|
|
8
|
+
srand(67_809)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
describe '1d10+2' do
|
|
12
|
+
let(:dice) { described_class.new([{ sides: 10, ndice: 1 }], 2) }
|
|
13
|
+
|
|
14
|
+
it 'simulate rolling a ten-sided die, and adding two to each result' do
|
|
15
|
+
[5, 4, 10, 10, 7, 5, 9].each do |expected_total|
|
|
16
|
+
expect(dice.roll).to eql expected_total
|
|
17
|
+
expect(dice.result).to eql expected_total
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
describe '2d6+6' do
|
|
23
|
+
let(:dice) { described_class.new([{ sides: 6, ndice: 2 }], 6) }
|
|
24
|
+
|
|
25
|
+
it 'simulate rolling two six-sided dice and adding six to the result' do
|
|
26
|
+
[15, 12, 17, 15, 13, 13, 16].each do |expected_total|
|
|
27
|
+
expect(dice.roll).to eql expected_total
|
|
28
|
+
expect(dice.result).to eql expected_total
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
data/spec/die_result_spec.rb
CHANGED
|
@@ -1,261 +1,254 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'helpers'
|
|
2
4
|
|
|
3
5
|
describe GamesDice::DieResult do
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
die_result
|
|
9
|
-
die_result.
|
|
10
|
-
die_result.rolls.should == []
|
|
11
|
-
die_result.roll_reasons.should == []
|
|
6
|
+
describe '.new' do
|
|
7
|
+
it "work without parameters to represent 'no results yet'" do
|
|
8
|
+
die_result = described_class.new
|
|
9
|
+
expect(die_result.value).to be_nil
|
|
10
|
+
expect(die_result.rolls).to eql []
|
|
11
|
+
expect(die_result.roll_reasons).to eql []
|
|
12
12
|
end
|
|
13
13
|
|
|
14
|
-
it
|
|
15
|
-
die_result =
|
|
16
|
-
die_result.value.
|
|
17
|
-
die_result.rolls.
|
|
18
|
-
die_result.roll_reasons.
|
|
14
|
+
it 'work with a single Integer param to represent an initial result' do
|
|
15
|
+
die_result = described_class.new(8)
|
|
16
|
+
expect(die_result.value).to be 8
|
|
17
|
+
expect(die_result.rolls).to eql [8]
|
|
18
|
+
expect(die_result.roll_reasons).to eql [:basic]
|
|
19
19
|
end
|
|
20
20
|
|
|
21
|
-
it
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
it 'not accept a param that cannot be coerced to Integer' do
|
|
22
|
+
expect { described_class.new([]) }.to raise_error(TypeError)
|
|
23
|
+
expect { described_class.new('N') }.to raise_error(ArgumentError)
|
|
24
24
|
end
|
|
25
25
|
|
|
26
|
-
it
|
|
27
|
-
|
|
28
|
-
|
|
26
|
+
it 'not accept unknown reasons for making a roll' do
|
|
27
|
+
expect { described_class.new(8, 'wooo') }.to raise_error(ArgumentError)
|
|
28
|
+
expect { described_class.new(8, :frabulous) }.to raise_error(ArgumentError)
|
|
29
29
|
end
|
|
30
|
-
|
|
31
30
|
end
|
|
32
31
|
|
|
33
|
-
describe
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
let(:die_result) { GamesDice::DieResult.new() }
|
|
32
|
+
describe '#add_roll' do
|
|
33
|
+
context "when starting from 'no results yet'" do
|
|
34
|
+
let(:die_result) { described_class.new }
|
|
37
35
|
|
|
38
|
-
it
|
|
36
|
+
it 'create an initial result' do
|
|
39
37
|
die_result.add_roll(5)
|
|
40
|
-
die_result.value.
|
|
41
|
-
die_result.rolls.
|
|
42
|
-
die_result.roll_reasons.
|
|
38
|
+
expect(die_result.value).to be 5
|
|
39
|
+
expect(die_result.rolls).to eql [5]
|
|
40
|
+
expect(die_result.roll_reasons).to eql [:basic]
|
|
43
41
|
end
|
|
44
42
|
|
|
45
|
-
it
|
|
46
|
-
die_result.add_roll(4
|
|
47
|
-
die_result.value.
|
|
48
|
-
die_result.rolls.
|
|
49
|
-
die_result.roll_reasons.
|
|
43
|
+
it 'accept non-basic reasons for the first roll' do
|
|
44
|
+
die_result.add_roll(4, :reroll_subtract)
|
|
45
|
+
expect(die_result.value).to be(-4)
|
|
46
|
+
expect(die_result.rolls).to eql [4]
|
|
47
|
+
expect(die_result.roll_reasons).to eql [:reroll_subtract]
|
|
50
48
|
end
|
|
51
49
|
|
|
52
|
-
it
|
|
53
|
-
|
|
54
|
-
|
|
50
|
+
it 'not accept a first param that cannot be coerced to Integer' do
|
|
51
|
+
expect { die_result.add_roll([]) }.to raise_error(TypeError)
|
|
52
|
+
expect { die_result.add_roll('N') }.to raise_error(ArgumentError)
|
|
55
53
|
end
|
|
56
54
|
|
|
57
|
-
it
|
|
58
|
-
|
|
59
|
-
|
|
55
|
+
it 'not accept an unsupported second param' do
|
|
56
|
+
expect { die_result.add_roll(5, []) }.to raise_error(ArgumentError)
|
|
57
|
+
expect { die_result.add_roll(15, :bam) }.to raise_error(ArgumentError)
|
|
60
58
|
end
|
|
61
|
-
|
|
62
59
|
end
|
|
63
60
|
|
|
64
|
-
context
|
|
65
|
-
let(:die_result) {
|
|
61
|
+
context 'when starting with an initial result' do
|
|
62
|
+
let(:die_result) { described_class.new(7) }
|
|
66
63
|
|
|
67
|
-
it
|
|
68
|
-
|
|
69
|
-
|
|
64
|
+
it 'not accept a first param that cannot be coerced to Integer' do
|
|
65
|
+
expect { die_result.add_roll([]) }.to raise_error(TypeError)
|
|
66
|
+
expect { die_result.add_roll('N') }.to raise_error(ArgumentError)
|
|
70
67
|
end
|
|
71
68
|
|
|
72
|
-
it
|
|
73
|
-
|
|
74
|
-
|
|
69
|
+
it 'not accept an unsupported second param' do
|
|
70
|
+
expect { die_result.add_roll(5, []) }.to raise_error(ArgumentError)
|
|
71
|
+
expect { die_result.add_roll(15, :bam) }.to raise_error(ArgumentError)
|
|
75
72
|
end
|
|
76
73
|
|
|
77
|
-
context
|
|
78
|
-
it
|
|
74
|
+
context 'when adding another basic roll' do
|
|
75
|
+
it 'replace an initial result, as if the die were re-rolled' do
|
|
79
76
|
die_result.add_roll(5)
|
|
80
|
-
die_result.value.
|
|
81
|
-
die_result.rolls.
|
|
82
|
-
die_result.roll_reasons.
|
|
77
|
+
expect(die_result.value).to be 5
|
|
78
|
+
expect(die_result.rolls).to eql [7, 5]
|
|
79
|
+
expect(die_result.roll_reasons).to eql %i[basic basic]
|
|
83
80
|
end
|
|
84
81
|
end
|
|
85
82
|
|
|
86
|
-
context
|
|
87
|
-
it
|
|
88
|
-
die_result.add_roll(
|
|
89
|
-
die_result.value.
|
|
90
|
-
die_result.rolls.
|
|
91
|
-
die_result.roll_reasons.
|
|
83
|
+
context 'with exploding dice' do
|
|
84
|
+
it 'add to value when exploding up' do
|
|
85
|
+
die_result.add_roll(6, :reroll_add)
|
|
86
|
+
expect(die_result.value).to be 13
|
|
87
|
+
expect(die_result.rolls).to eql [7, 6]
|
|
88
|
+
expect(die_result.roll_reasons).to eql %i[basic reroll_add]
|
|
92
89
|
end
|
|
93
90
|
|
|
94
|
-
it
|
|
95
|
-
die_result.add_roll(
|
|
96
|
-
die_result.value.
|
|
97
|
-
die_result.rolls.
|
|
98
|
-
die_result.roll_reasons.
|
|
91
|
+
it 'subtract from value when exploding down' do
|
|
92
|
+
die_result.add_roll(4, :reroll_subtract)
|
|
93
|
+
expect(die_result.value).to be 3
|
|
94
|
+
expect(die_result.rolls).to eql [7, 4]
|
|
95
|
+
expect(die_result.roll_reasons).to eql %i[basic reroll_subtract]
|
|
99
96
|
end
|
|
100
97
|
end
|
|
101
98
|
|
|
102
|
-
context
|
|
103
|
-
it
|
|
104
|
-
die_result.add_roll(
|
|
105
|
-
die_result.value.
|
|
106
|
-
die_result.rolls.
|
|
107
|
-
die_result.roll_reasons.
|
|
108
|
-
|
|
109
|
-
die_result.add_roll(
|
|
110
|
-
die_result.value.
|
|
111
|
-
die_result.rolls.
|
|
112
|
-
die_result.roll_reasons.
|
|
99
|
+
context 'with re-roll dice' do
|
|
100
|
+
it 'optionally replace roll unconditionally' do
|
|
101
|
+
die_result.add_roll(2, :reroll_replace)
|
|
102
|
+
expect(die_result.value).to be 2
|
|
103
|
+
expect(die_result.rolls).to eql [7, 2]
|
|
104
|
+
expect(die_result.roll_reasons).to eql %i[basic reroll_replace]
|
|
105
|
+
|
|
106
|
+
die_result.add_roll(5, :reroll_replace)
|
|
107
|
+
expect(die_result.value).to be 5
|
|
108
|
+
expect(die_result.rolls).to eql [7, 2, 5]
|
|
109
|
+
expect(die_result.roll_reasons).to eql %i[basic reroll_replace reroll_replace]
|
|
113
110
|
end
|
|
114
111
|
|
|
115
|
-
it
|
|
116
|
-
die_result.add_roll(
|
|
117
|
-
die_result.value.
|
|
118
|
-
die_result.rolls.
|
|
119
|
-
die_result.roll_reasons.
|
|
112
|
+
it 'optionally use best roll' do
|
|
113
|
+
die_result.add_roll(2, :reroll_use_best)
|
|
114
|
+
expect(die_result.value).to be 7
|
|
115
|
+
expect(die_result.rolls).to eql [7, 2]
|
|
116
|
+
expect(die_result.roll_reasons).to eql %i[basic reroll_use_best]
|
|
120
117
|
|
|
121
|
-
die_result.add_roll(
|
|
122
|
-
die_result.value.
|
|
123
|
-
die_result.rolls.
|
|
124
|
-
die_result.roll_reasons.
|
|
118
|
+
die_result.add_roll(9, :reroll_use_best)
|
|
119
|
+
expect(die_result.value).to be 9
|
|
120
|
+
expect(die_result.rolls).to eql [7, 2, 9]
|
|
121
|
+
expect(die_result.roll_reasons).to eql %i[basic reroll_use_best reroll_use_best]
|
|
125
122
|
end
|
|
126
123
|
|
|
127
|
-
it
|
|
128
|
-
die_result.add_roll(
|
|
129
|
-
die_result.value.
|
|
130
|
-
die_result.rolls.
|
|
131
|
-
die_result.roll_reasons.
|
|
124
|
+
it 'optionally use worst roll' do
|
|
125
|
+
die_result.add_roll(4, :reroll_use_worst)
|
|
126
|
+
expect(die_result.value).to be 4
|
|
127
|
+
expect(die_result.rolls).to eql [7, 4]
|
|
128
|
+
expect(die_result.roll_reasons).to eql %i[basic reroll_use_worst]
|
|
132
129
|
|
|
133
|
-
die_result.add_roll(
|
|
134
|
-
die_result.value.
|
|
135
|
-
die_result.rolls.
|
|
136
|
-
die_result.roll_reasons.
|
|
130
|
+
die_result.add_roll(5, :reroll_use_worst)
|
|
131
|
+
expect(die_result.value).to be 4
|
|
132
|
+
expect(die_result.rolls).to eql [7, 4, 5]
|
|
133
|
+
expect(die_result.roll_reasons).to eql %i[basic reroll_use_worst reroll_use_worst]
|
|
137
134
|
end
|
|
138
135
|
end
|
|
139
136
|
|
|
140
|
-
context
|
|
141
|
-
it
|
|
142
|
-
die_result.add_roll(
|
|
143
|
-
die_result.add_roll(
|
|
144
|
-
die_result.value.
|
|
145
|
-
die_result.rolls.
|
|
146
|
-
die_result.roll_reasons.
|
|
147
|
-
|
|
148
|
-
die_result.add_roll(
|
|
149
|
-
die_result.value.
|
|
150
|
-
die_result.rolls.
|
|
151
|
-
die_result.roll_reasons.
|
|
152
|
-
|
|
153
|
-
die_result.add_roll(
|
|
154
|
-
die_result.value.
|
|
155
|
-
die_result.rolls.
|
|
156
|
-
die_result.roll_reasons.
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
die_result.
|
|
160
|
-
die_result.
|
|
161
|
-
die_result.
|
|
137
|
+
context 'with combinations of reroll reasons' do
|
|
138
|
+
it 'correctly handle valid reasons for extra rolls in combination' do
|
|
139
|
+
die_result.add_roll(10, :reroll_add)
|
|
140
|
+
die_result.add_roll(3, :reroll_subtract)
|
|
141
|
+
expect(die_result.value).to be 14
|
|
142
|
+
expect(die_result.rolls).to eql [7, 10, 3]
|
|
143
|
+
expect(die_result.roll_reasons).to eql %i[basic reroll_add reroll_subtract]
|
|
144
|
+
|
|
145
|
+
die_result.add_roll(12, :reroll_replace)
|
|
146
|
+
expect(die_result.value).to be 12
|
|
147
|
+
expect(die_result.rolls).to eql [7, 10, 3, 12]
|
|
148
|
+
expect(die_result.roll_reasons).to eql %i[basic reroll_add reroll_subtract reroll_replace]
|
|
149
|
+
|
|
150
|
+
die_result.add_roll(9, :reroll_use_best)
|
|
151
|
+
expect(die_result.value).to be 12
|
|
152
|
+
expect(die_result.rolls).to eql [7, 10, 3, 12, 9]
|
|
153
|
+
expect(die_result.roll_reasons).to eql %i[basic reroll_add reroll_subtract reroll_replace
|
|
154
|
+
reroll_use_best]
|
|
155
|
+
|
|
156
|
+
die_result.add_roll(15, :reroll_add)
|
|
157
|
+
expect(die_result.value).to be 27
|
|
158
|
+
expect(die_result.rolls).to eql [7, 10, 3, 12, 9, 15]
|
|
159
|
+
expect(die_result.roll_reasons).to eql %i[basic reroll_add reroll_subtract reroll_replace
|
|
160
|
+
reroll_use_best reroll_add]
|
|
162
161
|
end
|
|
163
162
|
end
|
|
164
|
-
|
|
165
163
|
end
|
|
166
|
-
|
|
167
164
|
end
|
|
168
165
|
|
|
169
|
-
describe
|
|
170
|
-
let(:die_result) {
|
|
166
|
+
describe '#explain_value' do
|
|
167
|
+
let(:die_result) { described_class.new }
|
|
171
168
|
|
|
172
|
-
it "
|
|
173
|
-
die_result.explain_value.
|
|
169
|
+
it "be empty string for 'no results yet'" do
|
|
170
|
+
expect(die_result.explain_value).to eql ''
|
|
174
171
|
end
|
|
175
172
|
|
|
176
|
-
it
|
|
173
|
+
it 'be a simple stringified number when there is one die roll' do
|
|
177
174
|
die_result.add_roll(3)
|
|
178
|
-
die_result.explain_value.
|
|
175
|
+
expect(die_result.explain_value).to eql '3'
|
|
179
176
|
end
|
|
180
177
|
|
|
181
|
-
it
|
|
178
|
+
it 'describe all single rolls made and how they combine' do
|
|
182
179
|
die_result.add_roll(6)
|
|
183
|
-
die_result.explain_value.
|
|
184
|
-
|
|
185
|
-
die_result.add_roll(5,:reroll_add)
|
|
186
|
-
die_result.explain_value.should == '[6+5] 11'
|
|
180
|
+
expect(die_result.explain_value).to eql '6'
|
|
187
181
|
|
|
188
|
-
die_result.add_roll(
|
|
189
|
-
die_result.explain_value.
|
|
182
|
+
die_result.add_roll(5, :reroll_add)
|
|
183
|
+
expect(die_result.explain_value).to eql '[6+5] 11'
|
|
190
184
|
|
|
191
|
-
die_result.add_roll(
|
|
192
|
-
die_result.explain_value.
|
|
185
|
+
die_result.add_roll(2, :reroll_replace)
|
|
186
|
+
expect(die_result.explain_value).to eql '[6+5|2] 2'
|
|
193
187
|
|
|
194
|
-
die_result.add_roll(
|
|
195
|
-
die_result.explain_value.
|
|
188
|
+
die_result.add_roll(7, :reroll_subtract)
|
|
189
|
+
expect(die_result.explain_value).to eql '[6+5|2-7] -5'
|
|
196
190
|
|
|
197
|
-
die_result.add_roll(
|
|
198
|
-
die_result.explain_value.
|
|
191
|
+
die_result.add_roll(4, :reroll_use_worst)
|
|
192
|
+
expect(die_result.explain_value).to eql '[6+5|2-7\\4] -5'
|
|
199
193
|
|
|
194
|
+
die_result.add_roll(3, :reroll_use_best)
|
|
195
|
+
expect(die_result.explain_value).to eql '[6+5|2-7\\4/3] 3'
|
|
200
196
|
end
|
|
201
|
-
|
|
202
197
|
end
|
|
203
198
|
|
|
204
|
-
it
|
|
205
|
-
die_result =
|
|
206
|
-
(die_result + 3).
|
|
207
|
-
(4 + die_result).
|
|
208
|
-
(die_result - 2).
|
|
209
|
-
(9 - die_result).
|
|
199
|
+
it 'combine via +,- and * intuitively based on #value' do
|
|
200
|
+
die_result = described_class.new(7)
|
|
201
|
+
expect(die_result + 3).to be 10
|
|
202
|
+
expect(4 + die_result).to be 11
|
|
203
|
+
expect(die_result - 2).to be 5
|
|
204
|
+
expect(9 - die_result).to be 2
|
|
210
205
|
|
|
211
|
-
(die_result + 7.7).
|
|
212
|
-
(4.1 + die_result).
|
|
206
|
+
expect(die_result + 7.7).to be 14.7
|
|
207
|
+
expect(4.1 + die_result).to be 11.1
|
|
213
208
|
|
|
214
|
-
(die_result * 2).
|
|
215
|
-
(1 * die_result).
|
|
209
|
+
expect(die_result * 2).to be 14
|
|
210
|
+
expect(1 * die_result).to be 7
|
|
216
211
|
|
|
217
|
-
other_die_result =
|
|
218
|
-
other_die_result.add_roll(6
|
|
219
|
-
(die_result + other_die_result).
|
|
220
|
-
(other_die_result - die_result).
|
|
212
|
+
other_die_result = described_class.new(6)
|
|
213
|
+
other_die_result.add_roll(6, :reroll_add)
|
|
214
|
+
expect(die_result + other_die_result).to be 19
|
|
215
|
+
expect(other_die_result - die_result).to be 5
|
|
221
216
|
end
|
|
222
217
|
|
|
223
|
-
it
|
|
224
|
-
die_result =
|
|
225
|
-
|
|
226
|
-
(die_result > 3).
|
|
227
|
-
(
|
|
228
|
-
(die_result >= 7).
|
|
229
|
-
(9.5
|
|
230
|
-
(die_result < 3).
|
|
231
|
-
(
|
|
232
|
-
(die_result <= 8).
|
|
233
|
-
(
|
|
234
|
-
|
|
235
|
-
other_die_result =
|
|
236
|
-
other_die_result.add_roll(6
|
|
237
|
-
(die_result > other_die_result).
|
|
238
|
-
(other_die_result > die_result).
|
|
239
|
-
(die_result >= other_die_result).
|
|
240
|
-
(other_die_result >= die_result).
|
|
241
|
-
(die_result < other_die_result).
|
|
242
|
-
(other_die_result < die_result).
|
|
243
|
-
(die_result <= other_die_result).
|
|
244
|
-
(other_die_result <= die_result).
|
|
245
|
-
|
|
218
|
+
it 'support comparison with >,<,>=,<= as if it were an integer, based on #value' do
|
|
219
|
+
die_result = described_class.new(7)
|
|
220
|
+
|
|
221
|
+
expect(die_result > 3).to be true
|
|
222
|
+
expect(die_result < 14).to be true
|
|
223
|
+
expect(die_result >= 7).to be true
|
|
224
|
+
expect(die_result <= 9.5).to be true
|
|
225
|
+
expect(die_result < 3).to be false
|
|
226
|
+
expect(die_result > 14).to be false
|
|
227
|
+
expect(die_result <= 8).to be true
|
|
228
|
+
expect(die_result >= 14).to be false
|
|
229
|
+
|
|
230
|
+
other_die_result = described_class.new(6)
|
|
231
|
+
other_die_result.add_roll(6, :reroll_add)
|
|
232
|
+
expect(die_result > other_die_result).to be false
|
|
233
|
+
expect(other_die_result > die_result).to be true
|
|
234
|
+
expect(die_result >= other_die_result).to be false
|
|
235
|
+
expect(other_die_result >= die_result).to be true
|
|
236
|
+
expect(die_result < other_die_result).to be true
|
|
237
|
+
expect(other_die_result < die_result).to be false
|
|
238
|
+
expect(die_result <= other_die_result).to be true
|
|
239
|
+
expect(other_die_result <= die_result).to be false
|
|
246
240
|
end
|
|
247
241
|
|
|
248
|
-
it
|
|
242
|
+
it 'sort, based on #value' do
|
|
249
243
|
die_results = [
|
|
250
|
-
|
|
244
|
+
described_class.new(7), described_class.new(5), described_class.new(8), described_class.new(3)
|
|
251
245
|
]
|
|
252
246
|
|
|
253
247
|
die_results.sort!
|
|
254
248
|
|
|
255
|
-
die_results[0].value.
|
|
256
|
-
die_results[1].value.
|
|
257
|
-
die_results[2].value.
|
|
258
|
-
die_results[3].value.
|
|
249
|
+
expect(die_results[0].value).to be 3
|
|
250
|
+
expect(die_results[1].value).to be 5
|
|
251
|
+
expect(die_results[2].value).to be 7
|
|
252
|
+
expect(die_results[3].value).to be 8
|
|
259
253
|
end
|
|
260
|
-
|
|
261
254
|
end
|