gamebox 0.1.1 → 0.2.1

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.
Files changed (74) hide show
  1. data/.gitignore +4 -0
  2. data/Gemfile +9 -0
  3. data/History.txt +5 -0
  4. data/README.txt +4 -3
  5. data/Rakefile +12 -4
  6. data/TODO.txt +1 -5
  7. data/VERSION +1 -1
  8. data/docs/getting_started.rdoc +2 -2
  9. data/gamebox.gemspec +26 -10
  10. data/lib/gamebox/actor.rb +10 -3
  11. data/lib/gamebox/actor_factory.rb +2 -2
  12. data/lib/gamebox/actor_view.rb +14 -11
  13. data/lib/gamebox/actors/collidable_debugger.rb +35 -0
  14. data/lib/gamebox/actors/curtain.rb +2 -2
  15. data/lib/gamebox/actors/logo.rb +0 -6
  16. data/lib/gamebox/actors/score.rb +2 -5
  17. data/lib/gamebox/actors/spatial_debugger.rb +47 -0
  18. data/lib/gamebox/actors/svg_actor.rb +4 -6
  19. data/lib/gamebox/arbiter.rb +108 -15
  20. data/lib/gamebox/behavior.rb +29 -1
  21. data/lib/gamebox/behaviors/animated.rb +14 -23
  22. data/lib/gamebox/behaviors/audible.rb +1 -12
  23. data/lib/gamebox/behaviors/collidable.rb +29 -22
  24. data/lib/gamebox/behaviors/collidable/aabb_collidable.rb +61 -0
  25. data/lib/gamebox/behaviors/collidable/circle_collidable.rb +17 -0
  26. data/lib/gamebox/behaviors/collidable/collidable_shape.rb +35 -0
  27. data/lib/gamebox/behaviors/collidable/polygon_collidable.rb +85 -0
  28. data/lib/gamebox/behaviors/graphical.rb +13 -10
  29. data/lib/gamebox/behaviors/layered.rb +6 -20
  30. data/lib/gamebox/behaviors/physical.rb +116 -93
  31. data/lib/gamebox/class_finder.rb +6 -2
  32. data/lib/gamebox/config_manager.rb +24 -4
  33. data/lib/gamebox/data/config/objects.yml +5 -3
  34. data/lib/gamebox/ftor.rb +372 -0
  35. data/lib/gamebox/gamebox_application.rb +2 -8
  36. data/lib/gamebox/hooked_gosu_window.rb +30 -0
  37. data/lib/gamebox/input_manager.rb +78 -79
  38. data/lib/gamebox/lib/code_statistics.rb +1 -1
  39. data/lib/gamebox/lib/numbers_ext.rb +1 -1
  40. data/lib/gamebox/lib/rect.rb +612 -0
  41. data/lib/gamebox/physical_stage.rb +12 -2
  42. data/lib/gamebox/physics.rb +14 -3
  43. data/lib/gamebox/resource_manager.rb +28 -65
  44. data/lib/gamebox/sound_manager.rb +7 -13
  45. data/lib/gamebox/spatial_hash.rb +60 -14
  46. data/lib/gamebox/spatial_stagehand.rb +19 -0
  47. data/lib/gamebox/stage.rb +16 -1
  48. data/lib/gamebox/stage_manager.rb +1 -1
  49. data/lib/gamebox/svg_document.rb +1 -0
  50. data/lib/gamebox/tasks/gamebox_tasks.rb +23 -11
  51. data/lib/gamebox/templates/template_app/.gitignore +1 -0
  52. data/lib/gamebox/templates/template_app/Gemfile +1 -1
  53. data/lib/gamebox/templates/template_app/Rakefile +6 -21
  54. data/lib/gamebox/templates/template_app/config/environment.rb +14 -0
  55. data/lib/gamebox/templates/template_app/config/game.yml +2 -1
  56. data/lib/gamebox/templates/template_app/script/generate +0 -3
  57. data/lib/gamebox/templates/template_app/src/demo_stage.rb +1 -11
  58. data/lib/gamebox/templates/template_app/src/game.rb +0 -1
  59. data/lib/gamebox/templates/template_app/src/my_actor.rb +2 -2
  60. data/lib/gamebox/version.rb +1 -1
  61. data/lib/gamebox/views/graphical_actor_view.rb +15 -9
  62. data/lib/gamebox/wrapped_screen.rb +114 -7
  63. data/load_paths.rb +20 -0
  64. data/script/perf_spatial_hash.rb +73 -0
  65. data/spec/actor_view_spec.rb +1 -1
  66. data/spec/arbiter_spec.rb +264 -0
  67. data/spec/behavior_spec.rb +19 -2
  68. data/spec/collidable_spec.rb +105 -5
  69. data/spec/helper.rb +1 -1
  70. data/spec/label_spec.rb +1 -1
  71. data/spec/resource_manager_spec.rb +1 -1
  72. data/spec/spatial_hash_spec.rb +1 -1
  73. metadata +52 -10
  74. data/lib/gamebox/lib/surface_ext.rb +0 -76
