THIS IS A TEST INSTANCE ONLY! REPOSITORIES CAN BE DELETED AT ANY TIME!

浏览代码

Merge branch 'cc/test-oidmap'

Extend the test coverage a bit.

* cc/test-oidmap:
  t0016: add 'remove' subcommand test
  test-oidmap: remove 'add' subcommand
  test-hashmap: remove 'hash' command
  oidmap: use sha1hash() instead of static hash() function
  t: add t0016-oidmap.sh
  t/helper: add test-oidmap.c
tags/v2.23.0-rc0
Junio C Hamano 3 个月前
父节点
当前提交
c62bff2ced
共有 8 个文件被更改,包括 221 次插入27 次删除
  1. +1
    -0
      Makefile
  2. +3
    -10
      oidmap.c
  3. +1
    -8
      t/helper/test-hashmap.c
  4. +112
    -0
      t/helper/test-oidmap.c
  5. +1
    -0
      t/helper/test-tool.c
  6. +1
    -0
      t/helper/test-tool.h
  7. +0
    -9
      t/t0011-hashmap.sh
  8. +102
    -0
      t/t0016-oidmap.sh

+ 1
- 0
Makefile 查看文件

@@ -721,6 +721,7 @@ TEST_BUILTINS_OBJS += test-lazy-init-name-hash.o
TEST_BUILTINS_OBJS += test-match-trees.o
TEST_BUILTINS_OBJS += test-mergesort.o
TEST_BUILTINS_OBJS += test-mktemp.o
TEST_BUILTINS_OBJS += test-oidmap.o
TEST_BUILTINS_OBJS += test-online-cpus.o
TEST_BUILTINS_OBJS += test-parse-options.o
TEST_BUILTINS_OBJS += test-path-utils.o

+ 3
- 10
oidmap.c 查看文件

@@ -12,13 +12,6 @@ static int oidmap_neq(const void *hashmap_cmp_fn_data,
&((const struct oidmap_entry *) entry_or_key)->oid);
}

static int hash(const struct object_id *oid)
{
int hash;
memcpy(&hash, oid->hash, sizeof(hash));
return hash;
}

void oidmap_init(struct oidmap *map, size_t initial_size)
{
hashmap_init(&map->map, oidmap_neq, NULL, initial_size);
@@ -36,7 +29,7 @@ void *oidmap_get(const struct oidmap *map, const struct object_id *key)
if (!map->map.cmpfn)
return NULL;

return hashmap_get_from_hash(&map->map, hash(key), key);
return hashmap_get_from_hash(&map->map, oidhash(key), key);
}

void *oidmap_remove(struct oidmap *map, const struct object_id *key)
@@ -46,7 +39,7 @@ void *oidmap_remove(struct oidmap *map, const struct object_id *key)
if (!map->map.cmpfn)
oidmap_init(map, 0);

hashmap_entry_init(&entry, hash(key));
hashmap_entry_init(&entry, oidhash(key));
return hashmap_remove(&map->map, &entry, key);
}

@@ -57,6 +50,6 @@ void *oidmap_put(struct oidmap *map, void *entry)
if (!map->map.cmpfn)
oidmap_init(map, 0);

hashmap_entry_init(&to_put->internal_entry, hash(&to_put->oid));
hashmap_entry_init(&to_put->internal_entry, oidhash(&to_put->oid));
return hashmap_put(&map->map, to_put);
}

+ 1
- 8
t/helper/test-hashmap.c 查看文件

@@ -173,14 +173,7 @@ int cmd__hashmap(int argc, const char **argv)
p2 = strtok(NULL, DELIM);
}

