2 * Copyright (c) 2000-2001 Sendmail, Inc. and its suppliers.
5 * By using this file, you agree to the terms and conditions set
6 * forth in the LICENSE file which can be found at the top level of
7 * the sendmail distribution.
11 SM_RCSID("@(#)$Id: b-strcmp.c,v 1.12 2001/09/11 04:04:47 gshapiro Exp $")
15 #include <sys/types.h>
17 #include <sm/string.h>
19 #define toseconds(x, y) (x.tv_sec - y.tv_sec)
21 #define LOOPS 4000000L /* initial number of loops */
22 #define MAXTIME 30L /* "maximum" time to run single test */
35 printf("This program benchmarks the performance differences between\n");
36 printf("strcasecmp() and sm_strcasecmp().\n");
37 printf("These tests may take several minutes to complete.\n");
51 struct timeval t1, t2;
52 char src1[SIZE], src2[SIZE];
55 while ((k = getopt(argc, argv, OPTIONS)) != -1)
71 printf("If you want to run it, specify -d as option.\n");
75 /* Run-time comments to the user */
78 for (k = 0; k < 3; k++)
83 (void) sm_strlcpy(src1, "1234567890", SIZE);
84 (void) sm_strlcpy(src2, "1234567890", SIZE);
87 (void) sm_strlcpy(src1, "1234567890", SIZE);
88 (void) sm_strlcpy(src2, "1234567891", SIZE);
91 (void) sm_strlcpy(src1, "1234567892", SIZE);
92 (void) sm_strlcpy(src2, "1234567891", SIZE);
95 printf("Test %d: strcasecmp(%s, %s) versus sm_strcasecmp()\n",
101 if (gettimeofday(&t1, NULL) < 0)
102 fatal("gettimeofday");
103 for (a = 0; a < loops; a++)
104 j += strcasecmp(src1, src2);
105 if (gettimeofday(&t2, NULL) < 0)
106 fatal("gettimeofday");
107 one = toseconds(t2, t1);
108 printf("\tstrcasecmp() result: %ld seconds [%ld]\n",
112 if (gettimeofday(&t1, NULL) < 0)
113 fatal("gettimeofday");
114 for (a = 0; a < loops; a++)
115 j += sm_strcasecmp(src1, src2);
116 if (gettimeofday(&t2, NULL) < 0)
117 fatal("gettimeofday");
118 two = toseconds(t2, t1);
119 printf("\tsm_strcasecmp() result: %ld seconds [%ld]\n",
122 if (abs(one - two) > 2)
125 if (loops < 0L || one > MAXTIME)
127 printf("\t\t** results too close: no decision\n");
132 printf("\t\t** results too close redoing test %ld times **\n",
139 printf("Interpreting the results:\n");
140 printf("\tFor differences larger than 2 seconds, the lower value is\n");
141 printf("\tbetter and that function should be used for performance\n");
142 printf("\treasons.\n\n");
143 printf("This program will re-run the tests when the difference is\n");
144 printf("less than 2 seconds.\n");
145 printf("The result will vary depending on the compiler optimization\n"); printf("level used. Compiling the sendmail libsm library with a\n");
146 printf("better optimization level can change the results.\n");