@@ -10,7 +10,7 @@ class StageManager
10
10
  @backstage = Backstage.new
11
11
 
12
12
  @actor_factory.stage_manager = self
13
- stages = @resource_manager.load_config('stage_config')[:stages]
13
+ stages = @config_manager.load_config('stage_config')[:stages]
14
14
 
15
15
  @stage_names = []
16
16
  @stage_opts = []
@@ -1,5 +1,6 @@
1
1
  require 'rexml/document'
2
2
  require 'strscan'
3
+ require 'rect'
3
4
 
4
5
  class SvgDocument
5
6
 
@@ -1,14 +1,10 @@
1
1
  require 'gamebox/lib/platform'
2
2
 
3
- task :default => :run
4
3
  desc "Run the game"
5
4
  task :run do |t|
6
- if Platform.mac?
7
- sh "rsdl src/app.rb"
8
- else
9
- sh "ruby src/app.rb"
10
- end
5
+ sh "ruby src/app.rb"
11
6
  end
7
+ task :default => :run
12
8
 
13
9
  desc "Report code statistics (KLOCs, etc) from the application"
14
10
  task :stats do
@@ -19,11 +15,7 @@ end
19
15
 
20
16
  desc "Run the game with debug server"
21
17
  task :debug do |t|
22
- if Platform.mac?
23
- sh "rsdl src/app.rb -debug-server"
24
- else
25
- sh "ruby src/app.rb -debug-server"
26
- end
18
+ sh "ruby src/app.rb -debug-server"
27
19
  end
28
20
 
29
21
  desc "Bundle in all required gems"
@@ -46,4 +38,24 @@ rescue LoadError
46
38
  puts "install with gem install rspec"
47
39
  end
48
40
 
41
+ namespace :dist do
42
+ task :vendor do
43
+ sh 'wget http://github.com/downloads/shawn42/gamebox/vendor.zip; unzip vendor.zip; rm vendor.zip'
44
+ end
45
+ task :win do
46
+ # create dist dir
47
+ FileUtils.mkdir "dist" unless File.exist? "dist"
48
+ # pull down windows app shell
49
+ # expand into place
50
+ sh 'cd dist; wget http://github.com/downloads/shawn42/gamebox/gamebox_app.zip; unzip gamebox_app.zip; mv gamebox_app/* .; rm gamebox_app.zip; rm -rf gamebox_app'
51
+
52
+ # copy config/src/lib/data into dist/src
53
+ %w{vendor config data }.each do |dir|
54
+ FileUtils.cp_r dir, File.join('dist','src', dir) if File.exist? dir
55
+ end
56
+ FileUtils.cp_r 'src', File.join('dist', 'src')
57
+
58
+ # create zip of dist?
59
+ end
60
+ end
49
61
 
@@ -4,3 +4,4 @@ fakeroot
4
4
  *.o
5
5
  *.swp
6
6
  crate_boot.h
7
+ .bundle
@@ -2,4 +2,4 @@ source "http://rubygems.org"
2
2
  gem "gamebox"
3
3
  gem "publisher"
4
4
  gem "diy"
5
- gem "rubygame"
5
+ gem "gosu"
@@ -3,7 +3,6 @@ $: << libdir
3
3
  confdir = File.dirname(__FILE__)+"/config"
4
4
  $: << confdir
5
5
 
6
- ENV["RUBYGAME_NOINIT"]="1"
7
6
  require 'environment'
8
7
  require 'gamebox/tasks/gamebox_tasks'
