mips_tester 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
data/lib/mips_tester.rb CHANGED
@@ -3,7 +3,7 @@ require 'tempfile' unless defined? Tempfile
3
3
  # Main MIPSTester module
4
4
  module MIPSTester
5
5
  # Library version
6
- VERSION = "0.1.3"
6
+ VERSION = "0.1.4"
7
7
 
8
8
  # MIPSFileError Exception, raised when test file is not valid or non-existent
9
9
  class MIPSFileError < Exception; end
@@ -70,17 +70,17 @@ module MIPSTester
70
70
 
71
71
  cli = `#{["java -jar",
72
72
  @mars_path,
73
- @exp.empty? ? "" : @exp.keys.join(" "),
74
- @addresses.empty? ? "" : [@addresses.keys.min, @addresses.keys.max].join("-"),
75
- "nc dec",
73
+ @exp_regs.empty? ? "" : @exp_regs.keys.join(" "),
74
+ @exp_addresses.empty? ? "" : @exp_addresses.map{|addr| "#{addr[0]}-#{addr[0].to_i 16}"}.join(" "),
75
+ " nc dec",
76
76
  asm.path].join(" ")}`
77
77
 
78
78
  begin
79
79
  results = parse_results cli
80
80
 
81
- puts "Expected:\n#{@exp}\nResults:\n#{results}" if @verbose
81
+ puts "Expected:\n#{@exp_regs.dup.merge @exp_addresses}\nResults:\n#{results}" if @verbose
82
82
 
83
- return compare_hashes(@exp, results)
83
+ return compare_hashes(@exp_regs.dup.merge(@exp_addresses), results)
84
84
  rescue Exception => ex
85
85
  raise MIPSFileError.new ex.message.gsub(asm.path, File.basename(file)).split("\n")[0..1].join("\n")
86
86
  ensure
@@ -95,17 +95,29 @@ module MIPSTester
95
95
  def set hash
96
96
  hash.each_pair do |key, value|
97
97
  case key.to_s
98
- when REGISTER_REGEX then @regs.merge! key => value
99
- when ADDRESS_REGEX then @addresses.merge! key => value
98
+ when REGISTER_REGEX then @set_regs.merge! key => value
99
+ when ADDRESS_REGEX then @set_addresses.merge! key => value
100
100
  else puts "Warning: #{key.inspect} not recognized as register or memory address. Discarded."
101
101
  end
102
102
  end
103
103
  end
104
104
 
105
- def expect hash; @exp.merge! hash; end
105
+ def expect hash
106
+ hash.each_pair do |key, value|
107
+ case key.to_s
108
+ when REGISTER_REGEX then @exp_regs.merge! key => value
109
+ when ADDRESS_REGEX then @exp_addresses.merge! key => value
110
+ else puts "Warning: #{key.inspect} not recognized as register or memory address. Discarded."
111
+ end
112
+ end
113
+ end
106
114
 
107
115
  def reset!
108
- @regs = {}; @addresses = {}; @exp = {}; @verbose = false
116
+ @set_regs = {}
117
+ @set_addresses = {}
118
+ @exp_regs = {}
119
+ @exp_addresses = {}
120
+ @verbose = false
109
121
  end
110
122
 
111
123
  def parse_results(results)
@@ -128,8 +140,8 @@ module MIPSTester
128
140
 
129
141
  def prep_params
130
142
  out = ""
131
- @regs.each_pair {|key, value| out << "li\t\t$#{key}, #{value}\n" }
132
- @addresses.each_pair do |key, value|
143
+ @set_regs.each_pair {|key, value| out << "li\t\t$#{key}, #{value}\n" }
144
+ @set_addresses.each_pair do |key, value|
133
145
  out << "li\t\t$t0, #{key}\n"
134
146
  out << "li\t\t$t1, 0x#{value.to_s(16)}\n"
135
147
  out << "sb\t\t$t1, ($t0)\n"
@@ -0,0 +1,3 @@
1
+ li $t0, 0x10010060
2
+ move $t1, $s0
3
+ sb $t1, ($t0)
data/spec/mips_spec.rb CHANGED
@@ -53,8 +53,8 @@ describe MIPS do
53
53
 
54
54
  it 'should expect given memory address values' do
55
55
  mips.test fixture_path("empty.asm") do
56
- set '0x10010000' => 45, '0x10010010' => 32, '0x10010020' => 0xFF
57
- expect '0x10010000' => 45, '0x10010010' => 32, '0x10010020' => 0xFF
56
+ set '0x10010010' => 45, '0x10010020' => 32, '0x10010030' => 0xFF
57
+ expect '0x10010010' => 45, '0x10010020' => 32, '0x10010030' => 0xFF
58
58
  end.should be_true
59
59
  end
60
60
 
@@ -81,4 +81,13 @@ describe MIPS do
81
81
  end.should be_true
82
82
  end
83
83
  end
84
+
85
+ context 'memory.asm' do
86
+ it 'should get the value given to s0 in memory address 0x10010060' do
87
+ mips.test fixture_path("memory.asm") do
88
+ set :s0 => 78
89
+ expect "0x10010060" => 78, :s0 => 78
90
+ end
91
+ end
92
+ end
84
93
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: mips_tester
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.1.3
5
+ version: 0.1.4
6
6
  platform: ruby
7
7
  authors:
8
8
  - Federico Ravasio
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-05-18 00:00:00 Z
13
+ date: 2011-05-19 00:00:00 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rspec
@@ -44,6 +44,7 @@ files:
44
44
  - spec/fixtures/add.asm
45
45
  - spec/fixtures/empty.asm
46
46
  - spec/fixtures/invalid_syntax.asm
47
+ - spec/fixtures/memory.asm
47
48
  - spec/mips_spec.rb
48
49
  - spec/spec_helper.rb
49
50
  homepage: http://github.com/razielgn/mips_tester
@@ -77,6 +78,7 @@ test_files:
77
78
  - spec/fixtures/add.asm
78
79
  - spec/fixtures/empty.asm
79
80
  - spec/fixtures/invalid_syntax.asm
81
+ - spec/fixtures/memory.asm
80
82
  - spec/mips_spec.rb
81
83
  - spec/spec_helper.rb
82
84
  has_rdoc: