fixed simple layout offset bug in layout
This commit is contained in:
parent
aa20f2ca77
commit
80d58ee03c
@ -34,7 +34,12 @@ module Parfait
|
||||
def sof_reference_name
|
||||
name
|
||||
end
|
||||
|
||||
def inspect
|
||||
"Class(#{name})"
|
||||
end
|
||||
# ruby 2.1 list (just for reference, keep at bottom)
|
||||
#:allocate, :new, :superclass
|
||||
|
||||
end
|
||||
end
|
||||
|
@ -3,7 +3,7 @@
|
||||
module Parfait
|
||||
class Dictionary < Object
|
||||
attribute :keys
|
||||
attribute :values
|
||||
attribute :values
|
||||
# only empty initialization for now
|
||||
#
|
||||
# internally we store keys and values in lists, which means this does **not** scale well
|
||||
|
@ -40,6 +40,7 @@ module Parfait
|
||||
# TODO , later we would need to COPY the layout to keep the old constant
|
||||
# but now we are concerned with booting, ie getting a working structure
|
||||
def add_instance_variable name
|
||||
self.push(1) if self.get_length == 0
|
||||
self.push(name)
|
||||
self.get_length
|
||||
end
|
||||
@ -51,7 +52,7 @@ module Parfait
|
||||
|
||||
def object_instance_names
|
||||
names = List.new
|
||||
index = 2 # first is object_class
|
||||
index = 3
|
||||
while index <= self.get_length
|
||||
item = get(index)
|
||||
names.push item
|
||||
@ -74,6 +75,19 @@ module Parfait
|
||||
list_index(name)
|
||||
end
|
||||
|
||||
def inspect
|
||||
ret = "Layout["
|
||||
index = 3
|
||||
while index <= self.get_length
|
||||
item = get(index)
|
||||
ret += item.inspect
|
||||
ret += "," unless index == self.get_length
|
||||
index = index + 1
|
||||
end
|
||||
ret += "]"
|
||||
ret
|
||||
end
|
||||
|
||||
def sof_reference_name
|
||||
"#{self.object_class.name}_Layout"
|
||||
end
|
||||
|
@ -69,6 +69,11 @@ module Parfait
|
||||
get(1)
|
||||
end
|
||||
|
||||
def last
|
||||
return nil if empty?
|
||||
get(get_length())
|
||||
end
|
||||
|
||||
# set the value at index.
|
||||
# Lists start from index 1
|
||||
def set( index , value)
|
||||
|
@ -1,6 +1,8 @@
|
||||
require_relative "test_layout"
|
||||
require_relative "test_space"
|
||||
require_relative "test_object"
|
||||
require_relative "test_list"
|
||||
require_relative "test_word"
|
||||
require_relative "test_dictionary"
|
||||
require_relative "test_method"
|
||||
require_relative "test_attributes"
|
||||
|
49
test/parfait/test_attributes.rb
Normal file
49
test/parfait/test_attributes.rb
Normal file
@ -0,0 +1,49 @@
|
||||
require_relative "../helper"
|
||||
|
||||
class TestAttributes < MiniTest::Test
|
||||
|
||||
def setup
|
||||
@mess = Virtual.machine.boot.space.first_message
|
||||
@layout = @mess.get_layout
|
||||
end
|
||||
|
||||
def test_message_get_layout
|
||||
assert_equal Parfait::Layout , @layout.class
|
||||
end
|
||||
def test_message_layout_first
|
||||
@layout.object_class = :next_message
|
||||
assert_equal :next_message , @layout.object_instance_names.first
|
||||
assert_equal :next_message , @layout.object_class
|
||||
end
|
||||
def test_message_name_nil
|
||||
last = @layout.object_instance_names.last
|
||||
assert_equal :name , last
|
||||
assert_equal nil , @mess.name
|
||||
end
|
||||
def test_message_next_set
|
||||
@mess.next_message = :next_message
|
||||
assert_equal :next_message , @mess.next_message
|
||||
end
|
||||
def test_message_layout_set
|
||||
@mess.set_layout :layout
|
||||
assert_equal :layout , @mess.get_layout
|
||||
end
|
||||
def test_attribute_index
|
||||
@mess.next_message = :message
|
||||
assert_equal Parfait::Layout , @mess.get_layout.class
|
||||
end
|
||||
def test_layout_attribute
|
||||
@layout.object_class = :message
|
||||
assert_equal :message , @layout.object_class
|
||||
end
|
||||
def test_layout_attribute_check
|
||||
@layout.object_class = :message
|
||||
assert_equal Parfait::Layout , @layout.get_layout.class
|
||||
end
|
||||
def test_layout_layout
|
||||
assert_equal Parfait::Layout , @layout.get_layout.get_layout.class
|
||||
end
|
||||
def test_layout_layout_layout
|
||||
assert_equal Parfait::Layout , @layout.get_layout.get_layout.get_layout.class
|
||||
end
|
||||
end
|
@ -16,7 +16,7 @@ class TestLayout < MiniTest::Test
|
||||
def test_message_by_index
|
||||
assert_equal @mess.next_message , @mess.get_instance_variable(:next_message)
|
||||
index = @mess.get_layout.variable_index :next_message
|
||||
assert_equal 2 , index
|
||||
assert_equal 3 , index
|
||||
assert_equal @mess.next_message , @mess.internal_object_get(index)
|
||||
end
|
||||
|
||||
@ -24,13 +24,26 @@ class TestLayout < MiniTest::Test
|
||||
assert_equal @mess.get_layout , @mess.internal_object_get(1) , "mess"
|
||||
end
|
||||
|
||||
def test_no_index_below_2
|
||||
def test_layout_is_first
|
||||
layout = @mess.get_layout
|
||||
assert_equal nil , layout.variable_index(:layout)
|
||||
end
|
||||
|
||||
def test_no_index_below_1
|
||||
layout = @mess.get_layout
|
||||
names = layout.object_instance_names
|
||||
assert_equal 7 , names.get_length
|
||||
assert_equal 7 , names.get_length , names.inspect
|
||||
names.each do |n|
|
||||
assert layout.variable_index(n) > 1
|
||||
assert layout.variable_index(n) >= 1
|
||||
end
|
||||
end
|
||||
|
||||
def test_class_layout
|
||||
oc = Virtual.machine.boot.space.get_class_by_name( :Object )
|
||||
assert_equal Parfait::Class , oc.class
|
||||
layout = oc.object_layout
|
||||
assert_equal Parfait::Layout , layout.class
|
||||
assert_equal layout.object_instance_names.get_length , 0
|
||||
#assert_equal layout.first , :layout
|
||||
end
|
||||
end
|
||||
|
@ -3,8 +3,33 @@ require_relative "../helper"
|
||||
class TestList < MiniTest::Test
|
||||
|
||||
def setup
|
||||
Virtual.machine.boot unless Virtual.machine.booted
|
||||
@list = ::Parfait::List.new
|
||||
end
|
||||
def test_old_layout
|
||||
assert_equal Parfait::Layout , Virtual.machine.space.classes.keys.get_layout.class
|
||||
end
|
||||
def test_old_layout_push
|
||||
list = Virtual.machine.space.classes.keys
|
||||
list.push(1)
|
||||
assert_equal Parfait::Layout , list.get_layout.class
|
||||
end
|
||||
def test_new_layout
|
||||
assert_equal Parfait::Layout , @list.get_layout.class
|
||||
end
|
||||
def test_new_layout_push
|
||||
@list.push(1)
|
||||
assert_equal Parfait::Layout , @list.get_layout.class
|
||||
end
|
||||
def notest_layout_is_first
|
||||
layout = @list.get_layout
|
||||
assert_equal 1 , layout.variable_index(:layout)
|
||||
end
|
||||
def notest_layout_is_first_old
|
||||
layout = Virtual.machine.space.classes.keys.get_layout
|
||||
assert_equal 1 , layout.variable_index(:layout)
|
||||
end
|
||||
|
||||
def test_list_inspect
|
||||
@list.set(1,1)
|
||||
assert_equal "1" , @list.inspect
|
||||
@ -97,4 +122,11 @@ class TestList < MiniTest::Test
|
||||
def test_first_empty
|
||||
assert_equal nil , @list.first
|
||||
end
|
||||
def test_last
|
||||
test_many_get
|
||||
assert_equal :three , @list.last
|
||||
end
|
||||
def test_last_empty
|
||||
assert_equal nil , @list.last
|
||||
end
|
||||
end
|
||||
|
@ -6,7 +6,7 @@ class TestSpace < MiniTest::Test
|
||||
@machine = Virtual.machine.boot
|
||||
end
|
||||
def classes
|
||||
[:Kernel,:Word,:List,:Message,:Frame,:Layout,:Class,:Dictionary,:Method , :Integer]
|
||||
[:Kernel,:Word,:List,:Message,:Frame,:Layout,:Object,:Class,:Dictionary,:Method , :Integer]
|
||||
end
|
||||
def test_booted
|
||||
assert_equal true , @machine.booted
|
||||
@ -17,40 +17,35 @@ class TestSpace < MiniTest::Test
|
||||
def test_global_space
|
||||
assert_equal Parfait::Space , Parfait::Space.object_space.class
|
||||
end
|
||||
def test_intger
|
||||
def test_integer
|
||||
int = Parfait::Space.object_space.get_class_by_name :Integer
|
||||
assert_equal 3, int.method_names.get_length
|
||||
assert int.get_instance_method( :plus )
|
||||
end
|
||||
def test_classes_class
|
||||
classes.each do |name|
|
||||
assert_equal :Class , @machine.space.classes[name].get_class.name
|
||||
assert_equal Parfait::Class , @machine.space.classes[name].class
|
||||
assert_equal Parfait::Layout , @machine.space.classes[name].get_layout.class
|
||||
assert_equal name , @machine.space.classes[name].get_class.name
|
||||
end
|
||||
end
|
||||
|
||||
def test_classes_class
|
||||
classes.each do |name|
|
||||
assert_equal :Class , @machine.space.classes[name].get_class.name
|
||||
assert_equal Parfait::Class , @machine.space.classes[name].class
|
||||
end
|
||||
end
|
||||
|
||||
def test_classes_layout
|
||||
classes.each do |name|
|
||||
assert_equal Parfait::Layout , @machine.space.classes[name].get_layout.class
|
||||
end
|
||||
end
|
||||
|
||||
def test_classes_name
|
||||
classes.each do |name|
|
||||
assert_equal name , @machine.space.classes[name].name
|
||||
end
|
||||
end
|
||||
|
||||
def test_method_name
|
||||
classes.each do |name|
|
||||
cl = @machine.space.classes[name]
|
||||
cl.method_names.each do |mname|
|
||||
#puts "Mehtod #{mname}"
|
||||
method = cl.get_instance_method(mname)
|
||||
assert_equal mname , method.name
|
||||
assert_equal name , method.for_class.name
|
||||
|
Loading…
Reference in New Issue
Block a user