JUnit tests fail for e.g. German locale (incl. fix)


#1

Hi there,

I am using HDF5 1.10.5 on Arch Linux, where I have LANG=de_DE.UTF-8.
I wanted to install the hdf5-java:1.10.5-1 package from the Arch User repository (see https://aur.archlinux.org/packages/hdf5-java/), which builds HDF5 on my local machine during the installation.

In the JUnit tests as run by java/test/junit.sh.in, the timing info in the output of JUnit is replaced by XXXX, using sed:

sed -e 's/thread [0-9]*/thread (IDs)/' -e 's/: .*\.c /: (file name) /' \
    -e 's/line [0-9]*/line (number)/' \
    -e 's/Time: [0-9]*[\.[0-9]*]*/Time:  XXXX/' \
    -e 's/v[1-9]*\.[0-9]*\./version (number)\./' \
    -e 's/[1-9]*\.[0-9]*\.[0-9]*[^)]*/version (number)/' \
    JUnit-TestH5.ext > JUnit-TestH5.out

JUnit outputs the timing info on my machine with a comma instead of a dot as a decimal separator due to my locale settings and this leads to errors in the test process of HDF5:

**FAILED**    JUnit-TestH5
    Expected result differs from actual result
    *** JUnit-TestH5.txt	2020-01-07 16:09:27.549026750 +0100
    --- JUnit-TestH5.out	2020-01-07 16:09:28.959026778 +0100
    ***************
    *** 10,16 ****
      .testH5get_libversion
      .testH5set_free_list_limits
      
    ! Time:  XXXX
      
      OK (10 tests)
      
    --- 10,16 ----
      .testH5get_libversion
      .testH5set_free_list_limits
      
    ! Time:  XXXX,183
      
      OK (10 tests)

As you can see, only the part before the decimal comma is replaced by XXXX and this leads to a comparison error.

I suggest to modify the regular expressions in the sed calls in junit.sh.in as follows:

<     -e 's/Time: [0-9]*[\.[0-9]*]*/Time:  XXXX/' \
---
>     -e 's/Time: [0-9]*[[\.,][0-9]*]*/Time:  XXXX/' \

The JUnit test passes when these modifications are applied.

However, some of the java/examples/datatype/JavaDatatypeExample.sh.in tests fail as well; in particular the ones where some floating point data is dumped into a text file and compared against a reference file. These are H5Ex_T_Float.java and H5Ex_T_FloatAttribute.java.
In my opinion, the correct way would be to force the DecimalFormat to use the English locale, which probably could be done like this (see e.g. Stack Overflow: Change DecimalFormat locale) in the two Java files:

DecimalFormat df = new DecimalFormat("#,##0.0000", new DecimalFormatSymbols(Locale.US));

For now, I simply did export LANG=en_US.UTF-8 and the build and tests went fine.
However, it would be nice to have HDF5 compile and be tested successfully independent of the local environment of the users.

What do you think about this?

Best regards,
Jonathan Schilling


#2

Hi Jonathan,

Thank you for reporting this bug! I entered reference HDFFV-10995 for the issue.

-Barbara


#3

Hi Barbara,

I noticed that you implemented these changes in the latest release 1.12.
Thanks for this prompt action :slight_smile:

Best,
Jonathan