Em sex., 13 de ago. de 2021 às 07:15, Andres Freund <andres@anarazel.de> escreveu:
Hi,
On 2021-08-13 12:44:17 +0300, Yura Sokolov wrote: > Andres Freund писал 2021-08-13 12:21: > > Any chance you'd write a test for simplehash with such huge amount of > > values? It'd require a small bit of trickery to be practical. On systems > > with MAP_NORESERVE it should be feasible. > > Which way C structures should be tested in postgres? > dynahash/simplhash - do they have any tests currently? > I'll do if hint is given.
We don't have a great way right now :(. I think the best is to have a SQL callable function that uses some API. See e.g. test_atomic_ops() et al in src/test/regress/regress.c
> > > static inline void > > > -SH_COMPUTE_PARAMETERS(SH_TYPE * tb, uint32 newsize) > > > +SH_COMPUTE_PARAMETERS(SH_TYPE * tb, uint64 newsize) > > > { > > > uint64 size; > > > > > > @@ -322,11 +322,7 @@ SH_COMPUTE_PARAMETERS(SH_TYPE * tb, uint32 > > > newsize) > > > > > > /* now set size */ > > > tb->size = size; > > > - > > > - if (tb->size == SH_MAX_SIZE) > > > - tb->sizemask = 0; > > > - else > > > - tb->sizemask = tb->size - 1; > > > + tb->sizemask = (uint32)(size - 1); > > > > ISTM using ~0 would be nicer here? > > I don't think so. > To be rigid it should be `~(uint32)0`. > But I believe it doesn't differ from `tb->sizemask = (uint32)(size - 1)` > that is landed with patch, therefore why `if` is needed?
Personally I find it more obvious to understand the intended behaviour with ~0 (i.e. all bits set) than with a width truncation.