[ruby-core:90678] [Ruby trunk Bug#15453][Rejected] Ruby 2.5 on Darwin appears to return different result

From: mame@...
Date: 2018-12-23 03:23:24 UTC
List: ruby-core #90678
Issue #15453 has been updated by mame (Yusuke Endoh).

Status changed from Open to Rejected

Your program is actually not deterministic.  The result of `Array#sort_by!` may differ depending upon the platform.  See the rdoc:

```
  *  The result is not guaranteed to be stable.  When the comparison of two
  *  elements returns +0+, the order of the elements is unpredictable.
```

A* is of course robust against the tie breaking.  The reason why your program does not work correctly, is just because your program is buggy.  Read the textbook carefully.

You can reproduce the bug on Linux by replacing the line of `sort_by!` with:

    queue.sort_by! { |p, cost, estimate| [cost + estimate, rand()] }

Good luck.

----------------------------------------
Bug #15453: Ruby 2.5 on Darwin appears to return different result
https://bugs.ruby-lang.org/issues/15453#change-75848

* Author: akanet (Vincent Woo)
* Status: Rejected
* Priority: Normal
* Assignee: 
* Target version: 
* ruby -v: 
* Backport: 2.4: UNKNOWN, 2.5: UNKNOWN
----------------------------------------
Hi everyone,

I'm not sure if this is the right place to report, but I hit a shocking result recently. I was developing on my OSX machine on ruby 2.5.1 and also on a linux x64 machine and noticed I was getting different results for a totally deterministic ruby script (attached).

On Darwin:

~~~
Vincents-MBP:~ vwoo$ ruby --version
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-darwin17]
Vincents-MBP:~ vwoo$ ruby test.rb
.=.|=.|.|=.|=|=.
.|=|=|||..|.=...
.==|....||=..|==
=.|....|.==.|==.
=|..==...=.|==..
=||.=.=||=|=..|=
|.=.===|||..=..|
|..==||=.|==|===
.=..===..=|.|||.
.======|||=|=.|=
.===|=|===.===||
=|||...|==..|=.|
=.=|=.=..=.||==|
||=|=...|==.=|==
|=.=||===.|||===
||.|==.|.|.||=||
1445
[[10, 10, :torch], 49, 0]
~~~

On Linux:

~~~
vwoo@ubuntu:~$ ruby --version
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux-gnu]
vwoo@ubuntu:~$ ruby test.rb
.=.|=.|.|=.|=|=.
.|=|=|||..|.=...
.==|....||=..|==
=.|....|.==.|==.
=|..==...=.|==..
=||.=.=||=|=..|=
|.=.===|||..=..|
|..==||=.|==|===
.=..===..=|.|||.
.======|||=|=.|=
.===|=|===.===||
=|||...|==..|=.|
=.=|=.=..=.||==|
||=|=...|==.=|==
|=.=||===.|||===
||.|==.|.|.||=||
1032
[[10, 10, :torch], 45, 0]
~~~

I believe the Linux result to be correct (and I have validated it against other Linux machines). This appears to happen on 2.5.3 as well. I built Darwin ruby with ruby-install and Apple clang 10. Any help debugging would be very appreciated! 

---Files--------------------------------
test.rb (1.97 KB)


-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:[email protected]?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>

In This Thread

Prev Next