forked from git/git
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
sha1-array: add test-sha1-array and basic tests
Helped-by: Jeff King <peff@peff.net> Helped-by: Eric Sunshine <sunshine@sunshineco.com> Signed-off-by: Rene Scharfe <l.s.r@web.de> Acked-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
- Loading branch information
Showing
4 changed files
with
110 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,74 @@ | ||
#!/bin/sh | ||
|
||
test_description='basic tests for the SHA1 array implementation' | ||
. ./test-lib.sh | ||
|
||
echo20 () { | ||
prefix="${1:+$1 }" | ||
shift | ||
while test $# -gt 0 | ||
do | ||
echo "$prefix$1$1$1$1$1$1$1$1$1$1$1$1$1$1$1$1$1$1$1$1" | ||
shift | ||
done | ||
} | ||
|
||
test_expect_success 'ordered enumeration' ' | ||
echo20 "" 44 55 88 aa >expect && | ||
{ | ||
echo20 append 88 44 aa 55 && | ||
echo for_each_unique | ||
} | test-sha1-array >actual && | ||
test_cmp expect actual | ||
' | ||
|
||
test_expect_success 'ordered enumeration with duplicate suppression' ' | ||
echo20 "" 44 55 88 aa >expect && | ||
{ | ||
echo20 append 88 44 aa 55 && | ||
echo20 append 88 44 aa 55 && | ||
echo for_each_unique | ||
} | test-sha1-array >actual && | ||
test_cmp expect actual | ||
' | ||
|
||
test_expect_success 'lookup' ' | ||
{ | ||
echo20 append 88 44 aa 55 && | ||
echo20 lookup 55 | ||
} | test-sha1-array >actual && | ||
n=$(cat actual) && | ||
test "$n" -eq 1 | ||
' | ||
|
||
test_expect_success 'lookup non-existing entry' ' | ||
{ | ||
echo20 append 88 44 aa 55 && | ||
echo20 lookup 33 | ||
} | test-sha1-array >actual && | ||
n=$(cat actual) && | ||
test "$n" -lt 0 | ||
' | ||
|
||
test_expect_success 'lookup with duplicates' ' | ||
{ | ||
echo20 append 88 44 aa 55 && | ||
echo20 append 88 44 aa 55 && | ||
echo20 lookup 55 | ||
} | test-sha1-array >actual && | ||
n=$(cat actual) && | ||
test "$n" -ge 2 && | ||
test "$n" -le 3 | ||
' | ||
|
||
test_expect_success 'lookup non-existing entry with duplicates' ' | ||
{ | ||
echo20 append 88 44 aa 55 && | ||
echo20 append 88 44 aa 55 && | ||
echo20 lookup 66 | ||
} | test-sha1-array >actual && | ||
n=$(cat actual) && | ||
test "$n" -lt 0 | ||
' | ||
|
||
test_done |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
#include "cache.h" | ||
#include "sha1-array.h" | ||
|
||
static void print_sha1(const unsigned char sha1[20], void *data) | ||
{ | ||
puts(sha1_to_hex(sha1)); | ||
} | ||
|
||
int main(int argc, char **argv) | ||
{ | ||
struct sha1_array array = SHA1_ARRAY_INIT; | ||
struct strbuf line = STRBUF_INIT; | ||
|
||
while (strbuf_getline(&line, stdin, '\n') != EOF) { | ||
const char *arg; | ||
unsigned char sha1[20]; | ||
|
||
if (skip_prefix(line.buf, "append ", &arg)) { | ||
if (get_sha1_hex(arg, sha1)) | ||
die("not a hexadecimal SHA1: %s", arg); | ||
sha1_array_append(&array, sha1); | ||
} else if (skip_prefix(line.buf, "lookup ", &arg)) { | ||
if (get_sha1_hex(arg, sha1)) | ||
die("not a hexadecimal SHA1: %s", arg); | ||
printf("%d\n", sha1_array_lookup(&array, sha1)); | ||
} else if (!strcmp(line.buf, "clear")) | ||
sha1_array_clear(&array); | ||
else if (!strcmp(line.buf, "for_each_unique")) | ||
sha1_array_for_each_unique(&array, print_sha1, NULL); | ||
else | ||
die("unknown command: %s", line.buf); | ||
} | ||
return 0; | ||
} |