On Sun, Jun 09, 2019 at 06:49:06AM +0200, Christian Couder wrote: > From: Christian Couder <christian.couder@xxxxxxxxx> > > Add actual tests for operations using `struct oidmap` from oidmap.{c,h}. > > Signed-off-by: Christian Couder <chriscool@xxxxxxxxxxxxx> > --- > t/t0016-oidmap.sh | 100 ++++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 100 insertions(+) > create mode 100755 t/t0016-oidmap.sh > > diff --git a/t/t0016-oidmap.sh b/t/t0016-oidmap.sh > new file mode 100755 > index 0000000000..3a8e8bdb3d > --- /dev/null > +++ b/t/t0016-oidmap.sh > @@ -0,0 +1,100 @@ > +#!/bin/sh > + > +test_description='test oidmap' > +. ./test-lib.sh > + > +# This purposefully is very similar to t0011-hashmap.sh > + > +test_oidmap() { > + echo "$1" | test-tool oidmap $3 > actual && > + echo "$2" > expect && Style nit: space between redirection op and filename. > + test_cmp expect actual > +} > + > + > +test_expect_success 'setup' ' > + > + test_commit one && > + test_commit two && > + test_commit three && > + test_commit four > + > +' > + > +test_oidhash() { > + git rev-parse "$1" | perl -ne 'print hex("$4$3$2$1") . "\n" if m/^(..)(..)(..)(..).*/;' New Perl dependencies always make Dscho sad... :) So, 'test oidmap' from the previous patch prints the value we want to check with: printf("%u\n", sha1hash(oid.hash)); First, since object ids inherently make more sense as hex values, it would be more appropriate to print that hash with the '%x' format specifier, and then we wouldn't need Perl's hex() anymore, and thus could swap the order of the first four bytes in oidmap's hash without relying on Perl, e.g. with: sed -e 's/^\(..\)\(..\)\(..\)\(..\).*/\4\3\2\1/' Second, and more importantly, the need for swapping the byte order indicates that this test would fail on big-endian systems, I'm afraid. So I think we need an additional bswap32() on the printing side, and then could further simplify 'test_oidhash': diff --git a/t/helper/test-oidmap.c b/t/helper/test-oidmap.c index 0ba122a264..4177912f9a 100644 --- a/t/helper/test-oidmap.c +++ b/t/helper/test-oidmap.c @@ -51,7 +51,7 @@ int cmd__oidmap(int argc, const char **argv) /* print hash of oid */ if (!get_oid(p1, &oid)) - printf("%u\n", sha1hash(oid.hash)); + printf("%x\n", bswap32(sha1hash(oid.hash))); else printf("Unknown oid: %s\n", p1); diff --git a/t/t0016-oidmap.sh b/t/t0016-oidmap.sh index 3a8e8bdb3d..9c0d88a316 100755 --- a/t/t0016-oidmap.sh +++ b/t/t0016-oidmap.sh @@ -22,10 +22,10 @@ test_expect_success 'setup' ' ' test_oidhash() { - git rev-parse "$1" | perl -ne 'print hex("$4$3$2$1") . "\n" if m/^(..)(..)(..)(..).*/;' + git rev-parse "$1" | cut -c1-8 } -test_expect_success PERL 'hash' ' +test_expect_success 'hash' ' test_oidmap "hash one hash two > +} > + > +test_expect_success PERL 'hash' ' > + > +test_oidmap "hash one > +hash two > +hash invalidOid > +hash three" "$(test_oidhash one) > +$(test_oidhash two) > +Unknown oid: invalidOid > +$(test_oidhash three)" > + > +' > + > +test_expect_success 'put' ' > + > +test_oidmap "put one 1 > +put two 2 > +put invalidOid 4 > +put three 3" "NULL > +NULL > +Unknown oid: invalidOid > +NULL" > + > +' > + > +test_expect_success 'replace' ' > + > +test_oidmap "put one 1 > +put two 2 > +put three 3 > +put invalidOid 4 > +put two deux > +put one un" "NULL > +NULL > +NULL > +Unknown oid: invalidOid > +2 > +1" > + > +' > + > +test_expect_success 'get' ' > + > +test_oidmap "put one 1 > +put two 2 > +put three 3 > +get two > +get four > +get invalidOid > +get one" "NULL > +NULL > +NULL > +2 > +NULL > +Unknown oid: invalidOid > +1" > + > +' > + > +test_expect_success 'iterate' ' > + > +test_oidmap "put one 1 > +put two 2 > +put three 3 > +iterate" "NULL > +NULL > +NULL > +$(git rev-parse two) 2 > +$(git rev-parse one) 1 > +$(git rev-parse three) 3" > + > +' > + > +test_done > -- > 2.22.0.14.g9023ccb50a >