mirror of
https://github.com/Zenithsiz/ftmemsim-valgrind.git
synced 2026-02-03 18:13:01 +00:00
Forgot to add this file in the last commit.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@9205
This commit is contained in:
parent
13c8106f4f
commit
f6b278a3fc
239
memcheck/tests/unit_libcbase.c
Normal file
239
memcheck/tests/unit_libcbase.c
Normal file
@ -0,0 +1,239 @@
|
||||
// This module does unit testing of m_libcbase.
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "coregrind/m_libcbase.c"
|
||||
|
||||
|
||||
void test_isXYZ(void)
|
||||
{
|
||||
assert( VG_(isspace)(' ') );
|
||||
assert( VG_(isspace)('\n') );
|
||||
assert( VG_(isspace)('\t') );
|
||||
assert( ! VG_(isspace)('3') );
|
||||
assert( ! VG_(isspace)('x') );
|
||||
|
||||
assert( VG_(isdigit)('0') );
|
||||
assert( VG_(isdigit)('1') );
|
||||
assert( VG_(isdigit)('5') );
|
||||
assert( VG_(isdigit)('9') );
|
||||
assert( ! VG_(isdigit)('a') );
|
||||
assert( ! VG_(isdigit)('!') );
|
||||
}
|
||||
|
||||
void test_is_XYZ_digit()
|
||||
{
|
||||
Long x;
|
||||
|
||||
assert( is_dec_digit('0', &x) && 0 == x );
|
||||
assert( is_dec_digit('1', &x) && 1 == x );
|
||||
assert( is_dec_digit('9', &x) && 9 == x );
|
||||
|
||||
assert( is_hex_digit('0', &x) && 0 == x );
|
||||
assert( is_hex_digit('1', &x) && 1 == x );
|
||||
assert( is_hex_digit('9', &x) && 9 == x );
|
||||
assert( is_hex_digit('a', &x) && 10 == x );
|
||||
assert( is_hex_digit('f', &x) && 15 == x );
|
||||
assert( is_hex_digit('A', &x) && 10 == x );
|
||||
assert( is_hex_digit('F', &x) && 15 == x );
|
||||
}
|
||||
|
||||
void test_strtoll(void)
|
||||
{
|
||||
// For VG_(strtoll*)()
|
||||
typedef struct {
|
||||
Char* str; // The string to convert.
|
||||
Long res; // The result.
|
||||
Char endptr_val; // The char one past the end of the converted text.
|
||||
} StrtollInputs;
|
||||
|
||||
// VG_(strtoll10)()
|
||||
{
|
||||
StrtollInputs a[] = {
|
||||
// If there's no number at the head of the string, return 0, and
|
||||
// make 'endptr' point to the start of the string.
|
||||
{ str : "", res : 0, endptr_val : '\0' },
|
||||
{ str : " \n\t", res : 0, endptr_val : ' ' },
|
||||
{ str : "one", res : 0, endptr_val : 'o' },
|
||||
{ str : "\ntwo", res : 0, endptr_val : '\n' },
|
||||
|
||||
// Successful conversion. Leading whitespace is ignored. A single
|
||||
// '-' or '+' is accepted.
|
||||
{ str : "0", res : 0, endptr_val : '\0' },
|
||||
{ str : "+0", res : 0, endptr_val : '\0' },
|
||||
{ str : "-0", res : 0, endptr_val : '\0' },
|
||||
{ str : "1", res : 1, endptr_val : '\0' },
|
||||
{ str : "+1", res : 1, endptr_val : '\0' },
|
||||
{ str : "-1", res : -1, endptr_val : '\0' },
|
||||
{ str : "12", res : 12, endptr_val : '\0' },
|
||||
{ str : "-567", res : -567, endptr_val : '\0' },
|
||||
{ str : "1234567", res : 1234567, endptr_val : '\0' },
|
||||
{ str : "007", res : 7, endptr_val : '\0' },
|
||||
{ str : " +42", res : 42, endptr_val : '\0' },
|
||||
{ str : "\n\t\r\v -56", res : -56, endptr_val : '\0' },
|
||||
{ str : "123xyz", res : 123, endptr_val : 'x' },
|
||||
{ str : " -123abc", res : -123, endptr_val : 'a' },
|
||||
|
||||
// Whitespace after the +/- is not allowed; conversion fails.
|
||||
{ str : "+ 1", res : 0, endptr_val : '+' },
|
||||
{ str : "-\n1", res : 0, endptr_val : '-' },
|
||||
};
|
||||
|
||||
// Nb: We test the results against strtoll() as well.
|
||||
int i;
|
||||
for (i = 0; i < (sizeof(a) / sizeof(StrtollInputs)); i++) {
|
||||
Char* endptr1;
|
||||
char* endptr2;
|
||||
Long res1 = VG_(strtoll10)(a[i].str, &endptr1);
|
||||
long long res2 = strtoll (a[i].str, &endptr2, 10);
|
||||
//printf("res1 = %lld, *endptr1 = '%c'\n", res1, *endptr1);
|
||||
//printf("res2 = %lld, *endptr2 = '%c'\n", res2, *endptr2);
|
||||
assert(a[i].res == res1 && a[i].endptr_val == *endptr1);
|
||||
assert(res2 == res1 && *endptr2 == *endptr1);
|
||||
}
|
||||
}
|
||||
|
||||
// VG_(strtoll16)()
|
||||
{
|
||||
StrtollInputs a[] = {
|
||||
// If there's no number at the head of the string, return 0, and
|
||||
// make 'endptr' point to the start of the string.
|
||||
{ str : "", res : 0, endptr_val : '\0' },
|
||||
{ str : " \n\t", res : 0, endptr_val : ' ' },
|
||||
{ str : "one", res : 0, endptr_val : 'o' },
|
||||
{ str : "\ntwo", res : 0, endptr_val : '\n' },
|
||||
|
||||
// Successful conversion. Leading whitespace is ignored. A single
|
||||
// '-' or '+' is accepted. "0X" and "0x" are also allowed at the
|
||||
// front, but if no digits follow, just the "0" is converted.
|
||||
{ str : "0", res : 0, endptr_val : '\0' },
|
||||
{ str : "0x0", res : 0, endptr_val : '\0' },
|
||||
{ str : "0X0", res : 0, endptr_val : '\0' },
|
||||
{ str : "0x", res : 0, endptr_val : 'x' },
|
||||
{ str : "0Xg", res : 0, endptr_val : 'X' },
|
||||
{ str : "0", res : 0, endptr_val : '\0' },
|
||||
{ str : "+0", res : 0, endptr_val : '\0' },
|
||||
{ str : "-0", res : 0, endptr_val : '\0' },
|
||||
{ str : "1", res : 1, endptr_val : '\0' },
|
||||
{ str : "+1", res : 1, endptr_val : '\0' },
|
||||
{ str : "-1", res : -1, endptr_val : '\0' },
|
||||
{ str : "1a", res : 26, endptr_val : '\0' },
|
||||
{ str : "-5F7", res : -1527, endptr_val : '\0' },
|
||||
{ str : "0x1234567", res : 19088743, endptr_val : '\0' },
|
||||
{ str : "007", res : 7, endptr_val : '\0' },
|
||||
{ str : "0X00ABCD", res : 43981, endptr_val : '\0' },
|
||||
{ str : " +AbC", res : 2748, endptr_val : '\0' },
|
||||
{ str : " -0xAbC", res : -2748, endptr_val : '\0' },
|
||||
{ str : " -0xxx", res : 0, endptr_val : 'x' },
|
||||
{ str : "\n\t\r\v -56", res : -86, endptr_val : '\0' },
|
||||
{ str : "123xyz", res : 291, endptr_val : 'x' },
|
||||
{ str : " -123defghi", res : -1195503, endptr_val : 'g' },
|
||||
|
||||
// Whitespace after the +/- is not allowed; conversion fails.
|
||||
{ str : "+ 1", res : 0, endptr_val : '+' },
|
||||
{ str : "-\n0x1", res : 0, endptr_val : '-' },
|
||||
};
|
||||
|
||||
// Nb: We test the results against strtoll() as well.
|
||||
int i;
|
||||
for (i = 0; i < (sizeof(a) / sizeof(StrtollInputs)); i++) {
|
||||
Char* endptr1;
|
||||
char* endptr2;
|
||||
Long res1 = VG_(strtoll16)(a[i].str, &endptr1);
|
||||
long long res2 = strtoll (a[i].str, &endptr2, 16);
|
||||
//printf(" res1 = %lld, *endptr1 = '%c'\n", res1, *endptr1);
|
||||
//printf(" res2 = %lld, *endptr2 = '%c'\n", res2, *endptr2);
|
||||
assert(a[i].res == res1 && a[i].endptr_val == *endptr1);
|
||||
assert(res2 == res1 && *endptr2 == *endptr1);
|
||||
}
|
||||
}
|
||||
// VG_(strtod)()
|
||||
{
|
||||
StrtollInputs a[] = {
|
||||
// If there's no number at the head of the string, return 0, and
|
||||
// make 'endptr' point to the start of the string.
|
||||
{ str : "", res : 0, endptr_val : '\0' },
|
||||
{ str : " \n\t", res : 0, endptr_val : ' ' },
|
||||
{ str : "one", res : 0, endptr_val : 'o' },
|
||||
{ str : "\ntwo", res : 0, endptr_val : '\n' },
|
||||
|
||||
// Successful conversion. Leading whitespace is ignored. A single
|
||||
// '-' or '+' is accepted. "0X" and "0x" are also allowed at the
|
||||
// front, but if no digits follow, just the "0" is converted.
|
||||
{ str : "0", res : 0, endptr_val : '\0' },
|
||||
{ str : "0", res : 0, endptr_val : '\0' },
|
||||
{ str : "+0", res : 0, endptr_val : '\0' },
|
||||
{ str : "-0", res : 0, endptr_val : '\0' },
|
||||
{ str : "1", res : 1, endptr_val : '\0' },
|
||||
{ str : "+1", res : 1, endptr_val : '\0' },
|
||||
{ str : "-1", res : -1, endptr_val : '\0' },
|
||||
{ str : "1a", res : 26, endptr_val : '\0' },
|
||||
{ str : "-5F7", res : -1527, endptr_val : '\0' },
|
||||
{ str : "0x1234567", res : 19088743, endptr_val : '\0' },
|
||||
{ str : "007", res : 7, endptr_val : '\0' },
|
||||
{ str : "0X00ABCD", res : 43981, endptr_val : '\0' },
|
||||
{ str : " +AbC", res : 2748, endptr_val : '\0' },
|
||||
{ str : " -0xAbC", res : -2748, endptr_val : '\0' },
|
||||
{ str : " -0xxx", res : 0, endptr_val : 'x' },
|
||||
{ str : "\n\t\r\v -56", res : -86, endptr_val : '\0' },
|
||||
{ str : "123xyz", res : 291, endptr_val : 'x' },
|
||||
{ str : " -123defghi", res : -1195503, endptr_val : 'g' },
|
||||
|
||||
// Whitespace after the +/- is not allowed; conversion fails.
|
||||
{ str : "+ 1", res : 0, endptr_val : '+' },
|
||||
{ str : "-\n0x1", res : 0, endptr_val : '-' },
|
||||
};
|
||||
|
||||
// Nb: We test the results against strtoll() as well.
|
||||
int i;
|
||||
for (i = 0; i < (sizeof(a) / sizeof(StrtollInputs)); i++) {
|
||||
Char* endptr1;
|
||||
char* endptr2;
|
||||
Long res1 = VG_(strtoll16)(a[i].str, &endptr1);
|
||||
long long res2 = strtoll (a[i].str, &endptr2, 16);
|
||||
//printf(" res1 = %lld, *endptr1 = '%c'\n", res1, *endptr1);
|
||||
//printf(" res2 = %lld, *endptr2 = '%c'\n", res2, *endptr2);
|
||||
assert(a[i].res == res1 && a[i].endptr_val == *endptr1);
|
||||
assert(res2 == res1 && *endptr2 == *endptr1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
//--------------------------------------------------------------------
|
||||
// Macros in pub_tool_libcbase.h
|
||||
//--------------------------------------------------------------------
|
||||
// XXX: todo
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// Char functions
|
||||
//--------------------------------------------------------------------
|
||||
test_isXYZ();
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// String-to-number functions
|
||||
//--------------------------------------------------------------------
|
||||
test_is_XYZ_digit();
|
||||
test_strtoll();
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// String functions
|
||||
//--------------------------------------------------------------------
|
||||
// XXX: todo
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// Mem functions
|
||||
//--------------------------------------------------------------------
|
||||
// XXX: todo
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// Miscellaneous functions
|
||||
//--------------------------------------------------------------------
|
||||
// XXX: todo
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user