--- /dev/null
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+
+/* Test string. Must NOT have duplicate characters! */
+static char S[] = "Helo wrd!\n";
+
+static char Found[256];
+
+
+
+int main (void)
+{
+ unsigned Len;
+ unsigned I;
+ char* P;
+
+ /* Print a header */
+ printf ("strchr(): ");
+
+ /* Get the length of the string */
+ Len = strlen (S);
+
+ /* Search for all characters in the string, including the terminator */
+ for (I = 0; I < Len+1; ++I) {
+
+ /* Search for this char */
+ P = strchr (S, S[I]);
+
+ /* Check if we found it */
+ if (P == 0 || (P - S) != I) {
+ printf ("Failed for code 0x%02X, offset %u!\n", S[I], I);
+ printf ("P = %04X offset = %04X\n", P, P-S);
+ exit (EXIT_FAILURE);
+ }
+
+ /* Mark the char as checked */
+ Found[S[I]] = 1;
+ }
+
+ /* Search for all other characters and make sure they aren't found */
+ for (I = 0; I < 256; ++I) {
+ if (Found[I] == 0) {
+ if (strchr (S, (char)I) != 0) {
+ printf ("Failed for code 0x%02X\n", I);
+ exit (EXIT_FAILURE);
+ }
+ }
+ }
+
+ /* Test passed */
+ printf ("Passed\n");
+ return EXIT_SUCCESS;
+}
+
+
+
--- /dev/null
+#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;
+}
+
+
+
--- /dev/null
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+static const char S1[] = {
+ 'h', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', '\0', 'A'
+};
+
+static const char S2[] = {
+ 'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '\0', 'B'
+};
+
+
+
+
+int main (void)
+{
+ char I;
+ for (I = 0; I < 20; ++I) {
+ printf ("%02d: %d\n", I, strncmp (S1, S2, I));
+ }
+ return 0;
+}
+