Copyright paperwork is done, is there anymore feedback on this? IMO the
main things are as follows:

1) correctness
2) consistency with coding standard
3) solves a problem (new approach reads 8 bytes at a time so we need
something that will break if the code does this wrong e.g. alignment,
endianness)

Cheers
Sam

On Tue, Oct 15, 2024, 10:44 Simon Josefsson <si...@josefsson.org> wrote:

> Thanks this looks better.  Let's keep it around for more feedback/review
> until your copyright papers arrive.
>
> /Simon
>
> Sam Russell <sam.h.russ...@gmail.com> writes:
>
> >>  Or repeat "Gnulib crc test string" many times.
> >
> > done
> >
> >> This isn't correct until the new implementation is added
> >
> > done
> >
> >> I would make it test much larger
> >> mis-alignment too, how about a ~700 byte string and test up to ~300 byte
> >> mis-alignment?
> >
> > I'm not sure what problem this solves. I've used a >128 byte test string
> > because I have the PCLMUL implementation in mind, but ultimately we're
> > testing mis-alignment on an 8-byte word (slice-by-8 reading into a 64-bit
> > register) or a 16-byte word (PCLMUL reading into a 128-bit register), so
> we
> > could get away with a single off-by-1 test but here we are testing
> > everything from 0-15 bytes of misalignment; a 49-byte misalignment should
> > create the same problem as a 1-byte misalignment.
> >
> >
> > On Tue, 15 Oct 2024 at 09:57, Simon Josefsson <si...@josefsson.org>
> wrote:
> >
> >> Sam Russell <sam.h.russ...@gmail.com> writes:
> >>
> >> > +  char plaintext[] = "This file is free software: you can redistribu"
> >> > +                     "te it and/or modify it under the terms of the "
> >> > +                     "GNU Lesser General Public License as published"
> >> > +                     " by th";
> >>
> >> Using license texts like this has at least two problems: 1) license
> >> texts aren't freely licensed so you can't re-use them (although this
> >> snippet is probably too small to be copyrightable), and 2) this may
> >> trigger license review checkers and could result in incorrect license
> >> attribution for this file.
> >>
> >> IMHO it isn't worth this hassle.  Use some other freely licensed random
> >> text string instead.  Or repeat "Gnulib crc test string" many times.
> >>
> >> > +  char data[128 + 16 + 16];
> >>
> >> Use sizeof or some symbol instead of fixed sized like this.
> >>
> >> > +   * Test for new CRC32 implementation
> >> > +   * The original implementation works on a byte-by-byte basis
> >> > +   * but the new one will work on 8 or 16 byte alignments, so
> >> > +   * these tests will confirm correct operation with non-aligned
> >> > +   * data and data that isn't even multiples of 16 in length.
> >> > +   *
> >> > +   * The PCLMUL implementation takes 128 bytes at a time on
> >> > +   * 16-byte alignment, so we will do 128 + 16 bytes of plaintext
> >> > +   * and alter the alignment up to 16 bytes
> >>
> >> This isn't correct until the new implementation is added -- maybe you
> >> could rewrite this into something simpler like "Test that the API handle
> >> differently aligned data."?  I would make it test much larger
> >> mis-alignment too, how about a ~700 byte string and test up to ~300 byte
> >> mis-alignment?
> >>
> >> /Simon
> >>
> >> > +   */
> >> > +
> >> > +  for (i = 0; i < 16; i++)
> >> > +    {
> >> > +      memcpy(data + i, plaintext, 128 + 16);
> >> > +      p = crc32_update_no_xor (0, data + i, 128 + 16);
> >> > +      if (p != 0x18c9bfb0)
> >> > +        {
> >> > +          printf ("aligned c at %lu got %lx\n", i, (unsigned long)
> p);
> >> > +          return 1;
> >> > +        }
> >> > +    }
> >> > +
> >> > +
> >> >    return 0;
> >> >  }
> >> >
> >>
> > diff --git a/ChangeLog b/ChangeLog
> > index 465b998ccc..d271197d33 100644
> > --- a/ChangeLog
> > +++ b/ChangeLog
> > @@ -1,3 +1,8 @@
> > +2024-10-15  Sam Russell  <sam.h.russ...@gmail.com>
> > +
> > +     crc: New tests for non-byte-aligned data.
> > +     * tests/test-crc.c: New test.
> > +
> >  2024-10-13  Bruno Haible  <br...@clisp.org>
> >
> >       string-desc: New function string_desc_c_casecmp.
> > diff --git a/tests/test-crc.c b/tests/test-crc.c
> > index 16d2ff08eb..722843de44 100644
> > --- a/tests/test-crc.c
> > +++ b/tests/test-crc.c
> > @@ -21,11 +21,19 @@
> >  #include "crc.h"
> >
> >  #include <stdio.h>
> > +#include <string.h>
> >
> >  int
> >  main (int argc, char *argv[])
> >  {
> >    uint32_t p;
> > +  size_t i;
> > +  char plaintext[] = "Gnulib crc testsGnulib crc tests"
> > +                     "Gnulib crc testsGnulib crc tests"
> > +                     "Gnulib crc testsGnulib crc tests"
> > +                     "Gnulib crc testsGnulib crc tests"
> > +                     "Gnulib crc testsGnulib crc tests";
> > +  char data[sizeof(plaintext) + sizeof(unsigned long int)];
> >
> >    p = crc32_update_no_xor (42, "foo", 3);
> >    if (p != 0x46e87f05)
> > @@ -55,5 +63,25 @@ main (int argc, char *argv[])
> >        return 1;
> >      }
> >
> > +  /*
> > +   * Test for new CRC32 implementation
> > +   * The original implementation works on a byte-by-byte basis
> > +   * but new implementations may work on 8 or 16 byte alignments.
> > +   * This test will confirm correct operation with non-aligned
> > +   * data.
> > +   */
> > +
> > +  for (i = 0; i < sizeof(unsigned long int); i++)
> > +    {
> > +      memcpy(data + i, plaintext, sizeof(plaintext));
> > +      p = crc32_update_no_xor (0, data + i, sizeof(plaintext));
> > +      if (p != 0x654978c3)
> > +        {
> > +          printf ("aligned c at %lu got %lx\n", i, (unsigned long) p);
> > +          return 1;
> > +        }
> > +    }
> > +
> > +
> >    return 0;
> >  }
> >
>

Reply via email to