Sha256: 3c5402a3834597c1992920ce438bb6b71ada6a5c0645083a1fe77c1827e0fbab

Contents?: true

Size: 1.34 KB

Versions: 1

Compression:

Stored size: 1.34 KB

Contents

require "test_helper"

module Whitespace::ISA
  describe Retrieve do
    before do
      @vm = Whitespace::VM.new
    end

    describe "#execute" do
      describe "when the value stack is empty" do
        it "raises Whitespace::EmptyError" do
          expect(@vm.vstack.size).must_equal 0

          expect { Retrieve.new(@vm).execute }.must_raise Whitespace::EmptyError
        end
      end

      describe "when the value stack has at least 1 element" do
        describe "when the address does not exist" do
          it "raises Whitespace::AddressError" do
            @vm.vstack.push 1
            @vm.vstack.push :address
            expect(@vm.vstack.size).must_equal 2

            expect { Retrieve.new(@vm).execute }.must_raise \
              Whitespace::AddressError
          end
        end

        describe "when the address exists" do
          it "retrieves the value at the given address and puts it on top " \
              "the value stack" do
            @vm.memory[:address] = :value

            @vm.vstack.push 1
            @vm.vstack.push :address
            expect(@vm.vstack.size).must_equal 2

            Retrieve.new(@vm).execute

            expect(@vm.vstack.pop).must_equal :value
            expect(@vm.vstack.pop).must_equal 1
            expect(@vm.vstack.size).must_equal 0
          end
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
whitespace-ruby-1.0.0 test/whitespace/instructions/heap_access/retrieve_test.rb