acpc_poker_types 3.2.1 → 3.3.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 621b7409ffa2bb10cfd149ea4095d18e01e2fb78
4
- data.tar.gz: 7a6b6c71dafcea5276d4a0cbccf01e24b9621a03
3
+ metadata.gz: dd7d01d757da0d73681d9036950821b146f0a259
4
+ data.tar.gz: 764812a45f696ade63e20fea872e4816255eb917
5
5
  SHA512:
6
- metadata.gz: 1b3f6989f5dbb77fac80ac711e0783928acb55345add460f42bb6d6860cf5c9bbaf233f6b36e69ec5c3a1a4050928f9b64bfa8a68f134683b272072355e4a858
7
- data.tar.gz: 63face898038f4ff0a877aab6d0512af11c0a0f639db5d3e4455cb53e8a16d0d1d2ba1b686abb310c09162561f436d29150afe7f3178bedd44f2abb1e738e665
6
+ metadata.gz: 0a44162e009b32492ef5781c034885ca8c1f72317983ff5140af5137f9a2f6f688c971d6319566a370c2135c1b686d92add6db848eedf17aeec1d18ac3301df9
7
+ data.tar.gz: 898543b130efa4a932eff9073921ecec00f042127fc11d78bf589501aae5e42902259fd55976dcd1064f18e7078f916ffb91565c1d7aae7a5682a29b40a50d70
@@ -11,6 +11,7 @@ require "acpc_poker_types/player"
11
11
  require "acpc_poker_types/rank"
12
12
  require "acpc_poker_types/suit"
13
13
  require "acpc_poker_types/acpc_dealer_data"
14
+ require 'acpc_poker_types/seat'
14
15
  require 'acpc_poker_types/integer_as_seat'
15
16
 
16
17
  module AcpcPokerTypes
@@ -1,72 +1,8 @@
1
+ require 'acpc_poker_types/seat'
1
2
  module AcpcPokerTypes
2
3
  module IntegerAsSeat
3
4
  refine Integer do
4
- # @param [Integer] seat The seat to which the relative position is desired.
5
- # @param [Integer] number_of_players The number of players at the table.
6
- # @return [Integer] The relative position of +self+ to +seat+, given the
7
- # number of players at the table, +number_of_players+, indexed such that
8
- # the seat immediately to the left of +seat+ has a +position_relative_to+ of
9
- # zero.
10
- # @example <code>1.position_relative_to 0, 3</code> == 0
11
- # @example <code>1.position_relative_to 1, 3</code> == 2
12
- def position_relative_to(seat, number_of_players)
13
- unless seat.seat_in_bounds?(number_of_players) &&
14
- seat_in_bounds?(number_of_players)
15
- raise "Seat #{seat} out of bounds for #{number_of_players} players"
16
- end
17
-
18
- adjusted_seat = if self > seat
19
- self
20
- else
21
- self + number_of_players
22
- end
23
- adjusted_seat - seat - 1
24
- end
25
-
26
- # Inverse operation of +position_relative_to+.
27
- # Given
28
- # <code>relative_position = seat.position_relative_to to_seat, number_of_players</code>
29
- # then
30
- # <code>to_seat = seat.seat_from_relative_position relative_position, number_of_players</code>
31
- #
32
- # @param [Integer] relative_position_of_self_to_result The relative position
33
- # of seat +self+ to the seat that is returned by this function.
34
- # @param [Integer] number_of_players The number of players at the table.
35
- # @return [Integer] The seat to which the relative position,
36
- # +relative_position_of_self_to_result+, of +self+ was derived, given the
37
- # number of players at the table, +number_of_players+, indexed such that
38
- # the seat immediately to the left of +from_seat+ has a
39
- # +position_relative_to+ of zero.
40
- # @example <code>1.seat_from_relative_position 0, 3</code> == 0
41
- # @example <code>1.seat_from_relative_position 2, 3</code> == 1
42
- def seat_from_relative_position(relative_position_of_self_to_result,
43
- number_of_players)
44
- unless seat_in_bounds?(number_of_players)
45
- raise "Seat #{seat} out of bounds for #{number_of_players} players"
46
- end
47
-
48
- unless relative_position_of_self_to_result.seat_in_bounds?(
49
- number_of_players
50
- )
51
- raise "Relative position #{relative_position_of_self_to_result} out of bounds for #{number_of_players} players"
52
- end
53
-
54
- position_adjustment = relative_position_of_self_to_result + 1
55
-
56
- to_seat = self + number_of_players - position_adjustment
57
- if self > to_seat || !to_seat.seat_in_bounds?(number_of_players)
58
- self - position_adjustment
59
- else
60
- to_seat
61
- end
62
- end
63
-
64
- # @param [Integer] number_of_players The number of players at the table.
65
- # @return [Bool] Reports whether or not +self+ represents an out of bounds
66
- # seat.
67
- def seat_in_bounds?(number_of_players)
68
- self < number_of_players && self >= 0
69
- end
5
+ include SeatLike
70
6
  end