9
8
  STATS_DIRECTORIES = [
@@ -12,25 +11,11 @@ STATS_DIRECTORIES = [
12
11
  %w(Maps maps/),
13
12
  %w(Unit\ tests specs/),
14
13
  %w(Libraries lib/),
15
- ].collect { |name, dir| [ name, "#{APP_ROOT}/#{dir}" ] }.select { |name, dir| File.directory?(dir) }
14
+ ].collect { |name, dir| [ name, "#{dir}" ] }.select { |name, dir| File.directory?(dir) }
16
15
 
17
- namespace :dist do
18
- task :vendor do
19
- sh 'wget http://github.com/downloads/shawn42/gamebox/vendor.zip; unzip vendor.zip; rm vendor.zip'
20
- end
21
- task :win do
22
- # create dist dir
23
- FileUtils.mkdir "dist" unless File.exist? "dist"
24
- # pull down windows app shell
25
- # expand into place
26
- sh 'cd dist; wget http://github.com/downloads/shawn42/gamebox/gamebox_app.zip; unzip gamebox_app.zip; mv gamebox_app/* .; rm gamebox_app.zip; rm -rf gamebox_app'
27
-
28
- # copy config/src/lib/data into dist/src
29
- %w{vendor config data }.each do |dir|
30
- FileUtils.cp_r dir, File.join('dist','src', dir) if File.exist? dir
31
- end
32
- FileUtils.cp_r 'src', File.join('dist', 'src')
33
-
34
- # create zip of dist?
35
- end
16
+ desc "Report code statistics (KLOCs, etc) from the application"
17
+ task :stats do
18
+ require 'code_statistics'
19
+ CodeStatistics.new(*STATS_DIRECTORIES).to_s
36
20
  end
21
+
@@ -32,6 +32,20 @@ MUSIC_PATH = APP_ROOT + "data/music/"
32
32
  GFX_PATH = APP_ROOT + "data/graphics/"
33
33
  FONTS_PATH = APP_ROOT + "data/fonts/"
34
34
 
35
+ require 'rubygems'
36
+
37
+ # Set up gems listed in the Gemfile.
38
+ gemfile = File.expand_path('../../Gemfile', __FILE__)
39
+ begin
40
+ ENV['BUNDLE_GEMFILE'] = gemfile
41
+ require 'bundler'
42
+ Bundler.setup
43
+ rescue Bundler::GemNotFound => e
44
+ STDERR.puts e.message
45
+ STDERR.puts "Try running `bundle install`."
46
+ exit!
47
+ end if File.exist?(gemfile)
48
+
35
49
  require 'gamebox'
36
50
 
37
51
  GAMEBOX_DATA_PATH = GAMEBOX_PATH + "data/"
@@ -1,6 +1,7 @@
1
1
  ---
2
+ :title: My Gamebox Game!
2
3
  :sound: true
3
- :auto_quit: :escape
4
+ :auto_quit: KbEscape
4
5
  :fullscreen: false
5
6
  :screen_resolution:
6
7
  - 1024
@@ -1,8 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require 'rubygems'
4
-
5
- ENV["RUBYGAME_NOINIT"]="1"
6
3
  app_root = File.join(File.dirname(__FILE__),'..')
7
4
  $: << app_root
8
5
  $: << File.join(app_root,'config')
@@ -1,21 +1,11 @@
1
1
  require 'stage'
2
- require 'rubygame/ftor'
3
2
  class DemoStage < Stage
4
3
  def setup
5
4
  super
6
- @my_actor = create_actor :my_actor
7
- @my_actor.x = 10
8
- @my_actor.y = 10
9
-
10
- @stars = []
11
- 20.times { @stars << Ftor.new(rand(viewport.width),rand(viewport.height)) }
5
+ @my_actor = create_actor :my_actor, :x => 10, :y => 10
12
6
  end
13
7
 
14
8
  def draw(target)
15
- target.fill [25,25,25,255]
16
- for star in @stars
17
- target.draw_circle_s([star.x,star.y],1,[255,255,255,255])
18
- end
19
9
  super
20
10
  end
21
11
  end
@@ -14,7 +14,6 @@ class Game
14
14
 
15
15
  def draw
16
16
  @stage_manager.draw @wrapped_screen
17
- @wrapped_screen.flip
18
17
  end
19
18
 
20
19
  end
