Skip to content

Assertion failures in mruby-pack on big endian #4190

Description

@jeremyevans

The good news is mruby 2.0.0 works on OpenBSD/sparc64 (previous versions failed to build). However, running the tests shows the following failures:

Fail: pack float (mrbgems: mruby-pack)
 - Assertion[1] Failed: Expected to be equal
    Expected: "\x00\x00@@"
      Actual: "@@\x00\x00"
 - Assertion[2] Failed: Expected to be equal
    Expected: [3]
      Actual: [2.304855714121459e-41]
 - Assertion[3] Failed: Expected to be equal
    Expected: "@@\x00\x00"
      Actual: "\x00\x00@@"
 - Assertion[4] Failed: Expected to be equal
    Expected: [3]
      Actual: [2.304855714121459e-41]
 - Assertion[5] Failed: Expected to be equal
    Expected: "@@\x00\x00"
      Actual: "\x00\x00@@"
 - Assertion[6] Failed: Expected to be equal
    Expected: [3]
      Actual: [2.304855714121459e-41]
 - Assertion[7] Failed: Expected to be equal
    Expected: "@@\x00\x00"
      Actual: "\x00\x00@@"
 - Assertion[8] Failed: Expected to be equal
    Expected: [3]
      Actual: [2.304855714121459e-41]
Fail: pack double (mrbgems: mruby-pack)
 - Assertion[1] Failed: Expected to be equal
    Expected: "\x00\x00\x00\x00\x00\x00\b@"
      Actual: "@\b\x00\x00\x00\x00\x00\x00"
 - Assertion[2] Failed: Expected to be equal
    Expected: [3]
      Actual: [1.043466644016713e-320]
 - Assertion[3] Failed: Expected to be equal
    Expected: "@\b\x00\x00\x00\x00\x00\x00"
      Actual: "\x00\x00\x00\x00\x00\x00\b@"
 - Assertion[4] Failed: Expected to be equal
    Expected: [3]
      Actual: [1.043466644016713e-320]
 - Assertion[5] Failed: Expected to be equal
    Expected: "@\b\x00\x00\x00\x00\x00\x00"
      Actual: "\x00\x00\x00\x00\x00\x00\b@"
 - Assertion[6] Failed: Expected to be equal
    Expected: [3]
      Actual: [1.043466644016713e-320]
 - Assertion[7] Failed: Expected to be equal
    Expected: "@\b\x00\x00\x00\x00\x00\x00"
      Actual: "\x00\x00\x00\x00\x00\x00\b@"
 - Assertion[8] Failed: Expected to be equal
    Expected: [3]
      Actual: [1.043466644016713e-320]

These failures do not occur on OpenBSD/amd64, and the test output leads me to believe this may be a general mruby-pack issue on big endian systems.

Activity

  1. matz commented on Dec 20, 2018

    @matz
    Member

    Do you have MRB_ENDIAN_BIG defined?

  2. jeremyevans commented on Dec 20, 2018

    @jeremyevans
    Author

    I'm guessing it isn't explicitly defined. I'm going to close this now, and if there are still assertion failures with it defined, I'll reopen.

  3. jeremyevans commented on Dec 20, 2018

    @jeremyevans
    Author

    I just wanted to confirm that defining MRB_ENDIAN_BIG did fix the problem. We ended up doing something similar to this so the same code works on both big endian and little endian:

     /* define on big endian machines; used by MRB_NAN_BOXING */
    -//#define MRB_ENDIAN_BIG
    +#include <endian.h>
    +#if (BYTE_ORDER == BIG_ENDIAN)
    +#define MRB_ENDIAN_BIG
    +#endif
  4. matz commented on Dec 20, 2018

    @matz
    Member

    That would be a nice idea. I was working on a different solution that relies on the dynamic endian check.
    But this one is better.

  5. added 4 commits that reference this issue on Dec 20, 2018
    2fdb309
    f553791
    445c64d
    ed2bc5d
  6. added 4 commits that reference this issue on Jul 16, 2021
    24927a8
    e5d304c
    06cc5b9
    ed9c520
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions