[#39260] RubySpec vs CRuby's test/... — Marc-Andre Lafortune <ruby-core-mailing-list@...>

Before the release of Ruby 1.9.2 it was decided that Ruby releases

59 messages 2011/09/04
[#39276] Re: RubySpec vs CRuby's test/... — "NARUSE, Yui" <naruse@...> 2011/09/05

2011/9/5 Marc-Andre Lafortune <ruby-core-mailing-list@marc-andre.ca>:

[#39325] Re: RubySpec vs CRuby's test/... — Charles Oliver Nutter <headius@...> 2011/09/07

I'll jump in with some context from the JRuby perspective.

[#39335] Re: RubySpec vs CRuby's test/... — "NARUSE, Yui" <naruse@...> 2011/09/07

2011/9/7 Charles Oliver Nutter <headius@headius.com>:

[#39365] Re: RubySpec vs CRuby's test/... — Charles Oliver Nutter <headius@...> 2011/09/08

On Wed, Sep 7, 2011 at 4:17 AM, NARUSE, Yui <naruse@airemix.jp> wrote:

[#39366] Re: RubySpec vs CRuby's test/... — Yukihiro Matsumoto <matz@...> 2011/09/08

Hi,

[#39370] Re: RubySpec vs CRuby's test/... — Michael Klishin <michael.s.klishin@...> 2011/09/08

Yukihiro Matsumoto:

[#39374] Re: RubySpec vs CRuby's test/... — "NARUSE, Yui" <naruse@...> 2011/09/08

(2011/09/09 1:29), Michael Klishin wrote:

[#39376] Re: RubySpec vs CRuby's test/... — Luis Lavena <luislavena@...> 2011/09/08

On Thu, Sep 8, 2011 at 4:19 PM, NARUSE, Yui <naruse@airemix.jp> wrote:

[#39379] Re: RubySpec vs CRuby's test/... — Masaya TARUI <tarui@...> 2011/09/08

Hello Luis,

[#39382] Re: RubySpec vs CRuby's test/... — Luis Lavena <luislavena@...> 2011/09/08

On Thu, Sep 8, 2011 at 5:34 PM, Masaya TARUI <tarui@prx.jp> wrote:

[#39386] Re: RubySpec vs CRuby's test/... — Charles Oliver Nutter <headius@...> 2011/09/08

On Thu, Sep 8, 2011 at 3:57 PM, Luis Lavena <luislavena@gmail.com> wrote:

[#39267] [Ruby 1.9 - Bug #5273][Open] Float#round returns the wrong floats for higher precision — Marc-Andre Lafortune <ruby-core@...>

14 messages 2011/09/04

[#39435] [Ruby 1.9 - Bug #5306][Open] Application Hangs Due to Recent rb_thread_select Changes — Charlie Savage <cfis@...>

27 messages 2011/09/09

[#39498] [Ruby 1.9 - Feature #5310][Open] Integral objects — Kenta Murata <muraken@...>

13 messages 2011/09/13

[#39539] [Ruby 1.9 - Feature #5321][Open] Introducing Numeric#exact? and Numeric#inexact? — Kenta Murata <muraken@...>

26 messages 2011/09/14

[#39629] [Ruby 1.9 - Feature #5341][Open] Add SSL session reuse to Net::HTTP — Eric Hodel <drbrain@...7.net>

18 messages 2011/09/19

[#39634] [Ruby 1.9 - Bug #5343][Open] Unexpected blocking behavior when interrupt Socket#accept — Tomoyuki Chikanaga <nagachika00@...>

10 messages 2011/09/20

[#39673] [Ruby 1.9 - Bug #5353][Open] TLS v1.0 and less - Attack on CBC mode — Martin Bosslet <Martin.Bosslet@...>

13 messages 2011/09/22

[#39700] [Ruby 1.9 - Feature #5364][Open] How about new syntax: "object.\method" returns a Method instance? — Joey Zhou <yimutang@...>

20 messages 2011/09/25

[#39740] [Ruby 1.9 - Feature #5372][Open] Promote blank? to a core protocol — Alex Young <alex@...>

18 messages 2011/09/27
[#39743] Re: [Ruby 1.9 - Feature #5372][Open] Promote blank? to a core protocol — Aaron Patterson <aaron@...> 2011/09/27

On Tue, Sep 27, 2011 at 06:18:19PM +0900, Alex Young wrote:

[#39754] Re: [Ruby 1.9 - Feature #5372][Open] Promote blank? to a core protocol — Alex Young <alex@...> 2011/09/27

On 27/09/2011 19:46, Aaron Patterson wrote:

[#39807] Re: [Ruby 1.9 - Feature #5372][Open] Promote blank? to a core protocol — Eric Hodel <drbrain@...7.net> 2011/10/01

On Sep 27, 2011, at 6:52 PM, Alex Young wrote:

[#39751] [Ruby 1.9 - Bug #5375][Open] [mingw32] segfault on WinXP SP3 with 1.9.3dev@33347 — Jon Forums <redmine@...>

26 messages 2011/09/27

[#39772] ObjectSpace.reference_form(obj) #=> references_array — SASADA Koichi <ko1@...>

Hi,

13 messages 2011/09/29
[#39774] Re: ObjectSpace.reference_form(obj) #=> references_array — Nobuyoshi Nakada <nobu@...> 2011/09/29

Hi,

[#39796] [Ruby 1.9 - Bug #5384][Open] Ruby 1.9.3-RC1 Fails to Compile on Solaris — Cyrus Lopez <cyrus@...>

11 messages 2011/09/30

[ruby-core:39402] Re: RubySpec vs CRuby's test/...

From: Charles Oliver Nutter <headius@...>
Date: 2011-09-09 02:03:11 UTC
List: ruby-core #39402
On Thu, Sep 8, 2011 at 5:40 PM, SASADA Koichi <ko1@atdot.net> wrote:
> Thank you for summary of needs. =C2=A0Following is problems I feel (and
> discussed on IRC).
>
> Problems:
>
> (1) Most of MRI developers (is it true?) can't change RubySpec. =C2=A0Als=
o
> most of MRI developers don't know RubySpec rules.

I don't think there would be a problem getting MRI developers access
to RubySpec for direct commits. I understand the issues with "rules"
though. Personally I'd be happy to see *any* specs getting in, even if
they require some cleanup after the fact. It would be better than
nothing.

> (2) We can add code modification and test cases in one commit. =C2=A0If w=
e
> can't do it, we need commit commit modifications and RubySpec isolation.

This is an issue, but a small one. You point out later that you could
just keep a copy of RubySpec in MRI's repository and migrate changes
over. That's not a difficult task, if it's done periodically. This is
how Rubinius uses RubySpec.

For JRuby, we chose not to keep our own copy of RubySpec. Instead, our
build will fetch a "known stable" revision of RubySpec as part of the
build and run against that. We make all our RubySpec commits directly
to RubySpec.

> (3) It is difficult to judge test is an independent or not.
> Additionally, we don't need to insert "guard" about version or
> implementation on our "test/*". =C2=A0It seems tough work to insert corre=
ct
> "guard".

That's certainly true. I wouldn't expect that all tests would
immediately start going to the "right place". I believe the
frustration I and others feel mostly stems from the fact that there's
almost no specs coming from Ruby core now, which means those of us
*not* in ruby-core have to reverse-engineer behavior changes and write
specs ourselves. It's a dismal situation, and any improvement would be
welcome.

> (4) Current RubySpec is not portable (especially Windows)
> [ruby-core:39379].

This is just from lack of maintenance. As early as last year the whole
suite ran green on Windows. We can do it again.

> (5) As you know, trunk is not unstable. =C2=A0For example, some modificat=
ions
> are revertd soon. =C2=A0Should we add such features as "Specifications"? =
=C2=A0(I
> know that there is an opinion that the experimental code should have a
> spec).

If MRI maintained a copy of RubySpec in the MRI repository, then it
would be easy to revert spec changes as well. Maybe this would be a
good guide (edits welcome):

* If it is a new experimental feature, tests/specs (if they exist)
could certainly live only in MRI's repository. If that feature becomes
"official" those tests should be migrated to RubySpec.
* If an existing feature changes, the associated specs should change too.
* Anything that's MRI-specific or which Matz deems "implementation
specific" should only be tested by MRI's own suite.

> (6) test/* contains many many corner cases depend on MRI implementation
> to increase code coverage (Thanks Endo-san). =C2=A0It is independent as R=
uby
> language, but dependent on MRI. =C2=A0Where should we write such tests?

Those all stay in MRI's suite.

There will never be a clear line between what's
implementation/MRI-specific and what is true specified behavior since
there's no specification (or rather, the only specification that
exists encompasses only a small subset of Ruby). Nobody expects
ruby-core to be perfect here. But when a commit includes visible
behavioral changes that other implementations will eventually want to
duplicate, we *must* have a test/spec somewhere independent of MRI's
tests.

> I think this problem is "who pay efforts on it?".
>
> One solution is continuing current style (using test/*) and someone
> migrate tests to RubySpec if needed. =C2=A0But we need "someone".

In the past, there have been many contributors migrating tests (and
reverse-engineering MRI to write new ones) by hand. That works, if we
can keep up such efforts and keep finding new people as old ones
leave. Migrating tests is a thankless job, so perhaps we need to thank
people more often :)

One way to start this process would be to start at "a" in the existing
test/* tests and just start moving bits to RubySpec. I've done this
for some MRI tests in the past and for many JRuby tests too. It's a
slow process, but it feels great to delete the old test in favor of a
new spec.

> Other solution is MRI committer join to maintain RubySpec. =C2=A0MRI
> developer (including me) should change development style and several
> overhead to do (I think inserting correct "guard" is difficult).

Guarding isn't too bad. The main guards that ruby-core would need to know a=
re:

ruby_version_is/is_not - for specifying a range of Ruby versions, as
Strings, where the behavior is expected to exist
platform_is/is_not - for specifying platform-specific behaviors (e.g. :wind=
ows).

There are more complex forms in mspec, but we can help teach them to
ruby-core as we get going.

I think ruby-core would only be responsible for making sure specs pass
on the Ruby versions that RubySpec covers: 1.8.7 and 1.9.2. 1.9.3
changes are probably not covered in specs currently.

> Brian Ford told me that we can have our own RubySpec repository in MRI
> repository and migrating updating specs from MRI's RubySpec repository
> to the RubySpec repository is easy. =C2=A0It is also one solution. =C2=A0=
However,
> we need "someone" who can migrate. =C2=A0It solves (1), (2) and maybe (3)=
.

For 1.9.2, I believe yugui took the lead on making sure specs were
written for 1.9.2 behaviors (as much as possible...time was limited)
and also ensuring that 1.9.2 passed all specs (with appropriate
version guards, etc). Could it be release manager's responsibility to
ensure specs get written or migrated, perhaps by asking the developers
making changes to write/migrate those specs?

Those of us outside ruby-core really, really want to help make this
happen. Let me know what I personally can do to help.

- Charlie

In This Thread