@@ -2,8 +2,8 @@ require 'actor'
2
2
  require 'actor_view'
3
3
 
4
4
  class MyActorView < ActorView
5
- def draw(target, x_off, y_off)
6
- target.draw_box [@actor.x,@actor.y], [20,20], [240,45,45,255]
5
+ def draw(target, x_off, y_off, z)
6
+ target.draw_box @actor.x,@actor.y, 20, 20, [240,45,45,255], 1
7
7
  end
8
8
  end
9
9
 
@@ -1,7 +1,7 @@
1
1
  module Gamebox
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
- MINOR = 1
4
+ MINOR = 2
5
5
  TINY = 1
6
6
 
7
7
  ARRAY = [MAJOR, MINOR, TINY]
@@ -1,7 +1,7 @@
1
1
  require 'actor_view'
2
2
 
3
3
  class GraphicalActorView < ActorView
4
- def draw(target, x_off, y_off)
4
+ def draw(target, x_off, y_off, z)
5
5
  x = @actor.x
6
6
  y = @actor.y
7
7
 
@@ -13,25 +13,31 @@ class GraphicalActorView < ActorView
13
13
 
14
14
  #if @actor.is? :animated or
15
15
  if @actor.is? :physical
16
- w,h = *img.size
17
- offset_x = x-w/2 + x_off
18
- offset_y = y-h/2 + y_off
19
- img.blit target.screen, [offset_x,offset_y]
16
+ img_w = img.width
17
+ img_h = img.height
18
+
19
+ offset_x = x-img_w/2 + x_off
20
+ offset_y = y-img_h/2 + y_off
21
+ img.draw_rot offset_x, offset_y, z, @actor.rotation
20
22
  else
21
23
  graphical_behavior = @actor.graphical if @actor.is? :graphical
22
24
  if graphical_behavior && graphical_behavior.tiled?
23
25
  x_tiles = graphical_behavior.num_x_tiles
24
26
  y_tiles = graphical_behavior.num_y_tiles
25
- img_w, img_h = *img.size
27
+ # img_w, img_h = *img.size
28
+ img_w = img.width
29
+ img_h = img.height
26
30
  x_tiles.times do |col|
27
31
  y_tiles.times do |row|
28
- img.blit target.screen, [offset_x+col*img_w,offset_y+row*img_h]
32
+ # img.blit target.screen, [offset_x+col*img_w,offset_y+row*img_h]
33
+ img.draw offset_x+col*img_w, offset_y+row*img_h, z
29
34
  end
30
35
  end
31
36
  else
32
- img.blit target.screen, [offset_x,offset_y]
37
+ # img.blit target.screen, [offset_x,offset_y]
38
+ img.draw offset_x, offset_y, z
33
39
  end
34
-
35
40
  end
41
+ target.draw_line(offset_x,offset_y,offset_x+1,offset_y+1,[255,10,10],z)
36
42
  end
37
43
  end
@@ -2,15 +2,122 @@ class WrappedScreen
2
2
  constructor :config_manager
3
3
  attr_accessor :screen
4
4
  def setup
5
- w,h = @config_manager[:screen_resolution]
6
- flags = []
7
- flags << HWSURFACE
8
- flags << DOUBLEBUF
9
- flags << FULLSCREEN if @config_manager[:fullscreen]
10
- flags << OPENGL if @config_manager[:opengl]
11
- @screen = Screen.open [w,h], 0, flags
5
+ width, height = *@config_manager[:screen_resolution]
6
+ fullscreen = @config_manager[:fullscreen]
7
+ @screen = HookedGosuWindow.new width, height, fullscreen
8
+ @screen.caption = @config_manager[:title]
12
9
  end
10
+
13
11
  def method_missing(name,*args)
14
12
  @screen.send name, *args
15
13
  end