71
7
  end
72
8
  end
@@ -0,0 +1,85 @@
1
+ require 'delegate'
2
+
3
+ module AcpcPokerTypes
4
+ module SeatLike
5
+ # @param [Integer] seat The seat to which the relative position is desired.
6
+ # @param [Integer] number_of_players The number of players at the table.
7
+ # @return [Integer] The relative position of +self+ to +seat+, given the
8
+ # number of players at the table, +number_of_players+, indexed such that
9
+ # the seat immediately to the left of +seat+ has a +position_relative_to+ of
10
+ # zero.
11
+ # @example <code>1.position_relative_to 0, 3</code> == 0
12
+ # @example <code>1.position_relative_to 1, 3</code> == 2
13
+ def position_relative_to(seat, number_of_players)
14
+ unless seat.seat_in_bounds?(number_of_players) &&
15
+ seat_in_bounds?(number_of_players)
16
+ raise "Seat #{seat} out of bounds for #{number_of_players} players"
17
+ end
18
+
19
+ adjusted_seat = if self > seat
20
+ self
21
+ else
22
+ self + number_of_players
23
+ end
24
+ adjusted_seat - seat - 1
25
+ end
26
+
27
+ # Inverse operation of +position_relative_to+.
28
+ # Given
29
+ # <code>relative_position = seat.position_relative_to to_seat, number_of_players</code>
30
+ # then
31
+ # <code>to_seat = seat.seat_from_relative_position relative_position, number_of_players</code>
32
+ #
33
+ # @param [Integer] relative_position_of_self_to_result The relative position
34
+ # of seat +self+ to the seat that is returned by this function.
35
+ # @param [Integer] number_of_players The number of players at the table.
36
+ # @return [Integer] The seat to which the relative position,
37
+ # +relative_position_of_self_to_result+, of +self+ was derived, given the
38
+ # number of players at the table, +number_of_players+, indexed such that
39
+ # the seat immediately to the left of +from_seat+ has a
40
+ # +position_relative_to+ of zero.
41
+ # @example <code>1.seat_from_relative_position 0, 3</code> == 0
42
+ # @example <code>1.seat_from_relative_position 2, 3</code> == 1
43
+ def seat_from_relative_position(
44
+ relative_position_of_self_to_result,
45
+ number_of_players
46
+ )
47
+ unless seat_in_bounds?(number_of_players)
48
+ raise "Seat #{seat} out of bounds for #{number_of_players} players"
49
+ end
50
+
51
+ unless relative_position_of_self_to_result.seat_in_bounds?(
52
+ number_of_players
53
+ )
54
+ raise "Relative position #{relative_position_of_self_to_result} out of bounds for #{number_of_players} players"
55
+ end
56
+
57
+ position_adjustment = relative_position_of_self_to_result + 1
58
+
59
+ to_seat = self.class.new(
60
+ self + number_of_players - position_adjustment
61
+ )
62
+ if self > to_seat || !to_seat.seat_in_bounds?(number_of_players)
63
+ self - position_adjustment
64
+ else
65
+ to_seat
66
+ end
67
+ end
68
+
69
+ # @param [Integer] number_of_players The number of players at the table.
70
+ # @return [Bool] Reports whether or not +self+ represents an out of bounds
71
+ # seat.
72
+ def seat_in_bounds?(number_of_players)
73
+ self < number_of_players && self >= 0
74
+ end
75
+ end
76
+
77
+ class Seat < DelegateClass(Integer)
78
+ include SeatLike
79
+
80
+ def initialize(seat)
81
+ @seat = seat.to_i
82
+ super @seat
83
+ end
84
+ end
85
+ end
@@ -1,3 +1,3 @@
1
1
  module AcpcPokerTypes
