finally creating less objects in the test

basic still #23 , now applied
Basic size of 20, interpreter gets 50 and the full set is 1024

Tests run more than twice as fast!!
This commit is contained in:
Torsten Ruger 2019-02-09 12:44:35 +02:00
parent 37eeb81f45
commit a89301d623
11 changed files with 84 additions and 43 deletions

View File

@ -55,10 +55,8 @@ module Parfait
boot_boot_space( types ) boot_boot_space( types )
classes = boot_classes( types ) classes = boot_classes( types )
fix_types( types , classes ) fix_types( types , classes )
if( page = options[:page_size]) page = options[:factory] || 1024
Factory.page_size = page Factory.page_size = page
PUTS "PAGE #{page}"
end
space = Space.new( classes ) space = Space.new( classes )
Parfait.set_object_space( space ) Parfait.set_object_space( space )
end end

View File

@ -20,7 +20,7 @@ module RubyX
# initialize boots Parfait and Risc (ie load Builin) # initialize boots Parfait and Risc (ie load Builin)
def initialize(options) def initialize(options)
Parfait.boot!(options) Parfait.boot!(options[:parfait] || {})
Risc.boot! Risc.boot!
end end

View File

@ -5,7 +5,7 @@ module Mains
include Risc::Ticker include Risc::Ticker
def setup def setup
@string_input = as_main("a = 1011 ; while(a>0) ; a = a - 1 ; end ; return a") @string_input = as_main("a = 37 ; while(a>0) ; a = a - 1 ; end ; return a")
super super
end end
def test_chain # max 1011 iterations on 1014 integers (1024 - 10 reserve) def test_chain # max 1011 iterations on 1014 integers (1024 - 10 reserve)

View File

@ -23,8 +23,8 @@ module Parfait
def test_get_next_object def test_get_next_object
assert_equal Parfait::Integer , @factory.get_next_object.class assert_equal Parfait::Integer , @factory.get_next_object.class
end end
def test_default_page def test_default_test_page
assert_equal 1024 , Factory.page_size assert_equal 20 , Factory.page_size
end end
def test_default_reserve def test_default_reserve
assert_equal 10 , Factory.reserve_size assert_equal 10 , Factory.reserve_size
@ -37,15 +37,6 @@ module Parfait
@factory.get_next_object @factory.get_next_object
assert_equal Parfait::Integer , @factory.reserve.class assert_equal Parfait::Integer , @factory.reserve.class
end end
def test_chain_length
count = 0
start = @factory.get_next_object
while( start )
start = start.next_integer
count += 1
end
assert_equal 1024 - 10 , count
end
def test_reserve_length def test_reserve_length
count = 0 count = 0
start = @factory.get_next_object start = @factory.get_next_object
@ -56,5 +47,23 @@ module Parfait
end end
assert_equal 11 , count assert_equal 11 , count
end end
class BigFactoryTest < BigParfaitTest
def setup
super
@factory = Factory.new Parfait.object_space.get_type_by_class_name(:Integer)
end
def test_chain_length
count = 0
start = @factory.get_next_object
while( start )
start = start.next_integer
count += 1
end
assert_equal 1024 - 10 , count
end
def test_default_page
assert_equal 1024 , Factory.page_size
end
end
end end
end end

View File

@ -117,15 +117,6 @@ module Parfait
def test_has_next_address def test_has_next_address
assert_equal Parfait::ReturnAddress , @space.get_next_for(:ReturnAddress).class assert_equal Parfait::ReturnAddress , @space.get_next_for(:ReturnAddress).class
end end
def test_address_count
addr = @space.get_next_for(:ReturnAddress)
count = 0
while(addr)
count += 1
addr = addr.next_integer
end
assert_equal 1014, count
end
def test_has_message_factory def test_has_message_factory
ints = @space.get_factory_for(:Message) ints = @space.get_factory_for(:Message)
assert_equal Factory , ints.class assert_equal Factory , ints.class
@ -138,16 +129,6 @@ module Parfait
def test_has_next_message def test_has_next_message
assert_equal Parfait::Message , @space.get_next_for(:Message).class assert_equal Parfait::Message , @space.get_next_for(:Message).class
end end
def test_message_count
mess = @space.get_next_for(:Message)
count = 0
while(mess)
count += 1
assert mess.frame
mess = mess.next_message
end
assert_equal 1014, count
end
def test_create_class def test_create_class
assert @space.create_class( :NewClass ) assert @space.create_class( :NewClass )
end end
@ -191,4 +172,26 @@ module Parfait
end end
end end
end end
class BigTestSpace < BigParfaitTest
def test_address_count
addr = @space.get_next_for(:ReturnAddress)
count = 0
while(addr)
count += 1
addr = addr.next_integer
end
assert_equal 1014, count
end
def test_message_count
mess = @space.get_next_for(:Message)
count = 0
while(mess)
count += 1
assert mess.frame
mess = mess.next_message
end
assert_equal 1014, count
end
end
end end

