3bbaec00a8
This library provides thread-unsafe fgets()- and fread()-like functions where the caller does not have to supply a buffer. It maintains a couple of static buffers and provides an API to use them. [rr: allow input from files other than stdin] [jn: with tests, documentation, and error handling improvements] Signed-off-by: David Barr <david.barr@cordelta.com> Signed-off-by: Ramkumar Ramachandra <artagnon@gmail.com> Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
172 lines
2.6 KiB
Bash
Executable File
172 lines
2.6 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
test_description='check infrastructure for svn importer'
|
|
|
|
. ./test-lib.sh
|
|
uint32_max=4294967295
|
|
|
|
test_expect_success 'obj pool: store data' '
|
|
cat <<-\EOF >expected &&
|
|
0
|
|
1
|
|
EOF
|
|
|
|
test-obj-pool <<-\EOF >actual &&
|
|
alloc one 16
|
|
set one 13
|
|
test one 13
|
|
reset one
|
|
EOF
|
|
test_cmp expected actual
|
|
'
|
|
|
|
test_expect_success 'obj pool: NULL is offset ~0' '
|
|
echo "$uint32_max" >expected &&
|
|
echo null one | test-obj-pool >actual &&
|
|
test_cmp expected actual
|
|
'
|
|
|
|
test_expect_success 'obj pool: out-of-bounds access' '
|
|
cat <<-EOF >expected &&
|
|
0
|
|
0
|
|
$uint32_max
|
|
$uint32_max
|
|
16
|
|
20
|
|
$uint32_max
|
|
EOF
|
|
|
|
test-obj-pool <<-\EOF >actual &&
|
|
alloc one 16
|
|
alloc two 16
|
|
offset one 20
|
|
offset two 20
|
|
alloc one 5
|
|
offset one 20
|
|
free one 1
|
|
offset one 20
|
|
reset one
|
|
reset two
|
|
EOF
|
|
test_cmp expected actual
|
|
'
|
|
|
|
test_expect_success 'obj pool: high-water mark' '
|
|
cat <<-\EOF >expected &&
|
|
0
|
|
0
|
|
10
|
|
20
|
|
20
|
|
20
|
|
EOF
|
|
|
|
test-obj-pool <<-\EOF >actual &&
|
|
alloc one 10
|
|
committed one
|
|
alloc one 10
|
|
commit one
|
|
committed one
|
|
alloc one 10
|
|
free one 20
|
|
committed one
|
|
reset one
|
|
EOF
|
|
test_cmp expected actual
|
|
'
|
|
|
|
test_expect_success 'line buffer' '
|
|
echo HELLO >expected1 &&
|
|
printf "%s\n" "" HELLO >expected2 &&
|
|
echo >expected3 &&
|
|
printf "%s\n" "" Q | q_to_nul >expected4 &&
|
|
printf "%s\n" foo "" >expected5 &&
|
|
printf "%s\n" "" foo >expected6 &&
|
|
|
|
test-line-buffer <<-\EOF >actual1 &&
|
|
5
|
|
HELLO
|
|
EOF
|
|
|
|
test-line-buffer <<-\EOF >actual2 &&
|
|
0
|
|
|
|
5
|
|
HELLO
|
|
EOF
|
|
|
|
q_to_nul <<-\EOF |
|
|
1
|
|
Q
|
|
EOF
|
|
test-line-buffer >actual3 &&
|
|
|
|
q_to_nul <<-\EOF |
|
|
0
|
|
|
|
1
|
|
Q
|
|
EOF
|
|
test-line-buffer >actual4 &&
|
|
|
|
test-line-buffer <<-\EOF >actual5 &&
|
|
5
|
|
foo
|
|
EOF
|
|
|
|
test-line-buffer <<-\EOF >actual6 &&
|
|
0
|
|
|
|
5
|
|
foo
|
|
EOF
|
|
|
|
test_cmp expected1 actual1 &&
|
|
test_cmp expected2 actual2 &&
|
|
test_cmp expected3 actual3 &&
|
|
test_cmp expected4 actual4 &&
|
|
test_cmp expected5 actual5 &&
|
|
test_cmp expected6 actual6
|
|
'
|
|
|
|
test_expect_success 'string pool' '
|
|
echo a does not equal b >expected.differ &&
|
|
echo a equals a >expected.match &&
|
|
echo equals equals equals >expected.matchmore &&
|
|
|
|
test-string-pool "a,--b" >actual.differ &&
|
|
test-string-pool "a,a" >actual.match &&
|
|
test-string-pool "equals-equals" >actual.matchmore &&
|
|
test_must_fail test-string-pool a,a,a &&
|
|
test_must_fail test-string-pool a &&
|
|
|
|
test_cmp expected.differ actual.differ &&
|
|
test_cmp expected.match actual.match &&
|
|
test_cmp expected.matchmore actual.matchmore
|
|
'
|
|
|
|
test_expect_success 'treap sort' '
|
|
cat <<-\EOF >unsorted &&
|
|
68
|
|
12
|
|
13
|
|
13
|
|
68
|
|
13
|
|
13
|
|
21
|
|
10
|
|
11
|
|
12
|
|
13
|
|
13
|
|
EOF
|
|
sort unsorted >expected &&
|
|
|
|
test-treap <unsorted >actual &&
|
|
test_cmp expected actual
|
|
'
|
|
|
|
test_done
|