On July 30, 2019 3:45 PM, Jeff King wrote: > To: Randall S. Becker <rsbecker@xxxxxxxxxxxxx> > Cc: 'Junio C Hamano' <gitster@xxxxxxxxx>; git@xxxxxxxxxxxxxxx; git- > packagers@xxxxxxxxxxxxxxxx > Subject: Re: [ANNOUNCE] Git v2.23.0-rc0 - Initial test failures on NonStop > > On Tue, Jul 30, 2019 at 01:08:37PM -0400, Randall S. Becker wrote: > > > t0016: oidmap > > > > Subtest 6 had an ordering issue. We do not know whether the problem is > the code or the test result not keeping up with the code changes. > > --- expect 2019-07-30 16:56:36 +0000 > > +++ actual 2019-07-30 16:56:36 +0000 > > @@ -1,6 +1,6 @@ > > NULL > > NULL > > NULL > > +7c7cd714e262561f73f3079dfca4e8724682ac21 3 > > 139b20d8e6c5b496de61f033f642d0e3dbff528d 2 > > d79ce1670bdcb76e6d1da2ae095e890ccb326ae9 1 > > -7c7cd714e262561f73f3079dfca4e8724682ac21 3 > > This one is very curious. It's iterating a hash, which _seems_ like it would > produce non-deterministic output. But neither this test nor the hashmap test > it is based on sorts the output, and they pass consistently for me. I assume > that's because while hash ordering is not guaranteed, it happens to be the > same as long the pattern of inserts is the same (with our implementation, > which does not do any hash randomization). > > But I am scratching my head as to what could be different on your platform > that would cause a different ordering (especially when the hashmap test this > is based on doesn't get one!). > > I guess in some sense it may not be worth tracking down, and we should just > sort the output of a hash iteration unconditionally when comparing it to > expected output. Definitely a head scratcher. Is it possible that the bucket() function, which uses key->hash & (map->tablesize - 1); might better use key->hash % (map->tablesize - 1); I have not seen a bucket computation done this way before so that surprised me, not that it should make a difference on hash-determinism. The only thing that might is an uninitialized stack variable, which on this platform's C compiler will not initialize. Global statics are always 0 unless otherwise specified, but I'm not sure about stack-local (but there's nothing wrong I can see in hashmap.c on those points. Sorting the output seems like a safe option, providing that the hash is itself demonstrably solid otherwise. Cheers, Randall