14
+
15
+ def draw_box(x1,y1,x2,y2,color, z)
16
+ c = convert_color(color)
17
+ @screen.draw_line x1, y1, c, x2, y1, c, z
18
+ @screen.draw_line x2, y1, c, x2, y2, c, z
19
+ @screen.draw_line x2, y2, c, x1, y2, c, z
20
+ @screen.draw_line x1, y2, c, x1, y1, c, z
21
+ end
22
+
23
+ def draw_line(x1,y1,x2,y2,color, z)
24
+ c = convert_color(color)
25
+ @screen.draw_line x1, y1, c, x2, y2, c, z
26
+ end
27
+
28
+ CIRCLE_STEP = 10
29
+ # is very expensive
30
+ # cache it if you can somehow
31
+ def draw_circle(cx,cy,r,color, z)
32
+ c_color = convert_color(color)
33
+
34
+ x1, y1 = 0, -r
35
+ circ = 2 * Math::PI * r
36
+ step = 360 / circ
37
+ step.step(45, step) { |a|
38
+ x2, y2 = offset_x(a, r), offset_y(a, r)
39
+ @screen.draw_line cx + x1, cy + y1, c_color, cx + x2, cy + y2, c_color, z
40
+ @screen.draw_line cx - x1, cy + y1, c_color, cx - x2, cy + y2, c_color, z
41
+ @screen.draw_line cx - x1, cy - y1, c_color, cx - x2, cy - y2, c_color, z
42
+ @screen.draw_line cx + x1, cy - y1, c_color, cx + x2, cy - y2, c_color, z
43
+ @screen.draw_line cx + y1, cy + x1, c_color, cx + y2, cy + x2, c_color, z
44
+ @screen.draw_line cx - y1, cy + x1, c_color, cx - y2, cy + x2, c_color, z
45
+ @screen.draw_line cx - y1, cy - x1, c_color, cx - y2, cy - x2, c_color, z
46
+ @screen.draw_line cx + y1, cy - x1, c_color, cx + y2, cy - x2, c_color, z
47
+ x1, y1 = x2, y2
48
+ }
49
+ @screen.draw_line cx + x1, cy + y1, c_color, cx - y1, cy - x1, c_color, z
50
+ @screen.draw_line cx - x1, cy + y1, c_color, cx + y1, cy - x1, c_color, z
51
+ @screen.draw_line cx - x1, cy - y1, c_color, cx + y1, cy + x1, c_color, z
52
+ @screen.draw_line cx + x1, cy - y1, c_color, cx - y1, cy + x1, c_color, z
53
+ end
54
+
55
+ # is very expensive
56
+ # cache it if you can somehow
57
+ def draw_circle_filled(cx,cy,r,color, z)
58
+ c_color = convert_color(color)
59
+
60
+ x1, y1 = 0, -r
61
+ circ = 2 * Math::PI * r
62
+ step = 360 / circ
63
+ step.step(45, step) { |a|
64
+ x2, y2 = offset_x(a, r), offset_y(a, r)
65
+ @screen.draw_quad \
66
+ cx + x1, cy + y1, c_color, cx + x2, cy + y2, c_color,
67
+ cx - x2, cy + y2, c_color, cx - x1, cy + y1, c_color, z
68
+ @screen.draw_quad \
69
+ cx - x1, cy - y1, c_color, cx - x2, cy - y2, c_color,
70
+ cx + x2, cy - y2, c_color, cx + x1, cy - y1, c_color, z
71
+ @screen.draw_quad \
72
+ cx + y1, cy + x1, c_color, cx + y2, cy + x2, c_color,
73
+ cx - y2, cy + x2, c_color, cx - y1, cy + x1, c_color, z
74
+ @screen.draw_quad \
75
+ cx - y1, cy - x1, c_color, cx - y2, cy - x2, c_color,
76
+ cx + y2, cy - x2, c_color, cx + y1, cy - x1, c_color, z
77
+ x1, y1 = x2, y2
78
+ }
79
+ @screen.draw_quad \
80
+ cx + x1, cy + y1, c_color, cx - y1, cy - x1, c_color,
81
+ cx + y1, cy - x1, c_color, cx - x1, cy + y1, c_color, z
82
+ @screen.draw_quad \
83
+ cx - x1, cy - y1, c_color, cx + y1, cy + x1, c_color,
84
+ cx - y1, cy + x1, c_color, cx + x1, cy - y1, c_color, z
85
+ end
86
+
87
+ def fill_screen(color, z)
88
+ c = convert_color(color)
89
+ @screen.draw_quad 0, 0, c, @screen.width, 0, c, 0, @screen.height, c, @screen.width, @screen.height, c, z
90
+ end
91
+
92
+ def fill(x1,y1,x2,y2,color, z)
93
+ c = convert_color(color)
94
+ @screen.draw_quad x1, y1, c, x2, y1, c, x1, y2, c, x2, y2, c, z
95
+ end
96
+
97
+ def convert_color(color)
98
+ @colors ||= {}
99
+ c = @colors[color]
100
+ if c.nil?
101
+ a = color.size == 4 ? color[3] : 255
102
+ c = Gosu::Color.new a.round, *color[0..2].map{|value|value.round}
103
+ @colors[color] = c
104
+ end
105
+ c
106
+ end
107
+
108
+ def size_text(text, font_file, font_size)
109
+ @font_cache ||= {}
110
+ @font_cache[font_file] ||= {}
111
+ font = @font_cache[font_file][font_size] ||= Font.new(@screen, font_file, font_size)
112
+
113
+ return [font.text_width(text),font.height]
114
+ end
115
+
116
+ def render_text(text, font_file, font_size, color)
117
+ @font_cache ||= {}
118
+ @font_cache[font_file] ||= {}
119
+ font = @font_cache[font_file][font_size] ||= Font.new(@screen, font_file, font_size)
120
+
121
+ DelayedText.new font, text
122
+ end
16
123
  end
