Sha256: 68ce8380be8852a31b3f95289d7b96afab858530c09eee82562c88a53f5d262f

Contents?: true

Size: 1.74 KB

Versions: 8

Compression:

Stored size: 1.74 KB

Contents

require 'spec_helper'

describe Nydp::Symbol do
  let(:bar) { Nydp::Symbol.mk :BAR, ns }
  let(:foo) { Nydp::Symbol.mk :FOO, ns }
  let(:vm)  { Nydp::VM.new             }

  it "returns a ruby symbol in #to_ruby" do
    sym = Nydp::Symbol.mk :foo, ns
    expect(sym.to_ruby).to eq :foo
  end

  it "should not recognise an unknown symbol" do
    sym = Nydp::Symbol.find :foo, ns
    expect(sym).to eq nil
  end

  it "should create a new symbol" do
    sym = Nydp::Symbol.mk :foo, ns
    expect(sym.name.should).to eq :foo
  end

  it "should not create a new symbol when the symbol already exists" do
    sym1 = Nydp::Symbol.mk :baz, ns
    sym2 = Nydp::Symbol.mk :baz, ns

    expect(sym1).to eq sym2
    expect(sym1).to equal sym2
  end

  it "should consider symbols == when they share the same name" do
    ns1 = { }
    ns2 = { }

    sym1 = Nydp::Symbol.mk :baz, ns1
    sym2 = Nydp::Symbol.mk :baz, ns2

    expect(sym1.hash).to eq sym2.hash

    expect(sym1 ==     sym2).to eq true
    expect(sym1.eql?   sym2).to eq true
    expect(sym1.equal? sym2).to eq false
  end

  it "works with builtin greater-than when true" do
    f = Nydp::Builtin::GreaterThan.new

    f.invoke vm, pair_list([foo, bar])

    expect(vm.pop_arg).to eq Nydp.T
  end

  it "works with builtin greater-than when false" do
    f = Nydp::Builtin::GreaterThan.new

    f.invoke vm, pair_list([bar, foo])

    expect(vm.pop_arg).to eq Nydp.NIL
  end

  it "works with builtin less-than when true" do
    f = Nydp::Builtin::LessThan.new

    f.invoke vm, pair_list([bar, foo])

    expect(vm.pop_arg).to eq Nydp.T
  end

  it "works with builtin less-than when false" do
    f = Nydp::Builtin::LessThan.new

    f.invoke vm, pair_list([foo, bar])

    expect(vm.pop_arg).to eq Nydp.NIL
  end

end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
nydp-0.1.13.2 spec/symbol_spec.rb
nydp-0.1.13.1 spec/symbol_spec.rb
nydp-0.1.13 spec/symbol_spec.rb
nydp-0.1.12 spec/symbol_spec.rb
nydp-0.1.11 spec/symbol_spec.rb
nydp-0.1.10 spec/symbol_spec.rb
nydp-0.1.9.1 spec/symbol_spec.rb
nydp-0.1.9 spec/symbol_spec.rb