1
0
mirror of https://github.com/cc65/cc65.git synced 2024-12-25 02:29:52 +00:00
cc65/testcode/lib/strdup-test.c

116 lines
2.0 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
/* From _heap.h */
extern unsigned _horg; /* Bottom of heap */
extern unsigned _hptr; /* Current top */
extern unsigned _hend; /* Upper limit */
extern unsigned _hfirst; /* First free block in list */
extern unsigned _hlast; /* Last free block in list */
static unsigned char* V[256];
static void ShowInfo (void)
/* Show heap info */
{
/* Count free blocks */
unsigned Count = 0;
unsigned** P = (unsigned**) _hfirst;
while (P) {
++Count;
P = P[1];
}
printf ("%04X %04X %04X %04X %04X %u\n",
_horg, _hptr, _hend, _hfirst, _hlast, Count);
if (Count) {
P = (unsigned**) _hfirst;
while (P) {
printf ("%04X %04X %04X %04X(%u)\n",
(unsigned) P, P[2], P[1], P[0], P[0]);
P = P[1];
}
getchar ();
}
}
static const char* RandStr (void)
/* Create a random string */
{
static char S [300];
unsigned Len = (rand () & 0xFF) + (sizeof (S) - 0xFF - 1);
unsigned I;
char C;
for (I = 0; I < Len; ++I) {
do {
C = rand() & 0xFF;
} while (C == 0);
S[I] = C;
}
S[Len] = '\0';
return S;
}
static void FillArray (void)
/* Fill the string array */
{
unsigned char I = 0;
do {
V[I] = strdup (RandStr ());
++I;
} while (I != 0);
}
static void FreeArray (void)
/* Free all strings in the array */
{
unsigned char I = 0;
do {
free (V[I]);
++I;
} while (I != 0);
}
int main (void)
{
unsigned long T;
/* Show info at start */
ShowInfo ();
/* Remember the time */
T = clock ();
/* Do the tests */
FillArray ();
ShowInfo ();
FreeArray ();
ShowInfo ();
/* Calculate the time and print it */
T = clock () - T;
printf ("Time needed: %lu ticks\n", T);
/* Done */
return EXIT_SUCCESS;
}