📄 speedtest.c
字号:
/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4 -*- *//* vi: set expandtab shiftwidth=4 tabstop=4: *//** \file speedtest.c * * Copyright 2005,2006,2007, Nick Galbreath -- nickg [at] modp [dot] com * All rights reserved. * * http://code.google.com/p/stringencoders/ * * Released under bsd license. See modp_b64.c for details. * * Quickie performance tester. This does NOT test correctness. * */#include "modp_b2.h"#include "modp_b16.h"#include "modp_b64.h"#include "apr_base64.h"#include "modp_b85.h"#include "modp_burl.h"#include "modp_bjavascript.h"#include <time.h>#ifndef CLOCKS_PER_SEC# ifdef CLK_TCK# define CLOCKS_PER_SEC (CLK_TCK)# endif#endif#include <stdio.h>#include <string.h>#define SZ 4096int main() { double s1, s2; int i, j; clock_t c0, c1; char teststr1[SZ]; char teststr2[SZ]; /* this contains the message sizes we'll test on add, subtract, change as desired. */ int sizes[] = {20, 200, 2000}; for (i = 0; i < (int)sizeof(teststr1); ++i) { teststr1[i] = 'A' + i % 26; teststr2[i] = 'A' + i % 26; } // over allocate result buffers char result[SZ*8]; char result2[SZ*8]; const int MAX = 1000000; for (j = 0; j < (int)(sizeof(sizes)/sizeof(int)); ++j) { printf("\nMessage size = %d\n", sizes[j]); printf("\tmodpb64\tapache\timprovement\tmodpb85\tmodpurl\tmodpb16\tmodpb2\tmodpjs\n"); printf("Encode\t"); fflush(stdout); /* MODP_B64 ENCODE */ c0 = clock(); for (i = 0; i < MAX; ++i) { modp_b64_encode(result, teststr1, sizes[j]); } c1 = clock(); s1 = (c1 - c0)*(1.0 / (double)CLOCKS_PER_SEC); printf("%6.2f\t", s1); fflush(stdout); /* APACHE ENCODE */ c0 = clock(); for (i = 0; i < MAX; ++i) { apr_base64_encode_binary(result, (const unsigned char*) teststr1, sizes[j]); } c1 = clock(); s2 = (c1 - c0)*(1.0 / (double)CLOCKS_PER_SEC); printf("%6.2f\t", s2); printf("%6.2fx\t\t", s2/s1); fflush(stdout); /* * base85 encode, let's see what is faster */ c0 = clock(); for (i = 0; i < MAX; ++i) { modp_b85_encode(result, teststr1, sizes[j]); } c1 = clock(); s1 = (c1 - c0)*(1.0 / (double)CLOCKS_PER_SEC); printf("%6.2f\t", s1); fflush(stdout); /* * url encode */ c0 = clock(); for (i = 0; i < MAX; ++i) { modp_burl_encode(result, teststr1, sizes[j]); } c1 = clock(); s1 = (c1 - c0)*(1.0 / (double)CLOCKS_PER_SEC); printf("%6.2f\t", s1); fflush(stdout); /** * B16 */ c0 = clock(); for (i = 0; i < MAX; ++i) { modp_b16_encode(result, teststr1, sizes[j]); } c1 = clock(); s1 = (c1 - c0)*(1.0 / (double)CLOCKS_PER_SEC); printf("%6.2f\t", s1); fflush(stdout); /** * B2 BINARY */ c0 = clock(); for (i = 0; i < MAX; ++i) { modp_b2_encode(result, teststr1, sizes[j]); } c1 = clock(); s1 = (c1 - c0)*(1.0 / (double)CLOCKS_PER_SEC); printf("%6.2f\t", s1); fflush(stdout); /** * javascript */ c0 = clock(); for (i = 0; i < MAX; ++i) { modp_bjavascript_encode(result, teststr1, sizes[j]); } c1 = clock(); s1 = (c1 - c0)*(1.0 / (double)CLOCKS_PER_SEC); printf("%6.2f\t", s1); fflush(stdout); printf("\n"); fflush(stdout); /*** * DECODE */ /* reset result to have b64 chars */ modp_b64_encode(result, teststr1, sizes[j]); int len = strlen(result); printf("Decode\t"); fflush(stdout); /* MODP_B64 */ c0 = clock(); for (i = 0; i < MAX; ++i) { modp_b64_decode(result2, result, len); } c1 = clock(); s1 = (c1 - c0)*(1.0 / (double)CLOCKS_PER_SEC); printf("%6.2f\t", s1); fflush(stdout); /* APACHE */ c0 = clock(); for (i = 0; i < MAX; ++i) { apr_base64_decode_binary((unsigned char*)result2, result); } c1 = clock(); s2 = (c1 - c0)*(1.0 / (double)CLOCKS_PER_SEC); printf("%6.2f\t", s2); printf("%6.2fx\t\t", s2/s1); fflush(stdout); /* * modp_b85 decode */ /* re-encode to get b85 chars, not b64 */ len = modp_b85_encode(result, teststr1, sizes[j]); c0 = clock(); for (i = 0; i < MAX; ++i) { modp_b85_decode(result2, result, len); } c1 = clock(); s1 = (c1 - c0)*(1.0 / (double)CLOCKS_PER_SEC); printf("%6.2f\t", s1); fflush(stdout); /* re-encode to get urlencoded chars, not b64 */ len = modp_burl_encode(result, teststr1, sizes[j]); c0 = clock(); for (i = 0; i < MAX; ++i) { modp_burl_decode(result2, result, len); } c1 = clock(); s1 = (c1 - c0)*(1.0 / (double)CLOCKS_PER_SEC); printf("%6.2f\t", s1); fflush(stdout); /** ** B16 DECODE **/ /* re-encode to get urlencoded chars, not b64 */ len = modp_b16_encode(result, teststr1, sizes[j]); c0 = clock(); for (i = 0; i < MAX; ++i) { modp_b16_decode(result2, result, len); } c1 = clock(); s1 = (c1 - c0)*(1.0 / (double)CLOCKS_PER_SEC); printf("%6.2f\t", s1); fflush(stdout); /** ** B16 DECODE **/ /* re-encode to get urlencoded chars, not b64 */ len = modp_b2_encode(result, teststr1, sizes[j]); c0 = clock(); for (i = 0; i < MAX; ++i) { modp_b2_decode(result2, result, len); } c1 = clock(); s1 = (c1 - c0)*(1.0 / (double)CLOCKS_PER_SEC); printf("%6.2f\t", s1); fflush(stdout); printf("\n"); fflush(stdout); } return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -