start with #14 by implementing factory

page was maybe a too low level name
pages may be the unit of the syscall, but after that objects desolve (maybe later to be added on from different pages)
Factory has the job of handing out a new instance of a type
it keeps a freelist for that and a reserve
This commit is contained in:
Torsten Ruger
2018-08-23 19:55:06 +03:00
parent 9687d6611f
commit d396da16e3
9 changed files with 172 additions and 20 deletions

View File

@ -0,0 +1,47 @@
require_relative "helper"
module Parfait
class TestPage < ParfaitTest
def setup
super
@factory = Factory.new Parfait.object_space.get_type_by_class_name(:Integer)
end
def test_ok
assert @factory
end
def test_name_ok
assert @factory.attribute_name.to_s.start_with?("next")
end
def test_get_next
assert_nil @factory.get_next_for( Integer.new(1))
end
def test_no_next
assert_nil @factory.next_object
assert_nil @factory.last_object
assert_nil @factory.reserve
end
def test_get_next_object
assert_equal Parfait::Integer , @factory.get_next_object.class
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
count = 0
start = @factory.get_next_object
start = @factory.reserve
while( start )
start = start.next_integer
count += 1
end
assert_equal 11 , count
end
end
end

View File

@ -5,7 +5,7 @@ module Parfait
def classes
[:BinaryCode,:Block,:CacheEntry,:Callable,:CallableMethod,:Class,
:DataObject,:Data4,:Data8,:Data16,:Dictionary,:Integer,:FalseClass,
:DataObject,:Data4,:Data8,:Data16,:Dictionary,:Factory, :Integer,:FalseClass,
:List,:Message,:NamedList,:NilClass,:Object,:ReturnAddress,
:Space,:TrueClass,:Type,:VoolMethod,:Word]
end