2
- VERSION = '3.2.1'
2
+ VERSION = '3.3.1'
3
3
  end
@@ -14,7 +14,7 @@
14
14
  <img src="./assets/0.7.1/loading.gif" alt="loading"/>
15
15
  </div>
16
16
  <div id="wrapper" style="display:none;">
17
- <div class="timestamp">Generated <abbr class="timeago" title="2013-05-16T14:10:19-06:00">2013-05-16T14:10:19-06:00</abbr></div>
17
+ <div class="timestamp">Generated <abbr class="timeago" title="2013-06-03T17:03:54-06:00">2013-06-03T17:03:54-06:00</abbr></div>
18
18
  <ul class="group_tabs"></ul>
19
19
 
20
20
  <div id="content">
@@ -0,0 +1,63 @@
1
+ # Spec helper (must include first to track code coverage with SimpleCov)
2
+ require File.expand_path('../support/spec_helper', __FILE__)
3
+
4
+ require "acpc_poker_types/seat"
5
+ include AcpcPokerTypes
6
+
7
+ describe Seat do
8
+ describe '#position_relative_to' do
9
+ it 'works for basic examples' do
10
+ Seat.new(1).position_relative_to(Seat.new(0), 3).must_equal 0
11
+ Seat.new(1).position_relative_to(Seat.new(1), 3).must_equal 2
12
+ end
13
+ it 'works for more cases' do
14
+ (0..10).each do |patient|
15
+ (0..10).each do |target|
16
+ (1..10).each do |num_players|
17
+ next if patient >= num_players || target >= num_players
18
+
19
+ Seat.new(patient).position_relative_to(Seat.new(target), num_players)
20
+ .must_equal(
21
+ (
22
+ if patient > target
23
+ patient
24
+ else
25
+ patient + num_players
26
+ end
27
+ ) - (target + 1)
28
+ )
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ describe '#seat_from_relative_position' do
35
+ it 'works for basic examples' do
36
+ Seat.new(1).seat_from_relative_position(Seat.new(0), 3).must_equal 0
37
+ Seat.new(1).seat_from_relative_position(Seat.new(2), 3).must_equal 1
38
+ end
39
+ it 'works for more cases' do
40
+ (0..10).each do |patient|
41
+ (0..10).each do |rel_position|
42
+ (1..10).each do |num_players|
43
+ next if patient >= num_players || rel_position >= num_players
44
+
45
+ position_adjustment = rel_position + 1
46
+
47
+ to_seat = Seat.new(patient + num_players - position_adjustment)
48
+ x_seat = if patient > to_seat || !to_seat.seat_in_bounds?(num_players)
49
+ patient - position_adjustment
50
+ else
51
+ to_seat
52
+ end
53
+
54
+ Seat.new(patient).seat_from_relative_position(
55
+ Seat.new(rel_position),
56
+ num_players
57
+ ).must_equal(x_seat)
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: acpc_poker_types
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.2.1
4
+ version: 3.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dustin Morrill
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-05-30 00:00:00.000000000 Z
11
+ date: 2013-06-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: process_runner
@@ -176,6 +176,7 @@ files:
176
176
  - lib/acpc_poker_types/suit.rb
177
177
  - lib/acpc_poker_types/chip_stack.rb
178
178
  - lib/acpc_poker_types/version.rb
179
+ - lib/acpc_poker_types/seat.rb
179
180
  - lib/acpc_poker_types/card.rb
180
181
  - lib/acpc_poker_types/poker_action.rb
181
182
  - lib/acpc_poker_types/player.rb
@@ -185,6 +186,7 @@ files:
185
186
  - spec/poker_action_spec.rb
186
187
  - spec/match_state_spec.rb
187
188
  - spec/poker_match_data_spec.rb
189
+ - spec/seat_spec.rb
188
190
  - spec/chip_stack_spec.rb
189
191
  - spec/hand_results_spec.rb
190
192
  - spec/card_spec.rb
@@ -324,6 +326,7 @@ test_files:
324
326
  - spec/poker_action_spec.rb
325
327
  - spec/match_state_spec.rb
326
328
  - spec/poker_match_data_spec.rb
329
+ - spec/seat_spec.rb
327
330
  - spec/chip_stack_spec.rb
328
331
  - spec/hand_results_spec.rb
329
332
  - spec/card_spec.rb