rubyx/test/helper.rb

102 lines
2.5 KiB
Ruby
Raw Normal View History

2014-04-14 14:58:59 +02:00
require 'rubygems'
require 'bundler'
begin
Bundler.setup(:default, :development)
rescue Bundler::BundlerError => e
$stderr.puts e.message
$stderr.puts "Run `bundle install` to install missing gems"
exit e.status_code
end
2015-07-18 12:06:42 +02:00
if ENV['CODECLIMATE_REPO_TOKEN']
2016-12-06 14:22:22 +01:00
require 'simplecov'
2016-12-30 10:59:38 +01:00
SimpleCov.start { add_filter "/test/" }
2015-07-18 12:06:42 +02:00
end
2017-01-04 20:31:03 +01:00
require "minitest/color"
require "minitest/autorun"
2014-04-14 14:58:59 +02:00
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'test'))
2014-04-14 14:58:59 +02:00
require 'rubyx'
2015-06-01 16:31:35 +02:00
module Compiling
def clean_compile(clazz_name , method_name , args , statements)
2017-01-14 18:28:44 +01:00
compiler = Vm::MethodCompiler.new.create_method(clazz_name,method_name,args ).init_method
compiler.process( Vm.ast_to_code( statements ) )
end
end
module Register
# relies on @interpreter instance to be set up during setup
module InterpreterHelpers
def check_chain should
should.each_with_index do |name , index|
got = ticks(1)
assert_equal got.class ,name , "Wrong class for #{index+1}, expect #{name} , got #{got}"
end
end
def check_return val
assert_equal Parfait::Message , @interpreter.get_register(:r0).class
assert_equal val , @interpreter.get_register(:r0).return_value
end
def ticks num
last = nil
num.times do
last = @interpreter.instruction
@interpreter.tick
end
return last
end
def show_ticks
classes = []
tick = 1
begin
while true and (classes.length < 200)
cl = ticks(1).class
tick += 1
classes << cl
break if cl == NilClass
end
rescue => e
puts "Error at tick #{tick}"
puts e
puts e.backtrace
end
str = classes.to_s.gsub("Register::","")
str.split(",").each_slice(5).each do |line|
puts " " + line.join(",") + ","
end
puts "length = #{classes.length}"
exit(1)
end
end
end
class Ignored
2014-09-16 15:06:11 +02:00
def == other
return false unless other.class == self.class
2014-09-16 15:06:11 +02:00
Sof::Util.attributes(self).each do |a|
begin
left = send(a)
rescue NoMethodError
next # not using instance variables that are not defined as attr_readers for equality
end
begin
right = other.send(a)
rescue NoMethodError
return false
end
return false unless left.class == right.class
2014-09-16 15:06:11 +02:00
return false unless left == right
end
return true
end
end