From 18ee1e5d3ac1fbecc3e9d42e4bab2f796fc25d12 Mon Sep 17 00:00:00 2001 From: Saf Date: Mon, 7 Sep 2020 13:48:39 -0700 Subject: [PATCH] Doing some Refactors (#4) * Sorted dependancies * Rearranging * Added specs to notifiy me if the assembler output for example files changes while making refactors Co-authored-by: Saf --- lib/n65.rb | 1 + lib/n65/directives/ascii.rb | 1 - lib/n65/directives/bytes.rb | 1 - lib/n65/instruction_base.rb | 10 ++--- n65.gemspec | 2 +- spec/assembler_spec.rb | 82 +++++++++++++++++++++++++++++++++++++ 6 files changed, 89 insertions(+), 8 deletions(-) create mode 100644 spec/assembler_spec.rb diff --git a/lib/n65.rb b/lib/n65.rb index cb19d53..1809120 100644 --- a/lib/n65.rb +++ b/lib/n65.rb @@ -135,6 +135,7 @@ module N65 assemble_one_line(line) end fulfill_promises + self end # This will empty out our promise queue and try to fullfil operations diff --git a/lib/n65/directives/ascii.rb b/lib/n65/directives/ascii.rb index 9a107da..898a8d7 100644 --- a/lib/n65/directives/ascii.rb +++ b/lib/n65/directives/ascii.rb @@ -13,7 +13,6 @@ module N65 end def initialize(string) - super @string = string end diff --git a/lib/n65/directives/bytes.rb b/lib/n65/directives/bytes.rb index 8a2c634..e5c5c38 100644 --- a/lib/n65/directives/bytes.rb +++ b/lib/n65/directives/bytes.rb @@ -40,7 +40,6 @@ module N65 # Initialize with a byte array def initialize(bytes_array) - super @bytes_array = bytes_array end diff --git a/lib/n65/instruction_base.rb b/lib/n65/instruction_base.rb index 8de3b7a..898e9af 100644 --- a/lib/n65/instruction_base.rb +++ b/lib/n65/instruction_base.rb @@ -3,15 +3,15 @@ module N65 class InstructionBase def self.parse(_line) - raise(NotImplementedError, "#{self.class.name} must implement self.parse") + raise(NotImplementedError, "#{self.class.name} must implement #{__method__}") + end + + def exec(_assembler) + raise(NotImplementedError, "#{self.class.name} must implement #{__method__}") end def unresolved_symbols? false end - - def exec(_assembler) - raise(NotImplementedError, "#{self.class.name} must implement exec") - end end end diff --git a/n65.gemspec b/n65.gemspec index f5c504d..db17fb1 100644 --- a/n65.gemspec +++ b/n65.gemspec @@ -23,6 +23,6 @@ Gem::Specification.new do |spec| spec.add_development_dependency 'bundler' spec.add_development_dependency 'rake' - spec.add_development_dependency 'rubocop' spec.add_development_dependency 'rspec' + spec.add_development_dependency 'rubocop' end diff --git a/spec/assembler_spec.rb b/spec/assembler_spec.rb new file mode 100644 index 0000000..2322e76 --- /dev/null +++ b/spec/assembler_spec.rb @@ -0,0 +1,82 @@ +# frozen_string_literal: true + +require 'digest/sha2' +require_relative '../lib/n65' + +RSpec.describe(N65::Assembler) do + describe 'assembling example files' do + let(:examples) do + File.join(__dir__, '..', 'examples') + end + + let(:source) do + File.read(File.join(examples, filename)) + end + + let(:assembler) do + described_class.new + end + + let(:binary) do + assembler.assemble_string(source).emit_binary_rom + end + + let(:sha256) do + Digest::SHA256.hexdigest(binary) + end + + context 'when assembling beep.asm' do + let(:filename) { 'beep.asm' } + let(:expected) { 'afce4dd85323d86dd6b2f8e4c9e7d704607b0480c3cf087bd8f66b37b8ddf269' } + + it 'have the correct sha256 digest' do + expect(sha256).to eq(expected) + end + end + + context 'when assembling demo.asm' do + let(:filename) { 'demo.asm' } + let(:expected) { 'ff687730a0a4022519b177c1cd92f18eaafaa2e9606f9a579371e9c62ffcb726' } + + it 'have the correct sha256 digest' do + expect(sha256).to eq(expected) + end + end + + context 'when assembling scales.asm' do + let(:filename) { 'scales.asm' } + let(:expected) { '2c6c586f3a9d35212a1a02e064a8bb71ec26ac857ed6572f217c10161f2de102' } + + it 'have the correct sha256 digest' do + expect(sha256).to eq(expected) + end + end + + context 'when assembling pulse_chord.asm' do + let(:filename) { 'pulse_chord.asm' } + let(:expected) { '77712d504edbe9b30261939a9d72f51e14ee3029da04287b879dffbb36eb9b12' } + + it 'have the correct sha256 digest' do + expect(sha256).to eq(expected) + end + end + + context 'when assembling noise.asm' do + let(:filename) { 'noise.asm' } + let(:expected) { 'ea790d892ecd2bf76f711fbcb8a2f8e9b4dbaa5dffb56b691924c81666d23673' } + + it 'have the correct sha256 digest' do + expect(sha256).to eq(expected) + end + end + + context 'when assembling mario2.asm', skip: '.incbin include path should be relative to source file' do + let(:filename) { 'mario2.asm' } + let(:expected) { '0974b799eac7ffb8835fcbd518a5cdeeec734d5d9476cd11cb6b75491c6ef488' } + + it 'have the correct sha256 digest' do + expect(sha256).to eq(expected) + end + end + end +end