# Should equal in RubySpecs

**URL:** <https://www.ruby-forum.com/t/should-equal-in-rubyspecs/157092>\
**Category:** IronRuby\
**Created:** [January 7, 2009, 10:09am UTC](https://www.ruby-forum.com/t/should-equal-in-rubyspecs/157092 "2009-01-07T10:09:51Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Shri\_B](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/898d66/32.png) [@Shri\_B](https://www.ruby-forum.com/u/Shri_B)\
**Post date:** [January 7, 2009, 10:09am UTC](https://www.ruby-forum.com/t/should-equal-in-rubyspecs/157092/1 "2009-01-07T10:09:51Z")

</div>

I noticed this in core\thread\current\_spec.rb.

it “returns the current thread” do  
t = Thread.new { Thread.current }  
t.value.should equal(t)  
Thread.current.should\_not equal(t.value)  
end

Is this any different than writing “t.value.should == t”? Is either of  
them the recommended way? Seems odd to support two ways of writing the  
exact same thing.

Thanks,  
Shri

---

<div class="post-metadata">

**Author:** ![Shri\_B](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/898d66/32.png) [@Shri\_B](https://www.ruby-forum.com/u/Shri_B)\
**Post date:** [January 7, 2009, 8:26pm UTC](https://www.ruby-forum.com/t/should-equal-in-rubyspecs/157092/2 "2009-01-07T20:26:49Z")

</div>

require ‘mspec’  
describe “equals” do  
it “compares objects not values” do

```
a = "a"
b = "a"
c = a

a.should equal(c)
a.should_not equal(b)
a.should == b

```

end  
end

---

<div class="post-metadata">

**Author:** ![Shri\_B](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/898d66/32.png) [@Shri\_B](https://www.ruby-forum.com/u/Shri_B)\
**Post date:** [January 7, 2009, 8:43pm UTC](https://www.ruby-forum.com/t/should-equal-in-rubyspecs/157092/3 "2009-01-07T20:43:18Z")

</div>

I see. should== is value equality, and should+equal is reference  
equality.

From: removed\_email\_address@domain.invalid  
[[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)] On Behalf Of Michael  
Letterle  
Sent: Wednesday, January 07, 2009 11:26 AM  
To: removed\_email\_address@domain.invalid  
Subject: Re: [Ironruby-core] should equal in RubySpecs

require ‘mspec’  
describe “equals” do  
it “compares objects not values” do

```
a = "a"
b = "a"
c = a

a.should equal(c)
a.should_not equal(b)
a.should == b

```

end  
end

On Wed, Jan 7, 2009 at 3:48 AM, Shri B.  
\<removed\_email\_address@domain.invalid[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)\> wrote:

I noticed this in core\thread\current\_spec.rb.

it “returns the current thread” do

```
t = Thread.new { Thread.current }

t.value.should equal(t)

Thread.current.should_not equal(t.value)

```

end

Is this any different than writing “t.value.should == t”? Is either of  
them the recommended way? Seems odd to support two ways of writing the  
exact same thing.

Thanks,

Shri

---

<div class="post-metadata">

**Author:** ![Shri\_B](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/898d66/32.png) [@Shri\_B](https://www.ruby-forum.com/u/Shri_B)\
**Post date:** [January 7, 2009, 8:58pm UTC](https://www.ruby-forum.com/t/should-equal-in-rubyspecs/157092/4 "2009-01-07T20:58:41Z")

</div>

Along those lines, you have to remember that Ruby has 4 distinct ways to  
define equality. #eql?, #equal?, #== and #===. This post covers it:  
[http://probablycorey.wordpress.com/2008/02/26/ruby-equality-equal-eql-and/](http://probablycorey.wordpress.com/2008/02/26/ruby-equality-equal-eql-and/)

JD

From: removed\_email\_address@domain.invalid  
[[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)] On Behalf Of Michael  
Letterle  
Sent: Wednesday, January 07, 2009 11:26 AM  
To: removed\_email\_address@domain.invalid  
Subject: Re: [Ironruby-core] should equal in RubySpecs

require ‘mspec’  
describe “equals” do  
it “compares objects not values” do

```
a = "a"
b = "a"
c = a

a.should equal(c)
a.should_not equal(b)
a.should == b

```

end  
end

On Wed, Jan 7, 2009 at 3:48 AM, Shri B.  
\<removed\_email\_address@domain.invalid[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)\> wrote:

I noticed this in core\thread\current\_spec.rb.

it “returns the current thread” do

```
t = Thread.new { Thread.current }

t.value.should equal(t)

Thread.current.should_not equal(t.value)

```

end

Is this any different than writing “t.value.should == t”? Is either of  
them the recommended way? Seems odd to support two ways of writing the  
exact same thing.

Thanks,

Shri