@@ -0,0 +1,20 @@
1
+ begin
2
+ require File.expand_path('../.bundle/environment', __FILE__)
3
+ rescue LoadError
4
+ begin
5
+ # bust gem prelude
6
+ if defined? Gem
7
+ Gem.cache
8
+ gem 'bundler'
9
+ else
10
+ require 'rubygems'
11
+ end
12
+ require 'bundler'
13
+ Bundler.setup
14
+ rescue LoadError
15
+ module Bundler
16
+ def self.require(*args, &block); end
17
+ def self.method_missing(*args, &block); end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,73 @@
1
+ $: << File.dirname(__FILE__)+"/../lib/gamebox"
2
+
3
+ require 'spatial_hash'
4
+ require 'new_spatial_hash'
5
+ require 'benchmark'
6
+
7
+ Shape = Struct.new(:x,:y,:width,:height)
8
+
9
+ def do_it(hash, num_times, obj_size)
10
+ num_times.times do |i|
11
+ hash.add(Shape.new(i,i,obj_size,obj_size))
12
+ end
13
+
14
+ num_times.times do |i|
15
+ hash.items_at i, i
16
+ end
17
+
18
+ hash.rehash
19
+ hash.rehash
20
+ hash.rehash
21
+ hash.rehash
22
+
23
+ num_times.times do |i|
24
+ hash.items_at i, i
25
+ end
26
+ end
27
+
28
+ OldSpatialHash = SpatialHash
29
+
30
+ Benchmark.bm(60) do|b|
31
+
32
+ @lots = 1_000
33
+ @small_grid = 5
34
+ @medium_grid = 80
35
+
36
+ @small_object = 2
37
+ @medium_object = 20
38
+ @large_object = 100
39
+
40
+ impls = %w{old new}
41
+ impls.each do |impl|
42
+ klass = ObjectSpace.const_get "#{impl.capitalize}SpatialHash"
43
+ b.report("#{impl} w/ lots of small objects in small size grid") do
44
+ hash = klass.new @small_grid, true
45
+ do_it(hash,@lots, @small_object)
46
+ end
47
+
48
+ b.report("#{impl} w/ lots of medium objects in small size grid") do
49
+ hash = klass.new @small_grid, true
50
+ do_it(hash,@lots, @medium_object)
51
+ end
52
+
53
+ b.report("#{impl} w/ lots of small objects in medium size grid") do
54
+ hash = klass.new @medium_grid, true
55
+ do_it(hash,@lots, @small_object)
56
+ end
57
+
58
+ b.report("#{impl} w/ lots of medium objects in medium size grid") do
59
+ hash = klass.new @medium_grid, true
60
+ do_it(hash,@lots, @medium_object)
61
+ end
62
+
63
+ b.report("#{impl} w/ lots of large objects in small size grid") do
64
+ hash = klass.new @small_grid, true
65
+ do_it(hash,@lots, @large_object)
66
+ end
67
+ b.report("#{impl} w/ lots of large objects in small size grid no resize") do
68
+ hash = klass.new @small_grid, false
69
+ do_it(hash,@lots, @large_object)
70
+ end
71
+ end
72
+
73
+ end