View File

@ -41,7 +41,7 @@ module Risc
ret = main_ticks(68) ret = main_ticks(68)
assert_equal FunctionReturn , ret.class assert_equal FunctionReturn , ret.class
assert_equal :r1 , ret.register.symbol assert_equal :r1 , ret.register.symbol
assert_equal 175116 , @interpreter.get_register(ret.register) assert_equal 22284 , @interpreter.get_register(ret.register)
end end
end end
end end

View File

@ -54,7 +54,7 @@ module Risc
end end
def test_pc1 def test_pc1
@interpreter.tick @interpreter.tick
assert_equal 174552 , @interpreter.pc assert_equal 21688 , @interpreter.pc
end end
def test_tick2 def test_tick2
@interpreter.tick @interpreter.tick
@ -68,7 +68,7 @@ module Risc
def test_pc2 def test_pc2
@interpreter.tick @interpreter.tick
@interpreter.tick @interpreter.tick
assert_equal 174556 , @interpreter.pc assert_equal 21692 , @interpreter.pc
end end
def test_tick_14_jump def test_tick_14_jump
14.times {@interpreter.tick} 14.times {@interpreter.tick}

View File

@ -25,7 +25,7 @@ module Risc
assert_equal 0 , Position.get(@linker.cpu_init).at assert_equal 0 , Position.get(@linker.cpu_init).at
end end
def test_cpu_at def test_cpu_at
assert_equal "0x2b90c" , Position.get(@linker.cpu_init.first).to_s assert_equal "0x4f1c" , Position.get(@linker.cpu_init.first).to_s
end end
def test_cpu_label def test_cpu_label
assert_equal Position , Position.get(@linker.cpu_init.first).class assert_equal Position , Position.get(@linker.cpu_init.first).class

View File

@ -1,11 +1,36 @@
module Parfait module Parfait
def self.default_test_options def self.default_test_options
{} {
factory: 20,
}
end
def self.interpreter_test_options
{
factory: 50,
}
end
def self.full_test_options
{
factory: 1024,
}
end end
end end
module RubyX module RubyX
def self.default_test_options def self.default_test_options
{ parfait: Parfait.default_test_options} {
parfait: Parfait.default_test_options
}
end
def self.full_test_options
{
parfait: Parfait.full_test_options
}
end
def self.interpreter_test_options
{
parfait: Parfait.interpreter_test_options,
platform: :interpreter
}
end end
end end

View File

@ -12,4 +12,10 @@ module Parfait
@method = Parfait::CallableMethod.new( :meth , @obj , @args , @frame) @method = Parfait::CallableMethod.new( :meth , @obj , @args , @frame)
end end
end end
class BigParfaitTest < ParfaitTest
def setup
Parfait.boot!(Parfait.full_test_options)
@space = Parfait.object_space
end
end
end end

View File

@ -7,7 +7,7 @@ module Risc
include ScopeHelper include ScopeHelper
def setup def setup
compiler = RubyX::RubyXCompiler.new(RubyX.default_test_options) compiler = RubyX::RubyXCompiler.new(RubyX.interpreter_test_options)
@linker = compiler.ruby_to_binary(@string_input, :interpreter) @linker = compiler.ruby_to_binary(@string_input, :interpreter)
@interpreter = Interpreter.new(@linker) @interpreter = Interpreter.new(@linker)
@interpreter.start_program @interpreter.start_program