[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

assert_equal hates my CPU

Phlip

4/14/2005 3:07:00 AM

Rubies:

Here's the Ruby 1.8 test\unit version of assert_equal()

def assert_equal(expected, actual, message=nil)
full_message = build_message(message, <<EOT, expected, actual)
<?> expected but was
<?>.
EOT
assert_block(full_message) { expected == actual }
end

Notice it builds a message even if the assertion passes.

Because assertions passing should be the most common behavior, shouldn't
that method run like this?

def assert_equal(expected, actual, message=nil)
assert_block(full_message) do
if expected == actual then
''
else
build_message(message, <<EOT, expected, actual)
<?> expected but was
<?>.
EOT
end
end
end

Then assert_block() should trigger if its block yields a complaint string.

--
Phlip
http://industrialxp.org/community/bin/view/Main/TestFirstUser...


12 Answers

ES

4/14/2005 3:21:00 AM

0


Le 14/4/2005, "Phlip" <phlip_cpp@yahoo.com> a écrit:
>Rubies:
>
>Here's the Ruby 1.8 test\unit version of assert_equal()
>
> def assert_equal(expected, actual, message=nil)
> full_message = build_message(message, <<EOT, expected, actual)
><?> expected but was
><?>.
>EOT
> assert_block(full_message) { expected == actual }
> end
>
>Notice it builds a message even if the assertion passes.
>
>Because assertions passing should be the most common behavior, shouldn't
>that method run like this?
>
> def assert_equal(expected, actual, message=nil)
> assert_block(full_message) do
> if expected == actual then
> ''
> else
> build_message(message, <<EOT, expected, actual)
><?> expected but was
><?>.
>EOT
> end
> end
> end
>
>Then assert_block() should trigger if its block yields a complaint string.

test/unit has a built-in load tester :)

Yes, it would make more sense the other way but
I suspect this is due to simpler implementation
and the idea that assertions do not run in production
code so it does not matter. I can not test it
right now but it does not seem like your code
would actually run since 'full_message' does
not exist?

> Phlip

E

--
No-one expects the Solaris POSIX implementation!



Francis Hwang

4/14/2005 3:26:00 AM

0


On Apr 13, 2005, at 11:21 PM, Saynatkari wrote:
> I suspect this is due to simpler implementation
> and the idea that assertions do not run in production
> code so it does not matter.

Ah, but it can matter, can't it? If you're running a codebase with,
say, 500+ unit tests and 1900+ assertions (hell, I'm running one right
now), these things can add up. And when your tests are slow, you'll run
them less often ...

Francis Hwang
http://f...



Phlip

4/14/2005 3:27:00 AM

0

Saynatkari wrote:

> test/unit has a built-in load tester :)

Do you mean the profiler?

Otherwise, where do I Google?

> Yes, it would make more sense the other way but
> I suspect this is due to simpler implementation
> and the idea that assertions do not run in production
> code so it does not matter. I can not test it
> right now but it does not seem like your code
> would actually run since 'full_message' does
> not exist?

I want my tests to run in <5 seconds. Otherwise I get bored, drift off,
start downloading comics, etc.

> No-one expects the Solaris POSIX implementation!

Whip me. Beat me. Make me install Oracle.

--
Phlip
http://industrialxp.org/community/bin/view/Main/TestFirstUser...


Phlip

4/14/2005 3:57:00 AM

0

Francis Hwang wrote:
>
> Ah, but it can matter, can't it? If you're running a codebase with,
> say, 500+ unit tests and 1900+ assertions (hell, I'm running one right
> now), these things can add up. And when your tests are slow, you'll run
> them less often ...

How long do your tests take?

--
Phlip
http://industrialxp.org/community/bin/view/Main/TestFirstUser...


Michael Walter

4/14/2005 4:06:00 AM

0

Phlip,

On 4/13/05, Phlip <phlip_cpp@yahoo.com> wrote:
> Because assertions passing should be the most common behavior, shouldn't
> that method run like this?
>
> def assert_equal(expected, actual, message=nil)
> assert_block(full_message) do
> if expected == actual then
> ''
> else
> build_message(message, <<EOT, expected, actual)
> <?> expected but was
> <?>.
> EOT
> end
> end
> end
>

Unbound variable 'full_message'? :
> Then assert_block() should trigger if its block yields a complaint string.

That's too much magic in the block semantics for me. Without taking a
look into the test sources, mayb you could call some
raise_error(reason) function instead?

Regards,
Michael



Francis Hwang

4/14/2005 4:07:00 AM

0

120 seconds, give or take, when I run the whole suite. This is one of
the reasons I'm always looking for chunks of code to extract into their
own libs; you decrease cohesion, and accordingly you decrease the
combinatorial space your tests have to deal with.

On Apr 13, 2005, at 11:59 PM, Phlip wrote:

> Francis Hwang wrote:
>>
>> Ah, but it can matter, can't it? If you're running a codebase with,
>> say, 500+ unit tests and 1900+ assertions (hell, I'm running one right
>> now), these things can add up. And when your tests are slow, you'll
>> run
>> them less often ...
>
> How long do your tests take?
>
> --
> Phlip
>
> http://industrialxp.org/community/bin/...
> TestFirstUserInterfaces
>
>
>
>

Francis Hwang
http://f...



Phlip

4/14/2005 4:11:00 AM

0

Michael Walter wrote:

> That's too much magic in the block semantics for me.

I think my question is visible beyond the minor typos.

--
Phlip
http://industrialxp.org/community/bin/view/Main/TestFirstUser...



Phlip

4/14/2005 4:13:00 AM

0

Francis Hwang wrote:

> 120 seconds, give or take, when I run the whole suite. This is one of
> the reasons I'm always looking for chunks of code to extract into their
> own libs; you decrease cohesion, and accordingly you decrease the
> combinatorial space your tests have to deal with.

Ah, I'm looking at a much lower ratio of cases to seconds. So profiling and
optimizing is now more important than incremental testing.

--
Phlip
http://industrialxp.org/community/bin/view/Main/TestFirstUser...



Michael Walter

4/14/2005 4:32:00 AM

0

Phlip,

On 4/14/05, Phlip <phlip_cpp@yahoo.com> wrote:
> Michael Walter wrote:
>
> > That's too much magic in the block semantics for me.
>
> I think my question is visible beyond the minor typos.

The comment (as detailed in the remainder you snipped) is not about typos.

Regards,
Michael



Eric Hodel

4/14/2005 4:36:00 AM

0

On 13 Apr 2005, at 20:48, Phlip wrote:

> Saynatkari wrote:
>
>> test/unit has a built-in load tester :)
>
> Do you mean the profiler?
>
> Otherwise, where do I Google?
>
>> Yes, it would make more sense the other way but
>> I suspect this is due to simpler implementation
>> and the idea that assertions do not run in production
>> code so it does not matter. I can not test it
>> right now but it does not seem like your code
>> would actually run since 'full_message' does
>> not exist?
>
> I want my tests to run in <5 seconds. Otherwise I get bored, drift off,
> start downloading comics, etc.

Use the -n argument to the testrunner.

--
Eric Hodel - drbrain@segment7.net - http://se...
FEC2 57F1 D465 EB15 5D6E 7C11 332A 551C 796C 9F04