if (!strcmp("hash", cmd) && p1) {

/* print results of different hash functions */
printf("%u %u %u %u\n",
strhash(p1), memhash(p1, strlen(p1)),
strihash(p1), memihash(p1, strlen(p1)));

} else if (!strcmp("add", cmd) && p1 && p2) {
if (!strcmp("add", cmd) && p1 && p2) {

/* create entry with key = p1, value = p2 */
entry = alloc_test_entry(hash, p1, p2);

+ 112
- 0
t/helper/test-oidmap.c 查看文件

@@ -0,0 +1,112 @@
#include "test-tool.h"
#include "cache.h"
#include "oidmap.h"
#include "strbuf.h"

/* key is an oid and value is a name (could be a refname for example) */
struct test_entry {
struct oidmap_entry entry;
char name[FLEX_ARRAY];
};

#define DELIM " \t\r\n"

/*
* Read stdin line by line and print result of commands to stdout:
*
* hash oidkey -> sha1hash(oidkey)
* put oidkey namevalue -> NULL / old namevalue
* get oidkey -> NULL / namevalue
* remove oidkey -> NULL / old namevalue
* iterate -> oidkey1 namevalue1\noidkey2 namevalue2\n...
*
*/
int cmd__oidmap(int argc, const char **argv)
{
struct strbuf line = STRBUF_INIT;
struct oidmap map = OIDMAP_INIT;

setup_git_directory();

/* init oidmap */
oidmap_init(&map, 0);

/* process commands from stdin */
while (strbuf_getline(&line, stdin) != EOF) {
char *cmd, *p1 = NULL, *p2 = NULL;
struct test_entry *entry;
struct object_id oid;

/* break line into command and up to two parameters */
cmd = strtok(line.buf, DELIM);
/* ignore empty lines */
if (!cmd || *cmd == '#')
continue;

p1 = strtok(NULL, DELIM);
if (p1)
p2 = strtok(NULL, DELIM);

if (!strcmp("put", cmd) && p1 && p2) {

if (get_oid(p1, &oid)) {
printf("Unknown oid: %s\n", p1);
continue;
}

/* create entry with oid_key = p1, name_value = p2 */
FLEX_ALLOC_STR(entry, name, p2);
oidcpy(&entry->entry.oid, &oid);

/* add / replace entry */
entry = oidmap_put(&map, entry);

/* print and free replaced entry, if any */
puts(entry ? entry->name : "NULL");
free(entry);

} else if (!strcmp("get", cmd) && p1) {

if (get_oid(p1, &oid)) {
printf("Unknown oid: %s\n", p1);
continue;
}

/* lookup entry in oidmap */
entry = oidmap_get(&map, &oid);

/* print result */
puts(entry ? entry->name : "NULL");

} else if (!strcmp("remove", cmd) && p1) {

if (get_oid(p1, &oid)) {
printf("Unknown oid: %s\n", p1);
continue;
}

/* remove entry from oidmap */
entry = oidmap_remove(&map, &oid);

/* print result and free entry*/
puts(entry ? entry->name : "NULL");
free(entry);

} else if (!strcmp("iterate", cmd)) {

struct oidmap_iter iter;
oidmap_iter_init(&map, &iter);
while ((entry = oidmap_iter_next(&iter)))
printf("%s %s\n", oid_to_hex(&entry->entry.oid), entry->name);

} else {

printf("Unknown command %s\n", cmd);

}
}

strbuf_release(&line);
oidmap_free(&map, 1);
return 0;
}

+ 1
- 0
t/helper/test-tool.c 查看文件

@@ -35,6 +35,7 @@ static struct test_cmd cmds[] = {
{ "match-trees", cmd__match_trees },
{ "mergesort", cmd__mergesort },
{ "mktemp", cmd__mktemp },
{ "oidmap", cmd__oidmap },
{ "online-cpus", cmd__online_cpus },
{ "parse-options", cmd__parse_options },
{ "path-utils", cmd__path_utils },

+ 1
- 0
t/helper/test-tool.h 查看文件

@@ -25,6 +25,7 @@ int cmd__lazy_init_name_hash(int argc, const char **argv);
int cmd__match_trees(int argc, const char **argv);
int cmd__mergesort(int argc, const char **argv);
int cmd__mktemp(int argc, const char **argv);
int cmd__oidmap(int argc, const char **argv);
int cmd__online_cpus(int argc, const char **argv);
int cmd__parse_options(int argc, const char **argv);
int cmd__path_utils(int argc, const char **argv);

+ 0
- 9
t/t0011-hashmap.sh 查看文件

@@ -9,15 +9,6 @@ test_hashmap() {
test_cmp expect actual
}

test_expect_success 'hash functions' '

test_hashmap "hash key1" "2215982743 2215982743 116372151 116372151" &&
test_hashmap "hash key2" "2215982740 2215982740 116372148 116372148" &&
test_hashmap "hash fooBarFrotz" "1383912807 1383912807 3189766727 3189766727" &&
test_hashmap "hash foobarfrotz" "2862305959 2862305959 3189766727 3189766727"

'

test_expect_success 'put' '

test_hashmap "put key1 value1

+ 102
- 0
t/t0016-oidmap.sh 查看文件

@@ -0,0 +1,102 @@
#!/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 &&
test_cmp expect actual
}


test_expect_success 'setup' '

test_commit one &&
test_commit two &&
test_commit three &&
test_commit four

'

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 'remove' '

test_oidmap "put one 1
put two 2
put three 3
remove one
remove two
remove invalidOid
remove four" "NULL
NULL
NULL
1
2
Unknown oid: invalidOid
NULL"

'

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

正在加载...
取消
保存