rubyx/test/parfait/test_space.rb
Torsten Rüger e61c5d4a55 Simplify Parfait booting
Since some weeks, Parfait uses instance variables instead of generated attribute getters (that needed type)
This makes it possible to simplify the boot process, getting rid of separate boot Space and class versions.
It is still quite order dependent, but all "normal" ruby code, (less magic) so easier to understand.

Also moved all code that can never run at runtime into the adapter. This included Space and Object new, space as the space will only ever be created at compile time and object, since that is quite different at run-time (which is where i am working towards)
2019-09-22 19:10:47 +03:00

154 lines
4.6 KiB
Ruby

require_relative "helper"
module Parfait
class TestSpace < ParfaitTest
def classes
[:Behaviour ,:BinaryCode,:Block,:CacheEntry,:Callable,:CallableMethod,:Class,
:DataObject,:Data4,:Data8,:Data16,:Data32,:Dictionary,:Factory, :Integer,:FalseClass,
:List,:Message, :MetaClass,:NilClass,:Object,:ReturnAddress,
:Space,:TrueClass,:Type,:VoolMethod,:Word]
end
def test_space_length
assert_equal 7 , @space.get_type.instance_length , @space.get_type.inspect
end
def test_singletons
assert @space.true_object , "No truth"
assert @space.false_object , "No lies"
assert @space.nil_object , "No nothing"
end
def space_class
Parfait.object_space.get_class_by_name(:Space)
end
def test_global_space
assert_equal Parfait::Space , Parfait.object_space.class
end
def test_get_class_by_name
assert_equal Parfait::Class , space_class.class
end
def test_get_meta_class
assert_equal Parfait::MetaClass , space_class.meta_class.class
end
def test_get_type_by_class_name
assert_equal Parfait::Type , Parfait.object_space.get_type_by_class_name(:Space).class
end
def test_get_type_by_class_name_nil
assert_nil Parfait.object_space.get_type_by_class_name(:Spac)
end
def test_classes_class
classes.each do |name|
assert_equal :Class , @space.classes[name].get_class.name
assert_equal Parfait::Class , @space.classes[name].class
end
end
def test_all_classes
assert_equal classes.length , @space.classes.length , @space.classes.keys.inspect
end
def test_word_class
word = @space.classes[:Word]
assert word.instance_type
t_word = @space.types[word.instance_type.hash]
assert_equal word.instance_type.hash , t_word.hash
assert_equal word.instance_type.object_id , t_word.object_id
end
def test_classes_type
classes.each do |name|
assert_equal Parfait::Type , @space.classes[name].get_type.class
end
end
def test_classes_name
classes.each do |name|
assert_equal name , @space.classes[name].name
end
end
def test_method_name
classes.each do |name|
cl = @space.classes[name]
cl.method_names.each do |mname|
method = cl.get_instance_method(mname)
assert_equal mname , method.name
assert_equal name , method.for_class.name
end
end
end
def test_all_meta
@space.classes.each do |name , clazz|
assert clazz.meta_class , clazz.name
end
end
def test_has_factory
assert_equal Dictionary , @space.factories.class
end
def test_factory_length
assert_equal 3 , @space.factories.length
end
def test_has_integer_factory
ints = @space.get_factory_for(:Integer)
assert_equal Factory , ints.class
assert_equal :Integer , ints.for_type.class_name
end
def test_has_integers
nekst = @space.get_next_for(:Integer)
assert_equal Parfait::Integer , nekst.class
assert_nil nekst.value
end
def test_has_next_integer
nekst = @space.get_next_for(:Integer)
nekst = @space.get_next_for(:Integer)
assert_equal Parfait::Integer , nekst.class
end
def test_has_addresses
ret = @space.get_next_for(:ReturnAddress)
assert_equal Parfait::ReturnAddress , ret.class
assert_nil ret.value
end
def test_has_next_address
assert_equal Parfait::ReturnAddress , @space.get_next_for(:ReturnAddress).class
end
def test_has_message_factory
ints = @space.get_factory_for(:Message)
assert_equal Factory , ints.class
assert_equal :Message , ints.for_type.class_name
end
def test_has_messages
nekst = @space.get_next_for(:Message)
assert_equal Parfait::Message , nekst.class
end
def test_has_next_message
assert_equal Parfait::Message , @space.get_next_for(:Message).class
end
def test_create_class
assert @space.create_class( :NewClass )
end
def test_created_class_is_stored
clazz = @space.create_class( :NewerClass )
assert @space.get_class_by_name(:NewerClass)
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 1009, count
end
def test_message_count
mess = @space.get_next_for(:Message)
count = 0
while(mess)
count += 1
assert mess.locals_used
mess = mess.next_message
end
assert_equal 285, count
end
end
end