diff options
author | Stefano Sabatini <stefano.sabatini-lala@poste.it> | 2009-02-06 23:29:25 +0000 |
---|---|---|
committer | Stefano Sabatini <stefano.sabatini-lala@poste.it> | 2009-02-06 23:29:25 +0000 |
commit | 21eff9ced790c4b8c697837213e7fc7aa44be62b (patch) | |
tree | af54c75864aa0cc56cb541406b0cdbbdbb8b0fba /libavutil/base64.c | |
parent | 33094be89424a3fd186e7b58314bf16352102150 (diff) | |
download | ffmpeg-21eff9ced790c4b8c697837213e7fc7aa44be62b.tar.gz |
Add a new test program for base64, based on that removed in r17024.
See the thread:
"[PATCH] remove unused and broken test program in libavutil/base64.c".
Originally committed as revision 17025 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavutil/base64.c')
-rw-r--r-- | libavutil/base64.c | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/libavutil/base64.c b/libavutil/base64.c index 91a5d23005..2c980cfefd 100644 --- a/libavutil/base64.c +++ b/libavutil/base64.c @@ -98,3 +98,66 @@ char *av_base64_encode(char * buf, int buf_len, const uint8_t * src, int len) return ret; } + +#ifdef TEST + +#undef printf + +#define MAX_DATA_SIZE 1024 +#define MAX_ENCODED_SIZE 2048 + +int test_encode_decode(const uint8_t *data, unsigned int data_size, const char *encoded_ref) +{ + char encoded[MAX_ENCODED_SIZE]; + uint8_t data2[MAX_DATA_SIZE]; + int data2_size, max_data2_size = MAX_DATA_SIZE; + + if (!av_base64_encode(encoded, MAX_ENCODED_SIZE, data, data_size)) { + printf("Failed: cannot encode the input data\n"); + return 1; + } + if (encoded_ref && strcmp(encoded, encoded_ref)) { + printf("Failed: encoded string differs from reference\n" + "Encoded:\n%s\nReference:\n%s\n", encoded, encoded_ref); + return 1; + } + + if ((data2_size = av_base64_decode(data2, encoded, max_data2_size)) < 0) { + printf("Failed: cannot decode the encoded string\n" + "Encoded:\n%s\n", encoded); + return 1; + } + if (memcmp(data2, data, data_size)) { + printf("Failed: encoded/decoded data differs from original data\n"); + return 1; + } + + printf("Passed!\n"); + return 0; +} + +int main(void) +{ + int i, error_count = 0; + struct test { + const uint8_t *data; + const char *encoded_ref; + } tests[] = { + { "", ""}, + { "1", "MQ=="}, + { "22", "MjI="}, + { "333", "MzMz"}, + { "4444", "NDQ0NA=="}, + { "55555", "NTU1NTU="}, + { "666666", "NjY2NjY2"}, + { "abc:def", "YWJjOmRlZg=="}, + }; + + printf("Encoding/decoding tests\n"); + for (i = 0; i < FF_ARRAY_ELEMS(tests); i++) + error_count += test_encode_decode(tests[i].data, strlen(tests[i].data), tests[i].encoded_ref); + + return error_count; +} + +#endif |