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"
|
2014-04-14 20:52:16 +02:00
|
|
|
require "minitest/autorun"
|
2014-04-14 14:58:59 +02:00
|
|
|
|
|
|
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2014-04-14 20:52:16 +02:00
|
|
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'test'))
|
2014-04-14 14:58:59 +02:00
|
|
|
|
2017-01-14 19:05:58 +01:00
|
|
|
require 'rubyx'
|
2015-06-01 16:31:35 +02:00
|
|
|
|
2016-12-16 23:15:27 +01:00
|
|
|
module Compiling
|
|
|
|
def clean_compile(clazz_name , method_name , args , statements)
|
2017-01-17 20:23:58 +01:00
|
|
|
compiler = Vm::MethodCompiler.create_method(clazz_name,method_name,args ).init_method
|
2017-01-14 18:28:44 +01:00
|
|
|
compiler.process( Vm.ast_to_code( statements ) )
|
2016-12-16 23:15:27 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
|
2017-01-19 08:02:29 +01:00
|
|
|
module Risc
|
2017-01-16 16:43:39 +01:00
|
|
|
# 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
|
2017-01-19 08:02:29 +01:00
|
|
|
str = classes.to_s.gsub("Risc::","")
|
2017-01-16 16:43:39 +01:00
|
|
|
str.split(",").each_slice(5).each do |line|
|
|
|
|
puts " " + line.join(",") + ","
|
|
|
|
end
|
|
|
|
puts "length = #{classes.length}"
|
|
|
|
exit(1)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
|
2015-05-24 17:05:20 +02:00
|
|
|
class Ignored
|
2014-09-16 15:06:11 +02:00
|
|
|
def == other
|
2015-05-24 17:05:20 +02:00
|
|
|
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
|
2015-05-24 17:05:20 +02:00
|
|
|
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
|