Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Firefox/nsprpub/lib/tests/   (Browser von der Mozilla Stiftung Version 136.0.1©)  Datei vom 10.2.2025 mit Größe 96 kB image not shown  

Quelle  string.c   Sprache: C

 
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */


#include "plstr.h"
#include "nspr.h"

#include <stdio.h>

/* PL_strlen */
PRBool test_001(void) {
  static struct {
    const char* str;
    PRUint32 len;
  } array[] = {{(const char*)0, 0},
               {"", 0},
               {"a", 1},
               {"abcdefg", 7},
               {"abcdefg\0hijk", 7}};

  int i;

  printf("Test 001 (PL_strlen) ...");
  fflush(stdout);

  for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
    if (PL_strlen(array[i].str) != array[i].len) {
      printf("FAIL (%d: %s->%d, %d)\n", i,
             array[i].str ? array[i].str : "(null)", PL_strlen(array[i].str),
             array[i].len);
      return PR_FALSE;
    }
  }

  printf("PASS\n");
  return PR_TRUE;
}

/* PL_strnlen */
PRBool test_002(void) {
  static struct {
    const char* str;
    PRUint32 max;
    PRUint32 len;
  } array[] = {
      {(const char*)0, 0, 0},
      {(const char*)0, 12, 0},
      {"", 0, 0},
      {"", 12, 0},
      {"a", 0, 0},
      {"a", 1, 1},
      {"a", 12, 1},
      {"abcdefg", 0, 0},
      {"abcdefg", 1, 1},
      {"abcdefg", 7, 7},
      {"abcdefg", 12, 7},
      {"abcdefg\0hijk", 0, 0},
      {"abcdefg\0hijk", 1, 1},
      {"abcdefg\0hijk", 7, 7},
      {"abcdefg\0hijk", 12, 7},
  };

  int i;

  printf("Test 002 (PL_strnlen) ...");
  fflush(stdout);

  for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
    if (PL_strnlen(array[i].str, array[i].max) != array[i].len) {
      printf("FAIL (%d: %s,%d->%d, %d)\n", i,
             array[i].str ? array[i].str : "(null)", array[i].max,
             PL_strnlen(array[i].str, array[i].max), array[i].len);
      return PR_FALSE;
    }
  }

  printf("PASS\n");
  return PR_TRUE;
}

/* PL_strcpy */
PRBool test_003(void) {
  static char buffer[1024];

  static struct {
    const char* str;
    char* dest;
    char* rv;
    PRBool comp;
  } array[] = {{(const char*)0, (char*)0, (char*)0, PR_FALSE},
               {(const char*)0, buffer, (char*)0, PR_FALSE},
               {"", (char*)0, (char*)0, PR_FALSE},
               {"", buffer, buffer, PR_TRUE},
               {"a", (char*)0, (char*)0, PR_FALSE},
               {"a", buffer, buffer, PR_TRUE},
               {"abcdefg", (char*)0, (char*)0, PR_FALSE},
               {"abcdefg", buffer, buffer, PR_TRUE},
               {"wxyz\0abcdefg", (char*)0, (char*)0, PR_FALSE},
               {"wxyz\0abcdefg", buffer, buffer, PR_TRUE}};

  int i;

  printf("Test 003 (PL_strcpy) ...");
  fflush(stdout);

  for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
    char* rv;
    const char* a = array[i].str;
    const char* b = (const char*)array[i].dest;

    rv = PL_strcpy(array[i].dest, array[i].str);
    if (array[i].rv != rv) {
      printf("FAIL %d: (0x%x, %s)->0x%x\n", i, array[i].dest,
             array[i].str ? array[i].str : "(null)", rv);
      return PR_FALSE;
    }

    if (array[i].comp) {
      while (1) {
        if (*a != *b) {
          printf("FAIL %d: %s->%.32s\n", i,
                 array[i].str ? array[i].str : "(null)",
                 array[i].dest ? array[i].dest : "(null)");
          return PR_FALSE;
        }

        if ((char)0 == *a) {
          break;
        }

        a++;
        b++;
      }
    }
  }

  printf("PASS\n");
  return PR_TRUE;
}

/* PL_strncpy */
PRBool test_004(void) {
  static char buffer[1024];

  static struct {
    const char* str;
    PRUint32 len;
    char* dest;
    char* rv;
    PRBool comp;
    const char* result;
    PRBool nulled;
  } array[] = {
      {(const char*)0, 0, (char*)0, (char*)0, PR_FALSE, (const char*)0,
       PR_FALSE},
      {(const char*)0, 0, buffer, (char*)0, PR_FALSE, (const char*)0, PR_FALSE},
      {(const char*)0, 1, (char*)0, (char*)0, PR_FALSE, (const char*)0,
       PR_FALSE},
      {(const char*)0, 7, (char*)0, (char*)0, PR_FALSE, (const char*)0,
       PR_FALSE},
      {(const char*)0, 1, buffer, (char*)0, PR_FALSE, (const char*)0, PR_FALSE},
      {(const char*)0, 7, buffer, (char*)0, PR_FALSE, (const char*)0, PR_FALSE},
      {"", 0, (char*)0, (char*)0, PR_FALSE, (const char*)0, PR_FALSE},
      {"", 0, buffer, buffer, PR_FALSE, (const char*)0, PR_FALSE},
      {"", 1, (char*)0, (char*)0, PR_FALSE, (const char*)0, PR_FALSE},
      {"", 7, (char*)0, (char*)0, PR_FALSE, (const char*)0, PR_FALSE},
      {"", 1, buffer, buffer, PR_TRUE, "", PR_TRUE},
      {"", 7, buffer, buffer, PR_TRUE, "", PR_TRUE},
      {"a", 0, (char*)0, (char*)0, PR_FALSE, (const char*)0, PR_FALSE},
      {"a", 0, buffer, buffer, PR_FALSE, (const char*)0, PR_FALSE},
      {"a", 1, (char*)0, (char*)0, PR_FALSE, (const char*)0, PR_FALSE},
      {"a", 7, (char*)0, (char*)0, PR_FALSE, (const char*)0, PR_FALSE},
      {"b", 1, buffer, buffer, PR_TRUE, "b", PR_FALSE},
      {"c", 7, buffer, buffer, PR_TRUE, "c", PR_TRUE},
      {"de", 0, (char*)0, (char*)0, PR_FALSE, (const char*)0, PR_FALSE},
      {"de", 0, buffer, buffer, PR_FALSE, (const char*)0, PR_FALSE},
      {"de", 1, (char*)0, (char*)0, PR_FALSE, (const char*)0, PR_FALSE},
      {"de", 7, (char*)0, (char*)0, PR_FALSE, (const char*)0, PR_FALSE},
      {"fg", 1, buffer, buffer, PR_TRUE, "f", PR_FALSE},
      {"hi", 7, buffer, buffer, PR_TRUE, "hi", PR_TRUE},
      {"jklmnopq", 0, (char*)0, (char*)0, PR_FALSE, (const char*)0, PR_FALSE},
      {"jklmnopq", 0, buffer, buffer, PR_FALSE, (const char*)0, PR_FALSE},
      {"jklmnopq", 1, (char*)0, (char*)0, PR_FALSE, (const char*)0, PR_FALSE},
      {"jklmnopq", 7, (char*)0, (char*)0, PR_FALSE, (const char*)0, PR_FALSE},
      {"rstuvwxy", 1, buffer, buffer, PR_TRUE, "r", PR_FALSE},
      {"zABCDEFG", 7, buffer, buffer, PR_TRUE, "zABCDEF", PR_FALSE},
      {"a\0XXX", 0, (char*)0, (char*)0, PR_FALSE, (const char*)0, PR_FALSE},
      {"a\0XXX", 0, buffer, buffer, PR_FALSE, (const char*)0, PR_FALSE},
      {"a\0XXX", 1, (char*)0, (char*)0, PR_FALSE, (const char*)0, PR_FALSE},
      {"a\0XXX", 7, (char*)0, (char*)0, PR_FALSE, (const char*)0, PR_FALSE},
      {"b\0XXX", 1, buffer, buffer, PR_TRUE, "b", PR_FALSE},
      {"c\0XXX", 7, buffer, buffer, PR_TRUE, "c", PR_TRUE},
      {"de\0XXX", 0, (char*)0, (char*)0, PR_FALSE, (const char*)0, PR_FALSE},
      {"de\0XXX", 0, buffer, buffer, PR_FALSE, (const char*)0, PR_FALSE},
      {"de\0XXX", 1, (char*)0, (char*)0, PR_FALSE, (const char*)0, PR_FALSE},
      {"de\0XXX", 7, (char*)0, (char*)0, PR_FALSE, (const char*)0, PR_FALSE},
      {"fg\0XXX", 1, buffer, buffer, PR_TRUE, "f", PR_FALSE},
      {"hi\0XXX", 7, buffer, buffer, PR_TRUE, "hi", PR_TRUE},
      {"jklmnopq\0XXX", 0, (char*)0, (char*)0, PR_FALSE, (const char*)0,
       PR_FALSE},
      {"jklmnopq\0XXX", 0, buffer, buffer, PR_FALSE, (const char*)0, PR_FALSE},
      {"jklmnopq\0XXX", 1, (char*)0, (char*)0, PR_FALSE, (const char*)0,
       PR_FALSE},
      {"jklmnopq\0XXX", 7, (char*)0, (char*)0, PR_FALSE, (const char*)0,
       PR_FALSE},
      {"rstuvwxy\0XXX", 1, buffer, buffer, PR_TRUE, "r", PR_FALSE},
      {"zABCDEFG\0XXX", 7, buffer, buffer, PR_TRUE, "zABCDEF", PR_FALSE},
  };

  int i;

  printf("Test 004 (PL_strncpy) ...");
  fflush(stdout);

  for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
    char* rv;
    int j;

    for (j = 0; j < sizeof(buffer); j++) {
      buffer[j] = '-';
    }

    rv = PL_strncpy(array[i].dest, array[i].str, array[i].len);
    if (array[i].rv != rv) {
      printf("FAIL %d: (0x%x, %s, %lu)->0x%x\n", i, array[i].dest,
             array[i].str ? array[i].str : "(null)", array[i].len, rv);
      return PR_FALSE;
    }

    if (array[i].comp) {
      const char* a = array[i].result;
      const char* b = array[i].dest;

      while (*a) {
        if (*a != *b) {
          printf("FAIL %d: %s != %.32s\n", i, array[i].result, array[i].dest);
          return PR_FALSE;
        }

        a++;
        b++;
      }

      if (array[i].nulled) {
        if (*b != '\0') {
          printf("FAIL %d: not terminated\n", i);
          return PR_FALSE;
        }
      } else {
        if (*b != '-') {
          printf("FAIL %d: overstepped\n", i);
          return PR_FALSE;
        }
      }
    }
  }

  printf("PASS\n");
  return PR_TRUE;
}

/* PL_strncpyz */
PRBool test_005(void) {
  static char buffer[1024];

  static struct {
    const char* str;
    PRUint32 len;
    char* dest;
    char* rv;
    PRBool comp;
    const char* result;
  } array[] = {
      {(const char*)0, 0, (char*)0, (char*)0, PR_FALSE, (const char*)0},
      {(const char*)0, 0, buffer, (char*)0, PR_FALSE, (const char*)0},
      {(const char*)0, 1, (char*)0, (char*)0, PR_FALSE, (const char*)0},
      {(const char*)0, 7, (char*)0, (char*)0, PR_FALSE, (const char*)0},
      {(const char*)0, 1, buffer, (char*)0, PR_FALSE, (const char*)0},
      {(const char*)0, 7, buffer, (char*)0, PR_FALSE, (const char*)0},
      {"", 0, (char*)0, (char*)0, PR_FALSE, (const char*)0},
      {"", 0, buffer, (char*)0, PR_FALSE, (const char*)0},
      {"", 1, (char*)0, (char*)0, PR_FALSE, (const char*)0},
      {"", 7, (char*)0, (char*)0, PR_FALSE, (const char*)0},
      {"", 1, buffer, buffer, PR_TRUE, ""},
      {"", 7, buffer, buffer, PR_TRUE, ""},
      {"a", 0, (char*)0, (char*)0, PR_FALSE, (const char*)0},
      {"a", 0, buffer, (char*)0, PR_FALSE, (const char*)0},
      {"a", 1, (char*)0, (char*)0, PR_FALSE, (const char*)0},
      {"a", 7, (char*)0, (char*)0, PR_FALSE, (const char*)0},
      {"b", 1, buffer, buffer, PR_TRUE, ""},
      {"c", 7, buffer, buffer, PR_TRUE, "c"},
      {"de", 0, (char*)0, (char*)0, PR_FALSE, (const char*)0},
      {"de", 0, buffer, (char*)0, PR_FALSE, (const char*)0},
      {"de", 1, (char*)0, (char*)0, PR_FALSE, (const char*)0},
      {"de", 7, (char*)0, (char*)0, PR_FALSE, (const char*)0},
      {"fg", 1, buffer, buffer, PR_TRUE, ""},
      {"hi", 7, buffer, buffer, PR_TRUE, "hi"},
      {"jklmnopq", 0, (char*)0, (char*)0, PR_FALSE, (const char*)0},
      {"jklmnopq", 0, buffer, (char*)0, PR_FALSE, (const char*)0},
      {"jklmnopq", 1, (char*)0, (char*)0, PR_FALSE, (const char*)0},
      {"jklmnopq", 7, (char*)0, (char*)0, PR_FALSE, (const char*)0},
      {"rstuvwxy", 1, buffer, buffer, PR_TRUE, ""},
      {"zABCDEFG", 7, buffer, buffer, PR_TRUE, "zABCDE"},
      {"a\0XXX", 0, (char*)0, (char*)0, PR_FALSE, (const char*)0},
      {"a\0XXX", 0, buffer, (char*)0, PR_FALSE, (const char*)0},
      {"a\0XXX", 1, (char*)0, (char*)0, PR_FALSE, (const char*)0},
      {"a\0XXX", 7, (char*)0, (char*)0, PR_FALSE, (const char*)0},
      {"b\0XXX", 1, buffer, buffer, PR_TRUE, ""},
      {"c\0XXX", 7, buffer, buffer, PR_TRUE, "c"},
      {"de\0XXX", 0, (char*)0, (char*)0, PR_FALSE, (const char*)0},
      {"de\0XXX", 0, buffer, (char*)0, PR_FALSE, (const char*)0},
      {"de\0XXX", 1, (char*)0, (char*)0, PR_FALSE, (const char*)0},
      {"de\0XXX", 7, (char*)0, (char*)0, PR_FALSE, (const char*)0},
      {"fg\0XXX", 1, buffer, buffer, PR_TRUE, ""},
      {"hi\0XXX", 7, buffer, buffer, PR_TRUE, "hi"},
      {"jklmnopq\0XXX", 0, (char*)0, (char*)0, PR_FALSE, (const char*)0},
      {"jklmnopq\0XXX", 0, buffer, (char*)0, PR_FALSE, (const char*)0},
      {"jklmnopq\0XXX", 1, (char*)0, (char*)0, PR_FALSE, (const char*)0},
      {"jklmnopq\0XXX", 7, (char*)0, (char*)0, PR_FALSE, (const char*)0},
      {"rstuvwxy\0XXX", 1, buffer, buffer, PR_TRUE, ""},
      {"zABCDEFG\0XXX", 7, buffer, buffer, PR_TRUE, "zABCDE"},
  };

  int i;

  printf("Test 005 (PL_strncpyz) ...");
  fflush(stdout);

  for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
    char* rv;
    int j;

    for (j = 0; j < sizeof(buffer); j++) {
      buffer[j] = '-';
    }

    rv = PL_strncpyz(array[i].dest, array[i].str, array[i].len);
    if (array[i].rv != rv) {
      printf("FAIL %d: (0x%x, %s, %lu)->0x%x\n", i, array[i].dest,
             array[i].str ? array[i].str : "(null)", array[i].len, rv);
      return PR_FALSE;
    }

    if (array[i].comp) {
      const char* a = array[i].result;
      const char* b = array[i].dest;

      while (1) {
        if (*a != *b) {
          printf("FAIL %d: %s != %.32s\n", i, array[i].result, array[i].dest);
          return PR_FALSE;
        }

        if ((char)0 == *a) {
          break;
        }

        a++;
        b++;
      }
    }
  }

  printf("PASS\n");
  return PR_TRUE;
}

/* PL_strdup */
PRBool test_006(void) {
  static const char* array[] = {(const char*)0, """a""abcdefg"};

  int i;

  printf("Test 006 (PL_strdup) ...");
  fflush(stdout);

  for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
    char* rv = PL_strdup(array[i]);

    if ((char*)0 == rv) {
      printf("FAIL %d: 0x%x -> 0\n", i, array[i]);
      return PR_FALSE;
    }

    if ((const char*)0 == array[i]) {
      if ((char)0 != *rv) {
        printf("FAIL %d: (const char *)0 -> %.32s\n", i, rv);
        return PR_FALSE;
      }
    } else {
      const char* a = array[i];
      const char* b = (const char*)rv;

      while (1) {
        if (*a != *b) {
          printf("FAIL %d: %s != %.32s\n", i, array[i], rv);
          return PR_FALSE;
        }

        if ((char)0 == *a) {
          break;
        }

        a++;
        b++;
      }
    }
    PL_strfree(rv);
  }

  printf("PASS\n");
  return PR_TRUE;
}

/* PL_strndup */
PRBool test_007(void) {
  static struct {
    const char* str;
    PRUint32 len;
    const char* result;
  } array[] = {{(const char*)0, 0, ""},
               {(const char*)0, 1, ""},
               {(const char*)0, 7, ""},
               {"", 0, ""},
               {"", 1, ""},
               {"", 7, ""},
               {"a", 0, ""},
               {"a", 1, "a"},
               {"a", 7, "a"},
               {"ab", 0, ""},
               {"ab", 1, "a"},
               {"ab", 7, "ab"},
               {"abcdefg", 0, ""},
               {"abcdefg", 1, "a"},
               {"abcdefg", 7, "abcdefg"},
               {"abcdefghijk", 0, ""},
               {"abcdefghijk", 1, "a"},
               {"abcdefghijk", 7, "abcdefg"},
               {"abcdef\0ghijk", 0, ""},
               {"abcdef\0ghijk", 1, "a"},
               {"abcdef\0ghijk", 7, "abcdef"}};

  int i;

  printf("Test 007 (PL_strndup) ...");
  fflush(stdout);

  for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
    char* rv = PL_strndup(array[i].str, array[i].len);
    const char* a;
    const char* b;

    if ((char*)0 == rv) {
      printf("FAIL %d: %s,%lu -> 0\n", i,
             array[i].str ? array[i].str : "(null)", array[i].len);
      return PR_FALSE;
    }

    a = array[i].result;
    b = (const char*)rv;

    while (1) {
      if (*a != *b) {
        printf("FAIL %d: %s != %.32s\n", i, array[i].result, rv);
        return PR_FALSE;
      }

      if ((char)0 == *a) {
        break;
      }

      a++;
      b++;
    }

    free(rv);
  }

  printf("PASS\n");
  return PR_TRUE;
}

/* PL_strcat */
PRBool test_008(void) {
  static struct {
    const char* first;
    const char* second;
    const char* result;
  } array[] = {{(const char*)0, (const char*)0, (const char*)0},
               {(const char*)0, "xyz", (const char*)0},
               {"", (const char*)0, ""},
               {""""""},
               {"ab""""ab"},
               {"cd""ef""cdef"},
               {"gh\0X""""gh"},
               {"ij\0X""kl""ijkl"},
               {"mn\0X""op\0X""mnop"},
               {"qr""st\0X""qrst"},
               {"uv\0X""wx\0X""uvwx"}};

  int i;

  printf("Test 008 (PL_strcat) ...");
  fflush(stdout);

  for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
    char buffer[1024];
    int j;
    char* rv;

    for (j = 0; j < sizeof(buffer); j++) {
      buffer[j] = '-';
    }

    if ((const char*)0 != array[i].first) {
      (void)PL_strcpy(buffer, array[i].first);
    }

    rv = PL_strcat(((const char*)0 == array[i].first) ? (char*)0 : buffer,
                   array[i].second);

    if ((const char*)0 == array[i].result) {
      if ((char*)0 != rv) {
        printf("FAIL %d: %s+%s -> %.32s, not zero\n", i,
               array[i].first ? array[i].first : "(null)",
               array[i].second ? array[i].second : "(null)", rv);
        return PR_FALSE;
      }
    } else {
      if ((char*)0 == rv) {
        printf("FAIL %d: %s+%s -> null, not %s\n", i,
               array[i].first ? array[i].first : "(null)",
               array[i].second ? array[i].second : "(null)", array[i].result);
        return PR_FALSE;
      } else {
        const char* a = array[i].result;
        const char* b = (const char*)rv;

        while (1) {
          if (*a != *b) {
            printf("FAIL %d: %s+%s -> %.32s, not %s\n", i,
                   array[i].first ? array[i].first : "(null)",
                   array[i].second ? array[i].second : "(null)", rv,
                   array[i].result);
            return PR_FALSE;
          }

          if ((char)0 == *a) {
            break;
          }

          a++;
          b++;
        }
      }
    }
  }

  printf("PASS\n");
  return PR_TRUE;
}

/* PL_strncat */
PRBool test_009(void) {
  static struct {
    const char* first;
    const char* second;
    PRUint32 length;
    PRBool nulled;
    const char* result;
  } array[] = {{(const char*)0, (const char*)0, 0, PR_FALSE, (const char*)0},
               {(const char*)0, (const char*)0, 1, PR_FALSE, (const char*)0},
               {(const char*)0, (const char*)0, 7, PR_FALSE, (const char*)0},
               {(const char*)0, "", 0, PR_FALSE, (const char*)0},
               {(const char*)0, "", 1, PR_FALSE, (const char*)0},
               {(const char*)0, "", 7, PR_FALSE, (const char*)0},
               {(const char*)0, "stuff", 0, PR_FALSE, (const char*)0},
               {(const char*)0, "stuff", 1, PR_FALSE, (const char*)0},
               {(const char*)0, "stuff", 7, PR_FALSE, (const char*)0},
               {"", (const char*)0, 0, PR_TRUE, ""},
               {"", (const char*)0, 1, PR_TRUE, ""},
               {"", (const char*)0, 7, PR_TRUE, ""},
               {"""", 0, PR_TRUE, ""},
               {"""", 1, PR_TRUE, ""},
               {"""", 7, PR_TRUE, ""},
               {"""abcdefgh", 0, PR_TRUE, ""},
               {"""abcdefgh", 1, PR_FALSE, "a"},
               {"""abcdefgh", 7, PR_FALSE, "abcdefg"},
               {"xyz", (const char*)0, 0, PR_TRUE, "xyz"},
               {"xyz", (const char*)0, 1, PR_TRUE, "xyz"},
               {"xyz", (const char*)0, 7, PR_TRUE, "xyz"},
               {"xyz""", 0, PR_TRUE, "xyz"},
               {"xyz""", 1, PR_TRUE, "xyz"},
               {"xyz""", 7, PR_TRUE, "xyz"},
               {"xyz""abcdefgh", 0, PR_TRUE, "xyz"},
               {"xyz""abcdefgh", 1, PR_FALSE, "xyza"},
               {"xyz""abcdefgh", 7, PR_FALSE, "xyzabcdefg"}};

  int i;

  printf("Test 009 (PL_strncat) ...");
  fflush(stdout);

  for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
    char buffer[1024];
    int j;
    char* rv;

    for (j = 0; j < sizeof(buffer); j++) {
      buffer[j] = '-';
    }

    if ((const char*)0 != array[i].first) {
      (void)PL_strcpy(buffer, array[i].first);
    }

    rv = PL_strncat(((const char*)0 == array[i].first) ? (char*)0 : buffer,
                    array[i].second, array[i].length);

    if ((const char*)0 == array[i].result) {
      if ((char*)0 != rv) {
        printf("FAIL %d: %s+%s/%lu -> %.32s, not zero\n", i,
               array[i].first ? array[i].first : "(null)",
               array[i].second ? array[i].second : "(null)", array[i].length,
               rv);
        return PR_FALSE;
      }
    } else {
      if ((char*)0 == rv) {
        printf("FAIL %d: %s+%s/%lu -> null, not %s\n", i,
               array[i].first ? array[i].first : "(null)",
               array[i].second ? array[i].second : "(null)", array[i].length,
               array[i].result);
        return PR_FALSE;
      } else {
        const char* a = array[i].result;
        const char* b = (const char*)rv;

        while (*a) {
          if (*a != *b) {
            printf("FAIL %d: %s+%s/%lu -> %.32s, not %s\n", i,
                   array[i].first ? array[i].first : "(null)",
                   array[i].second ? array[i].second : "(null)",
                   array[i].length, rv, array[i].result);
            return PR_FALSE;
          }

          a++;
          b++;
        }

        if (array[i].nulled) {
          if ((char)0 != *b) {
            printf("FAIL %d: %s+%s/%lu -> not nulled\n", i,
                   array[i].first ? array[i].first : "(null)",
                   array[i].second ? array[i].second : "(null)",
                   array[i].length);
            return PR_FALSE;
          }
        } else {
          if ((char)0 == *b) {
            printf("FAIL %d: %s+%s/%lu -> overrun\n", i,
                   array[i].first ? array[i].first : "(null)",
                   array[i].second ? array[i].second : "(null)",
                   array[i].length);
            return PR_FALSE;
          }
        }
      }
    }
  }

  printf("PASS\n");
  return PR_TRUE;
}

/* PL_strcatn */
PRBool test_010(void) {
  static struct {
    const char* first;
    const char* second;
    PRUint32 length;
    const char* result;
  } array[] = {{(const char*)0, (const char*)0, 0, (const char*)0},
               {(const char*)0, (const char*)0, 1, (const char*)0},
               {(const char*)0, (const char*)0, 7, (const char*)0},
               {(const char*)0, "", 0, (const char*)0},
               {(const char*)0, "", 1, (const char*)0},
               {(const char*)0, "", 7, (const char*)0},
               {(const char*)0, "stuff", 0, (const char*)0},
               {(const char*)0, "stuff", 1, (const char*)0},
               {(const char*)0, "stuff", 7, (const char*)0},
               {"", (const char*)0, 0, ""},
               {"", (const char*)0, 1, ""},
               {"", (const char*)0, 7, ""},
               {"""", 0, ""},
               {"""", 1, ""},
               {"""", 7, ""},
               {"""abcdefgh", 0, ""},
               {"""abcdefgh", 1, ""},
               {"""abcdefgh", 7, "abcdef"},
               {"xyz", (const char*)0, 0, "xyz"},
               {"xyz", (const char*)0, 1, "xyz"},
               {"xyz", (const char*)0, 7, "xyz"},
               {"xyz""", 0, "xyz"},
               {"xyz""", 1, "xyz"},
               {"xyz""", 7, "xyz"},
               {"xyz""abcdefgh", 0, "xyz"},
               {"xyz""abcdefgh", 1, "xyz"},
               {"xyz""abcdefgh", 7, "xyzabc"}};

  int i;

  printf("Test 010 (PL_strcatn) ...");
  fflush(stdout);

  for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
    char buffer[1024];
    int j;
    char* rv;

    for (j = 0; j < sizeof(buffer); j++) {
      buffer[j] = '-';
    }

    if ((const char*)0 != array[i].first) {
      (void)PL_strcpy(buffer, array[i].first);
    }

    rv = PL_strcatn(((const char*)0 == array[i].first) ? (char*)0 : buffer,
                    array[i].length, array[i].second);

    if ((const char*)0 == array[i].result) {
      if ((char*)0 != rv) {
        printf("FAIL %d: %s+%s/%lu -> %.32s, not zero\n", i,
               array[i].first ? array[i].first : "(null)",
               array[i].second ? array[i].second : "(null)", array[i].length,
               rv);
        return PR_FALSE;
      }
    } else {
      if ((char*)0 == rv) {
        printf("FAIL %d: %s+%s/%lu -> null, not %s\n", i,
               array[i].first ? array[i].first : "(null)",
               array[i].second ? array[i].second : "(null)", array[i].length,
               array[i].result);
        return PR_FALSE;
      } else {
        const char* a = array[i].result;
        const char* b = (const char*)rv;

        while (1) {
          if (*a != *b) {
            printf("FAIL %d: %s+%s/%lu -> %.32s, not %s\n", i,
                   array[i].first ? array[i].first : "(null)",
                   array[i].second ? array[i].second : "(null)",
                   array[i].length, rv, array[i].result);
            return PR_FALSE;
          }

          if ((char)0 == *a) {
            break;
          }

          a++;
          b++;
        }
      }
    }
  }

  printf("PASS\n");
  return PR_TRUE;
}

/* PL_strcmp */
PRBool test_011(void) {
  static struct {
    const char* one;
    const char* two;
    PRIntn sign;
  } array[] = {{(const char*)0, (const char*)0, 0},
               {(const char*)0, "word", -1},
               {"word", (const char*)0, 1},
               {"word""word", 0},
               {"aZYXVUT""bZYXVUT", -1},
               {"aZYXVUT""bAAAAAA", -1},
               {"a""aa", -1},
               {"a""a", 0},
               {"a""A", 1},
               {"aaaaa""baaaa", -1},
               {"aaaaa""abaaa", -1},
               {"aaaaa""aabaa", -1},
               {"aaaaa""aaaba", -1},
               {"aaaaa""aaaab", -1},
               {"bZYXVUT""aZYXVUT", 1},
               {"bAAAAAA""aZYXVUT", 1},
               {"aa""a", 1},
               {"A""a", -1},
               {"baaaa""aaaaa", 1},
               {"abaaa""aaaaa", 1},
               {"aabaa""aaaaa", 1},
               {"aaaba""aaaaa", 1},
               {"aaaab""aaaaa", 1},
               {"word""Word", 1},
               {"word""wOrd", 1},
               {"word""woRd", 1},
               {"word""worD", 1},
               {"WORD""wORD", -1},
               {"WORD""WoRD", -1},
               {"WORD""WOrD", -1},
               {"WORD""WORd", -1}};

  int i;

  printf("Test 011 (PL_strcmp) ...");
  fflush(stdout);

  for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
    PRIntn rv = PL_strcmp(array[i].one, array[i].two);

    switch (array[i].sign) {
      case -1:
        if (rv < 0) {
          continue;
        }
        break;
      case 1:
        if (rv > 0) {
          continue;
        }
        break;
      case 0:
        if (0 == rv) {
          continue;
        }
        break;
      default:
        PR_NOT_REACHED("static data inconsistancy");
        break;
    }

    printf("FAIL %d: %s-%s -> %d, not %d\n", i,
           array[i].one ? array[i].one : "(null)",
           array[i].two ? array[i].two : "(null)", rv, array[i].sign);
    return PR_FALSE;
  }

  printf("PASS\n");
  return PR_TRUE;
}

/* PL_strncmp */
PRBool test_012(void) {
  static struct {
    const char* one;
    const char* two;
    PRUint32 max;
    PRIntn sign;
  } array[] = {{(const char*)0, (const char*)0, 0, 0},
               {(const char*)0, (const char*)0, 1, 0},
               {(const char*)0, (const char*)0, 4, 0},
               {(const char*)0, "word", 0, -1},
               {(const char*)0, "word", 1, -1},
               {(const char*)0, "word", 4, -1},
               {"word", (const char*)0, 0, 1},
               {"word", (const char*)0, 1, 1},
               {"word", (const char*)0, 4, 1},
               {"word""word", 0, 0},
               {"word""word", 1, 0},
               {"word""word", 3, 0},
               {"word""word", 5, 0},
               {"aZYXVUT""bZYXVUT", 0, 0},
               {"aZYXVUT""bZYXVUT", 1, -1},
               {"aZYXVUT""bZYXVUT", 4, -1},
               {"aZYXVUT""bZYXVUT", 9, -1},
               {"aZYXVUT""bAAAAAA", 0, 0},
               {"aZYXVUT""bAAAAAA", 1, -1},
               {"aZYXVUT""bAAAAAA", 4, -1},
               {"aZYXVUT""bAAAAAA", 5, -1},
               {"a""aa", 0, 0},
               {"a""aa", 1, 0},
               {"a""aa", 4, -1},
               {"a""a", 0, 0},
               {"a""a", 1, 0},
               {"a""a", 4, 0},
               {"a""A", 0, 0},
               {"a""A", 1, 1},
               {"a""A", 4, 1},
               {"aaaaa""baaaa", 0, 0},
               {"aaaaa""baaaa", 1, -1},
               {"aaaaa""baaaa", 4, -1},
               {"aaaaa""abaaa", 0, 0},
               {"aaaaa""abaaa", 1, 0},
               {"aaaaa""abaaa", 4, -1},
               {"aaaaa""aabaa", 0, 0},
               {"aaaaa""aabaa", 1, 0},
               {"aaaaa""aabaa", 4, -1},
               {"aaaaa""aaaba", 0, 0},
               {"aaaaa""aaaba", 1, 0},
               {"aaaaa""aaaba", 4, -1},
               {"aaaaa""aaaab", 0, 0},
               {"aaaaa""aaaab", 1, 0},
               {"aaaaa""aaaab", 4, 0},
               {"bZYXVUT""aZYXVUT", 0, 0},
               {"bZYXVUT""aZYXVUT", 1, 1},
               {"bZYXVUT""aZYXVUT", 4, 1},
               {"bAAAAAA""aZYXVUT", 0, 0},
               {"bAAAAAA""aZYXVUT", 1, 1},
               {"bAAAAAA""aZYXVUT", 4, 1},
               {"aa""a", 0, 0},
               {"aa""a", 1, 0},
               {"aa""a", 4, 1},
               {"A""a", 0, 0},
               {"A""a", 1, -1},
               {"A""a", 4, -1},
               {"baaaa""aaaaa", 0, 0},
               {"baaaa""aaaaa", 1, 1},
               {"baaaa""aaaaa", 4, 1},
               {"abaaa""aaaaa", 0, 0},
               {"abaaa""aaaaa", 1, 0},
               {"abaaa""aaaaa", 4, 1},
               {"aabaa""aaaaa", 0, 0},
               {"aabaa""aaaaa", 1, 0},
               {"aabaa""aaaaa", 4, 1},
               {"aaaba""aaaaa", 0, 0},
               {"aaaba""aaaaa", 1, 0},
               {"aaaba""aaaaa", 4, 1},
               {"aaaab""aaaaa", 0, 0},
               {"aaaab""aaaaa", 1, 0},
               {"aaaab""aaaaa", 4, 0},
               {"word""Word", 0, 0},
               {"word""Word", 1, 1},
               {"word""Word", 3, 1},
               {"word""wOrd", 0, 0},
               {"word""wOrd", 1, 0},
               {"word""wOrd", 3, 1},
               {"word""woRd", 0, 0},
               {"word""woRd", 1, 0},
               {"word""woRd", 3, 1},
               {"word""worD", 0, 0},
               {"word""worD", 1, 0},
               {"word""worD", 3, 0},
               {"WORD""wORD", 0, 0},
               {"WORD""wORD", 1, -1},
               {"WORD""wORD", 3, -1},
               {"WORD""WoRD", 0, 0},
               {"WORD""WoRD", 1, 0},
               {"WORD""WoRD", 3, -1},
               {"WORD""WOrD", 0, 0},
               {"WORD""WOrD", 1, 0},
               {"WORD""WOrD", 3, -1},
               {"WORD""WORd", 0, 0},
               {"WORD""WORd", 1, 0},
               {"WORD""WORd", 3, 0}

  };

  int i;

  printf("Test 012 (PL_strncmp) ...");
  fflush(stdout);

  for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
    PRIntn rv = PL_strncmp(array[i].one, array[i].two, array[i].max);

    switch (array[i].sign) {
      case -1:
        if (rv < 0) {
          continue;
        }
        break;
      case 1:
        if (rv > 0) {
          continue;
        }
        break;
      case 0:
        if (0 == rv) {
          continue;
        }
        break;
      default:
        PR_NOT_REACHED("static data inconsistancy");
        break;
    }

    printf("FAIL %d: %s-%s/%ld -> %d, not %d\n", i,
           array[i].one ? array[i].one : "(null)",
           array[i].two ? array[i].two : "(null)", array[i].max, rv,
           array[i].sign);
    return PR_FALSE;
  }

  printf("PASS\n");
  return PR_TRUE;
}

/* PL_strcasecmp */
PRBool test_013(void) {
  static struct {
    const char* one;
    const char* two;
    PRIntn sign;
  } array[] = {{(const char*)0, (const char*)0, 0},
               {(const char*)0, "word", -1},
               {"word", (const char*)0, 1},
               {"word""word", 0},
               {"aZYXVUT""bZYXVUT", -1},
               {"aZYXVUT""bAAAAAA", -1},
               {"a""aa", -1},
               {"a""a", 0},
               {"a""A", 0},
               {"aaaaa""baaaa", -1},
               {"aaaaa""abaaa", -1},
               {"aaaaa""aabaa", -1},
               {"aaaaa""aaaba", -1},
               {"aaaaa""aaaab", -1},
               {"bZYXVUT""aZYXVUT", 1},
               {"bAAAAAA""aZYXVUT", 1},
               {"aa""a", 1},
               {"A""a", 0},
               {"baaaa""aaaaa", 1},
               {"abaaa""aaaaa", 1},
               {"aabaa""aaaaa", 1},
               {"aaaba""aaaaa", 1},
               {"aaaab""aaaaa", 1},
               {"word""Word", 0},
               {"word""wOrd", 0},
               {"word""woRd", 0},
               {"word""worD", 0},
               {"WORD""wORD", 0},
               {"WORD""WoRD", 0},
               {"WORD""WOrD", 0},
               {"WORD""WORd", 0}};

  int i;

  printf("Test 013 (PL_strcasecmp) ...");
  fflush(stdout);

  for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
    PRIntn rv = PL_strcasecmp(array[i].one, array[i].two);

    switch (array[i].sign) {
      case -1:
        if (rv < 0) {
          continue;
        }
        break;
      case 1:
        if (rv > 0) {
          continue;
        }
        break;
      case 0:
        if (0 == rv) {
          continue;
        }
        break;
      default:
        PR_NOT_REACHED("static data inconsistancy");
        break;
    }

    printf("FAIL %d: %s-%s -> %d, not %d\n", i,
           array[i].one ? array[i].one : "(null)",
           array[i].two ? array[i].two : "(null)", rv, array[i].sign);
    return PR_FALSE;
  }

  printf("PASS\n");
  return PR_TRUE;
}

/* PL_strncasecmp */
PRBool test_014(void) {
  static struct {
    const char* one;
    const char* two;
    PRUint32 max;
    PRIntn sign;
  } array[] = {{(const char*)0, (const char*)0, 0, 0},
               {(const char*)0, (const char*)0, 1, 0},
               {(const char*)0, (const char*)0, 4, 0},
               {(const char*)0, "word", 0, -1},
               {(const char*)0, "word", 1, -1},
               {(const char*)0, "word", 4, -1},
               {"word", (const char*)0, 0, 1},
               {"word", (const char*)0, 1, 1},
               {"word", (const char*)0, 4, 1},
               {"word""word", 0, 0},
               {"word""word", 1, 0},
               {"word""word", 3, 0},
               {"word""word", 5, 0},
               {"aZYXVUT""bZYXVUT", 0, 0},
               {"aZYXVUT""bZYXVUT", 1, -1},
               {"aZYXVUT""bZYXVUT", 4, -1},
               {"aZYXVUT""bZYXVUT", 9, -1},
               {"aZYXVUT""bAAAAAA", 0, 0},
               {"aZYXVUT""bAAAAAA", 1, -1},
               {"aZYXVUT""bAAAAAA", 4, -1},
               {"aZYXVUT""bAAAAAA", 5, -1},
               {"a""aa", 0, 0},
               {"a""aa", 1, 0},
               {"a""aa", 4, -1},
               {"a""a", 0, 0},
               {"a""a", 1, 0},
               {"a""a", 4, 0},
               {"a""A", 0, 0},
               {"a""A", 1, 0},
               {"a""A", 4, 0},
               {"aaaaa""baaaa", 0, 0},
               {"aaaaa""baaaa", 1, -1},
               {"aaaaa""baaaa", 4, -1},
               {"aaaaa""abaaa", 0, 0},
               {"aaaaa""abaaa", 1, 0},
               {"aaaaa""abaaa", 4, -1},
               {"aaaaa""aabaa", 0, 0},
               {"aaaaa""aabaa", 1, 0},
               {"aaaaa""aabaa", 4, -1},
               {"aaaaa""aaaba", 0, 0},
               {"aaaaa""aaaba", 1, 0},
               {"aaaaa""aaaba", 4, -1},
               {"aaaaa""aaaab", 0, 0},
               {"aaaaa""aaaab", 1, 0},
               {"aaaaa""aaaab", 4, 0},
               {"bZYXVUT""aZYXVUT", 0, 0},
               {"bZYXVUT""aZYXVUT", 1, 1},
               {"bZYXVUT""aZYXVUT", 4, 1},
               {"bAAAAAA""aZYXVUT", 0, 0},
               {"bAAAAAA""aZYXVUT", 1, 1},
               {"bAAAAAA""aZYXVUT", 4, 1},
               {"aa""a", 0, 0},
               {"aa""a", 1, 0},
               {"aa""a", 4, 1},
               {"A""a", 0, 0},
               {"A""a", 1, 0},
               {"A""a", 4, 0},
               {"baaaa""aaaaa", 0, 0},
               {"baaaa""aaaaa", 1, 1},
               {"baaaa""aaaaa", 4, 1},
               {"abaaa""aaaaa", 0, 0},
               {"abaaa""aaaaa", 1, 0},
               {"abaaa""aaaaa", 4, 1},
               {"aabaa""aaaaa", 0, 0},
               {"aabaa""aaaaa", 1, 0},
               {"aabaa""aaaaa", 4, 1},
               {"aaaba""aaaaa", 0, 0},
               {"aaaba""aaaaa", 1, 0},
               {"aaaba""aaaaa", 4, 1},
               {"aaaab""aaaaa", 0, 0},
               {"aaaab""aaaaa", 1, 0},
               {"aaaab""aaaaa", 4, 0},
               {"word""Word", 0, 0},
               {"word""Word", 1, 0},
               {"word""Word", 3, 0},
               {"word""wOrd", 0, 0},
               {"word""wOrd", 1, 0},
               {"word""wOrd", 3, 0},
               {"word""woRd", 0, 0},
               {"word""woRd", 1, 0},
               {"word""woRd", 3, 0},
               {"word""worD", 0, 0},
               {"word""worD", 1, 0},
               {"word""worD", 3, 0},
               {"WORD""wORD", 0, 0},
               {"WORD""wORD", 1, 0},
               {"WORD""wORD", 3, 0},
               {"WORD""WoRD", 0, 0},
               {"WORD""WoRD", 1, 0},
               {"WORD""WoRD", 3, 0},
               {"WORD""WOrD", 0, 0},
               {"WORD""WOrD", 1, 0},
               {"WORD""WOrD", 3, 0},
               {"WORD""WORd", 0, 0},
               {"WORD""WORd", 1, 0},
               {"WORD""WORd", 3, 0}};

  int i;

  printf("Test 014 (PL_strncasecmp) ...");
  fflush(stdout);

  for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
    PRIntn rv = PL_strncasecmp(array[i].one, array[i].two, array[i].max);

    switch (array[i].sign) {
      case -1:
        if (rv < 0) {
          continue;
        }
        break;
      case 1:
        if (rv > 0) {
          continue;
        }
        break;
      case 0:
        if (0 == rv) {
          continue;
        }
        break;
      default:
        PR_NOT_REACHED("static data inconsistancy");
        break;
    }

    printf("FAIL %d: %s-%s/%ld -> %d, not %d\n", i,
           array[i].one ? array[i].one : "(null)",
           array[i].two ? array[i].two : "(null)", array[i].max, rv,
           array[i].sign);
    return PR_FALSE;
  }

  printf("PASS\n");
  return PR_TRUE;
}

/* PL_strchr */
PRBool test_015(void) {
  static struct {
    const char* str;
    char chr;
    PRBool ret;
    PRUint32 off;
  } array[] = {{(const char*)0, 'a', PR_FALSE, 0},
               {(const char*)0, '\0', PR_FALSE, 0},
               {"abcdefg"'a', PR_TRUE, 0},
               {"abcdefg"'b', PR_TRUE, 1},
               {"abcdefg"'c', PR_TRUE, 2},
               {"abcdefg"'d', PR_TRUE, 3},
               {"abcdefg"'e', PR_TRUE, 4},
               {"abcdefg"'f', PR_TRUE, 5},
               {"abcdefg"'g', PR_TRUE, 6},
               {"abcdefg"'h', PR_FALSE, 0},
               {"abcdefg"'\0', PR_TRUE, 7},
               {"abcdefg"'A', PR_FALSE, 0},
               {"abcdefg"'B', PR_FALSE, 0},
               {"abcdefg"'C', PR_FALSE, 0},
               {"abcdefg"'D', PR_FALSE, 0},
               {"abcdefg"'E', PR_FALSE, 0},
               {"abcdefg"'F', PR_FALSE, 0},
               {"abcdefg"'G', PR_FALSE, 0},
               {"abcdefg"'H', PR_FALSE, 0},
               {"abcdefgabcdefg"'a', PR_TRUE, 0},
               {"abcdefgabcdefg"'b', PR_TRUE, 1},
               {"abcdefgabcdefg"'c', PR_TRUE, 2},
               {"abcdefgabcdefg"'d', PR_TRUE, 3},
               {"abcdefgabcdefg"'e', PR_TRUE, 4},
               {"abcdefgabcdefg"'f', PR_TRUE, 5},
               {"abcdefgabcdefg"'g', PR_TRUE, 6},
               {"abcdefgabcdefg"'h', PR_FALSE, 0},
               {"abcdefgabcdefg"'\0', PR_TRUE, 14}};

  int i;

  printf("Test 015 (PL_strchr) ...");
  fflush(stdout);

  for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
    char* rv = PL_strchr(array[i].str, array[i].chr);

    if (PR_FALSE == array[i].ret) {
      if ((char*)0 != rv) {
        printf("FAIL %d: %s,%c -> %.32s, not zero\n", i, array[i].str,
               array[i].chr, rv);
        return PR_FALSE;
      }
    } else {
      if ((char*)0 == rv) {
        printf("FAIL %d: %s,%c -> null, not +%lu\n", i, array[i].str,
               array[i].chr, array[i].off);
        return PR_FALSE;
      }

      if (&array[i].str[array[i].off] != rv) {
        printf("FAIL %d: %s,%c -> 0x%x, not 0x%x+%lu\n", i, array[i].str,
               array[i].chr, rv, array[i].str, array[i].off);
        return PR_FALSE;
      }
    }
  }

  printf("PASS\n");
  return PR_TRUE;
}

/* PL_strrchr */
PRBool test_016(void) {
  static struct {
    const char* str;
    char chr;
    PRBool ret;
    PRUint32 off;
  } array[] = {{(const char*)0, 'a', PR_FALSE, 0},
               {(const char*)0, '\0', PR_FALSE, 0},
               {"abcdefg"'a', PR_TRUE, 0},
               {"abcdefg"'b', PR_TRUE, 1},
               {"abcdefg"'c', PR_TRUE, 2},
               {"abcdefg"'d', PR_TRUE, 3},
               {"abcdefg"'e', PR_TRUE, 4},
               {"abcdefg"'f', PR_TRUE, 5},
               {"abcdefg"'g', PR_TRUE, 6},
               {"abcdefg"'h', PR_FALSE, 0},
               {"abcdefg"'\0', PR_TRUE, 7},
               {"abcdefg"'A', PR_FALSE, 0},
               {"abcdefg"'B', PR_FALSE, 0},
               {"abcdefg"'C', PR_FALSE, 0},
               {"abcdefg"'D', PR_FALSE, 0},
               {"abcdefg"'E', PR_FALSE, 0},
               {"abcdefg"'F', PR_FALSE, 0},
               {"abcdefg"'G', PR_FALSE, 0},
               {"abcdefg"'H', PR_FALSE, 0},
               {"abcdefgabcdefg"'a', PR_TRUE, 7},
               {"abcdefgabcdefg"'b', PR_TRUE, 8},
               {"abcdefgabcdefg"'c', PR_TRUE, 9},
               {"abcdefgabcdefg"'d', PR_TRUE, 10},
               {"abcdefgabcdefg"'e', PR_TRUE, 11},
               {"abcdefgabcdefg"'f', PR_TRUE, 12},
               {"abcdefgabcdefg"'g', PR_TRUE, 13},
               {"abcdefgabcdefg"'h', PR_FALSE, 0},
               {"abcdefgabcdefg"'\0', PR_TRUE, 14}};

  int i;

  printf("Test 016 (PL_strrchr) ...");
  fflush(stdout);

  for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
    char* rv = PL_strrchr(array[i].str, array[i].chr);

    if (PR_FALSE == array[i].ret) {
      if ((char*)0 != rv) {
        printf("FAIL %d: %s,%c -> %.32s, not zero\n", i, array[i].str,
               array[i].chr, rv);
        return PR_FALSE;
      }
    } else {
      if ((char*)0 == rv) {
        printf("FAIL %d: %s,%c -> null, not +%lu\n", i, array[i].str,
               array[i].chr, array[i].off);
        return PR_FALSE;
      }

      if (&array[i].str[array[i].off] != rv) {
        printf("FAIL %d: %s,%c -> 0x%x, not 0x%x+%lu\n", i, array[i].str,
               array[i].chr, rv, array[i].str, array[i].off);
        return PR_FALSE;
      }
    }
  }

  printf("PASS\n");
  return PR_TRUE;
}

/* PL_strnchr */
PRBool test_017(void) {
  static struct {
    const char* str;
    char chr;
    PRUint32 max;
    PRBool ret;
    PRUint32 off;
  } array[] = {{(const char*)0, 'a', 2, PR_FALSE, 0},
               {(const char*)0, '\0', 2, PR_FALSE, 0},
               {"abcdefg"'a', 5, PR_TRUE, 0},
               {"abcdefg"'b', 5, PR_TRUE, 1},
               {"abcdefg"'c', 5, PR_TRUE, 2},
               {"abcdefg"'d', 5, PR_TRUE, 3},
               {"abcdefg"'e', 5, PR_TRUE, 4},
               {"abcdefg"'f', 5, PR_FALSE, 0},
               {"abcdefg"'g', 5, PR_FALSE, 0},
               {"abcdefg"'h', 5, PR_FALSE, 0},
               {"abcdefg"'\0', 5, PR_FALSE, 0},
               {"abcdefg"'\0', 15, PR_TRUE, 7},
               {"abcdefg"'A', 5, PR_FALSE, 0},
               {"abcdefg"'B', 5, PR_FALSE, 0},
               {"abcdefg"'C', 5, PR_FALSE, 0},
               {"abcdefg"'D', 5, PR_FALSE, 0},
               {"abcdefg"'E', 5, PR_FALSE, 0},
               {"abcdefg"'F', 5, PR_FALSE, 0},
               {"abcdefg"'G', 5, PR_FALSE, 0},
               {"abcdefg"'H', 5, PR_FALSE, 0},
               {"abcdefgabcdefg"'a', 10, PR_TRUE, 0},
               {"abcdefgabcdefg"'b', 10, PR_TRUE, 1},
               {"abcdefgabcdefg"'c', 10, PR_TRUE, 2},
               {"abcdefgabcdefg"'d', 10, PR_TRUE, 3},
               {"abcdefgabcdefg"'e', 10, PR_TRUE, 4},
               {"abcdefgabcdefg"'f', 10, PR_TRUE, 5},
               {"abcdefgabcdefg"'g', 10, PR_TRUE, 6},
               {"abcdefgabcdefg"'h', 10, PR_FALSE, 0},
               {"abcdefgabcdefg"'\0', 10, PR_FALSE, 0},
               {"abcdefgabcdefg"'\0', 14, PR_FALSE, 0},
               {"abcdefgabcdefg"'\0', 15, PR_TRUE, 14}};

  int i;

  printf("Test 017 (PL_strnchr) ...");
  fflush(stdout);

  for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
    char* rv = PL_strnchr(array[i].str, array[i].chr, array[i].max);

    if (PR_FALSE == array[i].ret) {
      if ((char*)0 != rv) {
        printf("FAIL %d: %s,%c/%lu -> %.32s, not zero\n", i, array[i].str,
               array[i].chr, array[i].max, rv);
        return PR_FALSE;
      }
    } else {
      if ((char*)0 == rv) {
        printf("FAIL %d: %s,%c/%lu -> null, not +%lu\n", i, array[i].str,
               array[i].chr, array[i].max, array[i].off);
        return PR_FALSE;
      }

      if (&array[i].str[array[i].off] != rv) {
        printf("FAIL %d: %s,%c/%lu -> 0x%x, not 0x%x+%lu\n", i, array[i].str,
               array[i].chr, array[i].max, rv, array[i].str, array[i].off);
        return PR_FALSE;
      }
    }
  }

  printf("PASS\n");
  return PR_TRUE;
}

/* PL_strnrchr */
PRBool test_018(void) {
  static struct {
    const char* str;
    char chr;
    PRUint32 max;
    PRBool ret;
    PRUint32 off;
  } array[] = {{(const char*)0, 'a', 2, PR_FALSE, 0},
               {(const char*)0, '\0', 2, PR_FALSE, 0},
               {"abcdefg"'a', 5, PR_TRUE, 0},
               {"abcdefg"'b', 5, PR_TRUE, 1},
               {"abcdefg"'c', 5, PR_TRUE, 2},
               {"abcdefg"'d', 5, PR_TRUE, 3},
               {"abcdefg"'e', 5, PR_TRUE, 4},
               {"abcdefg"'f', 5, PR_FALSE, 0},
               {"abcdefg"'g', 5, PR_FALSE, 0},
               {"abcdefg"'h', 5, PR_FALSE, 0},
               {"abcdefg"'\0', 5, PR_FALSE, 0},
               {"abcdefg"'\0', 15, PR_TRUE, 7},
               {"abcdefg"'A', 5, PR_FALSE, 0},
               {"abcdefg"'B', 5, PR_FALSE, 0},
               {"abcdefg"'C', 5, PR_FALSE, 0},
               {"abcdefg"'D', 5, PR_FALSE, 0},
               {"abcdefg"'E', 5, PR_FALSE, 0},
               {"abcdefg"'F', 5, PR_FALSE, 0},
               {"abcdefg"'G', 5, PR_FALSE, 0},
               {"abcdefg"'H', 5, PR_FALSE, 0},
               {"abcdefgabcdefg"'a', 10, PR_TRUE, 7},
               {"abcdefgabcdefg"'b', 10, PR_TRUE, 8},
               {"abcdefgabcdefg"'c', 10, PR_TRUE, 9},
               {"abcdefgabcdefg"'d', 10, PR_TRUE, 3},
               {"abcdefgabcdefg"'e', 10, PR_TRUE, 4},
               {"abcdefgabcdefg"'f', 10, PR_TRUE, 5},
               {"abcdefgabcdefg"'g', 10, PR_TRUE, 6},
               {"abcdefgabcdefg"'h', 10, PR_FALSE, 0},
               {"abcdefgabcdefg"'\0', 10, PR_FALSE, 0},
               {"abcdefgabcdefg"'\0', 14, PR_FALSE, 0},
               {"abcdefgabcdefg"'\0', 15, PR_TRUE, 14}};

  int i;

  printf("Test 018 (PL_strnrchr) ...");
  fflush(stdout);

  for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
    char* rv = PL_strnrchr(array[i].str, array[i].chr, array[i].max);

    if (PR_FALSE == array[i].ret) {
      if ((char*)0 != rv) {
        printf("FAIL %d: %s,%c/%lu -> %.32s, not zero\n", i, array[i].str,
               array[i].chr, array[i].max, rv);
        return PR_FALSE;
      }
    } else {
      if ((char*)0 == rv) {
        printf("FAIL %d: %s,%c/%lu -> null, not +%lu\n", i, array[i].str,
               array[i].chr, array[i].max, array[i].off);
        return PR_FALSE;
      }

      if (&array[i].str[array[i].off] != rv) {
        printf("FAIL %d: %s,%c/%lu -> 0x%x, not 0x%x+%lu\n", i, array[i].str,
               array[i].chr, array[i].max, rv, array[i].str, array[i].off);
        return PR_FALSE;
      }
    }
  }

  printf("PASS\n");
  return PR_TRUE;
}

/* PL_strpbrk */
PRBool test_019(void) {
  static struct {
    const char* str;
    const char* chrs;
    PRBool ret;
    PRUint32 off;
  } array[] = {{(const char*)0, (const char*)0, PR_FALSE, 0},
               {(const char*)0, "abc", PR_FALSE, 0},
               {"abc", (const char*)0, PR_FALSE, 0},
               {"abcdefg""", PR_FALSE, 0},
               {"""aeiou", PR_FALSE, 0},
               {"abcdefg""ae", PR_TRUE, 0},
               {"abcdefg""ei", PR_TRUE, 4},
               {"abcdefg""io", PR_FALSE, 0},
               {"abcdefg""bcd", PR_TRUE, 1},
               {"abcdefg""cbd", PR_TRUE, 1},
               {"abcdefg""dbc", PR_TRUE, 1},
               {"abcdefg""ghi", PR_TRUE, 6},
               {"abcdefg""AE", PR_FALSE, 0},
               {"abcdefg""EI", PR_FALSE, 0},
               {"abcdefg""IO", PR_FALSE, 0},
               {"abcdefg""BCD", PR_FALSE, 0},
               {"abcdefg""CBD", PR_FALSE, 0},
               {"abcdefg""DBC", PR_FALSE, 0},
               {"abcdefg""GHI", PR_FALSE, 0},
               {"abcdefgabcdefg""ae", PR_TRUE, 0},
               {"abcdefgabcdefg""ei", PR_TRUE, 4},
               {"abcdefgabcdefg""io", PR_FALSE, 0},
               {"abcdefgabcdefg""bcd", PR_TRUE, 1},
               {"abcdefgabcdefg""cbd", PR_TRUE, 1},
               {"abcdefgabcdefg""dbc", PR_TRUE, 1},
               {"abcdefgabcdefg""ghi", PR_TRUE, 6},
               {"abcdefgabcdefg""AE", PR_FALSE, 0},
               {"abcdefgabcdefg""EI", PR_FALSE, 0},
               {"abcdefgabcdefg""IO", PR_FALSE, 0},
               {"abcdefgabcdefg""BCD", PR_FALSE, 0},
               {"abcdefgabcdefg""CBD", PR_FALSE, 0},
               {"abcdefgabcdefg""DBC", PR_FALSE, 0},
               {"abcdefgabcdefg""GHI", PR_FALSE, 0}};

  int i;

  printf("Test 019 (PL_strpbrk) ...");
  fflush(stdout);

  for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
    char* rv = PL_strpbrk(array[i].str, array[i].chrs);

    if (PR_FALSE == array[i].ret) {
      if ((char*)0 != rv) {
        printf("FAIL %d: %s,%s -> %.32s, not null\n", i,
               array[i].str ? array[i].str : "(null)",
               array[i].chrs ? array[i].chrs : "(null)", rv);
        return PR_FALSE;
      }
    } else {
      if ((char*)0 == rv) {
        printf("FAIL %d: %s,%s -> null, not +%lu\n", i,
               array[i].str ? array[i].str : "(null)",
               array[i].chrs ? array[i].chrs : "(null)", array[i].off);
        return PR_FALSE;
      }

      if (&array[i].str[array[i].off] != rv) {
        printf("FAIL %d: %s,%s -> 0x%x, not 0x%x+%lu\n", i,
               array[i].str ? array[i].str : "(null)",
               array[i].chrs ? array[i].chrs : "(null)", rv, array[i].str,
               array[i].off);
        return PR_FALSE;
      }
    }
  }

  printf("PASS\n");
  return PR_TRUE;
}

/* PL_strprbrk */
PRBool test_020(void) {
  static struct {
    const char* str;
    const char* chrs;
    PRBool ret;
    PRUint32 off;
  } array[] = {{(const char*)0, (const char*)0, PR_FALSE, 0},
               {(const char*)0, "abc", PR_FALSE, 0},
               {"abc", (const char*)0, PR_FALSE, 0},
               {"abcdefg""", PR_FALSE, 0},
               {"""aeiou", PR_FALSE, 0},
               {"abcdefg""ae", PR_TRUE, 4},
               {"abcdefg""ei", PR_TRUE, 4},
               {"abcdefg""io", PR_FALSE, 0},
               {"abcdefg""bcd", PR_TRUE, 3},
               {"abcdefg""cbd", PR_TRUE, 3},
               {"abcdefg""dbc", PR_TRUE, 3},
               {"abcdefg""ghi", PR_TRUE, 6},
               {"abcdefg""AE", PR_FALSE, 0},
               {"abcdefg""EI", PR_FALSE, 0},
               {"abcdefg""IO", PR_FALSE, 0},
               {"abcdefg""BCD", PR_FALSE, 0},
               {"abcdefg""CBD", PR_FALSE, 0},
               {"abcdefg""DBC", PR_FALSE, 0},
               {"abcdefg""GHI", PR_FALSE, 0},
               {"abcdefgabcdefg""ae", PR_TRUE, 11},
               {"abcdefgabcdefg""ei", PR_TRUE, 11},
               {"abcdefgabcdefg""io", PR_FALSE, 0},
               {"abcdefgabcdefg""bcd", PR_TRUE, 10},
               {"abcdefgabcdefg""cbd", PR_TRUE, 10},
               {"abcdefgabcdefg""dbc", PR_TRUE, 10},
               {"abcdefgabcdefg""ghi", PR_TRUE, 13},
               {"abcdefgabcdefg""AE", PR_FALSE, 0},
               {"abcdefgabcdefg""EI", PR_FALSE, 0},
               {"abcdefgabcdefg""IO", PR_FALSE, 0},
               {"abcdefgabcdefg""BCD", PR_FALSE, 0},
               {"abcdefgabcdefg""CBD", PR_FALSE, 0},
               {"abcdefgabcdefg""DBC", PR_FALSE, 0},
               {"abcdefgabcdefg""GHI", PR_FALSE, 0}};

  int i;

  printf("Test 020 (PL_strprbrk) ...");
  fflush(stdout);

  for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
    char* rv = PL_strprbrk(array[i].str, array[i].chrs);

    if (PR_FALSE == array[i].ret) {
      if ((char*)0 != rv) {
        printf("FAIL %d: %s,%s -> %.32s, not null\n", i,
               array[i].str ? array[i].str : "(null)",
               array[i].chrs ? array[i].chrs : "(null)", rv);
        return PR_FALSE;
      }
    } else {
      if ((char*)0 == rv) {
        printf("FAIL %d: %s,%s -> null, not +%lu\n", i,
               array[i].str ? array[i].str : "(null)",
               array[i].chrs ? array[i].chrs : "(null)", array[i].off);
        return PR_FALSE;
      }

      if (&array[i].str[array[i].off] != rv) {
        printf("FAIL %d: %s,%s -> 0x%x, not 0x%x+%lu\n", i,
               array[i].str ? array[i].str : "(null)",
               array[i].chrs ? array[i].chrs : "(null)", rv, array[i].str,
               array[i].off);
        return PR_FALSE;
      }
    }
  }

  printf("PASS\n");
  return PR_TRUE;
}

/* PL_strnpbrk */
PRBool test_021(void) {
  static struct {
    const char* str;
    const char* chrs;
    PRUint32 max;
    PRBool ret;
    PRUint32 off;
  } array[] = {{(const char*)0, (const char*)0, 3, PR_FALSE, 0},
               {(const char*)0, "abc", 3, PR_FALSE, 0},
               {"abc", (const char*)0, 3, PR_FALSE, 0},
               {"abcdefg""", 3, PR_FALSE, 0},
               {"""aeiou", 3, PR_FALSE, 0},
               {"abcdefg""ae", 0, PR_FALSE, 0},
               {"abcdefg""ae", 1, PR_TRUE, 0},
               {"abcdefg""ae", 4, PR_TRUE, 0},
               {"abcdefg""ae", 5, PR_TRUE, 0},
               {"abcdefg""ae", 6, PR_TRUE, 0},
               {"abcdefg""ei", 4, PR_FALSE, 0},
               {"abcdefg""io", 10, PR_FALSE, 0},
               {"abcdefg""bcd", 2, PR_TRUE, 1},
               {"abcdefg""cbd", 2, PR_TRUE, 1},
               {"abcdefg""dbc", 2, PR_TRUE, 1},
               {"abcdefg""ghi", 6, PR_FALSE, 0},
               {"abcdefg""ghi", 7, PR_TRUE, 6},
               {"abcdefg""AE", 9, PR_FALSE, 0},
               {"abcdefg""EI", 9, PR_FALSE, 0},
               {"abcdefg""IO", 9, PR_FALSE, 0},
               {"abcdefg""BCD", 9, PR_FALSE, 0},
               {"abcdefg""CBD", 9, PR_FALSE, 0},
               {"abcdefg""DBC", 9, PR_FALSE, 0},
               {"abcdefg""GHI", 9, PR_FALSE, 0},
               {"abcdefgabcdefg""ae", 10, PR_TRUE, 0},
               {"abcdefgabcdefg""ei", 10, PR_TRUE, 4},
               {"abcdefgabcdefg""io", 10, PR_FALSE, 0},
               {"abcdefgabcdefg""bcd", 10, PR_TRUE, 1},
               {"abcdefgabcdefg""cbd", 10, PR_TRUE, 1},
               {"abcdefgabcdefg""dbc", 10, PR_TRUE, 1},
               {"abcdefgabcdefg""ghi", 10, PR_TRUE, 6},
               {"abcdefgabcdefg""AE", 10, PR_FALSE, 0},
               {"abcdefgabcdefg""EI", 10, PR_FALSE, 0},
               {"abcdefgabcdefg""IO", 10, PR_FALSE, 0},
               {"abcdefgabcdefg""BCD", 10, PR_FALSE, 0},
               {"abcdefgabcdefg""CBD", 10, PR_FALSE, 0},
               {"abcdefgabcdefg""DBC", 10, PR_FALSE, 0},
               {"abcdefgabcdefg""GHI", 10, PR_FALSE, 0}};

  int i;

  printf("Test 021 (PL_strnpbrk) ...");
  fflush(stdout);

  for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
    char* rv = PL_strnpbrk(array[i].str, array[i].chrs, array[i].max);

    if (PR_FALSE == array[i].ret) {
      if ((char*)0 != rv) {
        printf("FAIL %d: %s,%s/%lu -> %.32s, not null\n", i,
               array[i].str ? array[i].str : "(null)",
               array[i].chrs ? array[i].chrs : "(null)", array[i].max, rv);
        return PR_FALSE;
      }
    } else {
      if ((char*)0 == rv) {
        printf("FAIL %d: %s,%s/%lu -> null, not +%lu\n", i,
               array[i].str ? array[i].str : "(null)",
               array[i].chrs ? array[i].chrs : "(null)", array[i].max,
               array[i].off);
        return PR_FALSE;
      }

      if (&array[i].str[array[i].off] != rv) {
        printf("FAIL %d: %s,%s/%lu -> 0x%x, not 0x%x+%lu\n", i,
               array[i].str ? array[i].str : "(null)",
               array[i].chrs ? array[i].chrs : "(null)", array[i].max, rv,
               array[i].str, array[i].off);
        return PR_FALSE;
      }
    }
  }

  printf("PASS\n");
  return PR_TRUE;
}

/* PL_strnprbrk */
PRBool test_022(void) {
  static struct {
    const char* str;
    const char* chrs;
    PRUint32 max;
    PRBool ret;
    PRUint32 off;
  } array[] = {{(const char*)0, (const char*)0, 3, PR_FALSE, 0},
               {(const char*)0, "abc", 3, PR_FALSE, 0},
               {"abc", (const char*)0, 3, PR_FALSE, 0},
               {"abcdefg""", 3, PR_FALSE, 0},
               {"""aeiou", 3, PR_FALSE, 0},
               {"abcdefg""ae", 0, PR_FALSE, 0},
               {"abcdefg""ae", 1, PR_TRUE, 0},
               {"abcdefg""ae", 4, PR_TRUE, 0},
               {"abcdefg""ae", 5, PR_TRUE, 4},
               {"abcdefg""ae", 6, PR_TRUE, 4},
               {"abcdefg""ei", 4, PR_FALSE, 0},
               {"abcdefg""io", 10, PR_FALSE, 0},
               {"abcdefg""bcd", 2, PR_TRUE, 1},
               {"abcdefg""cbd", 2, PR_TRUE, 1},
               {"abcdefg""dbc", 2, PR_TRUE, 1},
               {"abcdefg""bcd", 3, PR_TRUE, 2},
               {"abcdefg""cbd", 3, PR_TRUE, 2},
               {"abcdefg""dbc", 3, PR_TRUE, 2},
               {"abcdefg""bcd", 5, PR_TRUE, 3},
               {"abcdefg""cbd", 5, PR_TRUE, 3},
               {"abcdefg""dbc", 5, PR_TRUE, 3},
               {"abcdefg""bcd", 15, PR_TRUE, 3},
               {"abcdefg""cbd", 15, PR_TRUE, 3},
               {"abcdefg""dbc", 15, PR_TRUE, 3},
               {"abcdefg""ghi", 6, PR_FALSE, 0},
               {"abcdefg""ghi", 7, PR_TRUE, 6},
               {"abcdefg""AE", 9, PR_FALSE, 0},
               {"abcdefg""EI", 9, PR_FALSE, 0},
               {"abcdefg""IO", 9, PR_FALSE, 0},
               {"abcdefg""BCD", 9, PR_FALSE, 0},
               {"abcdefg""CBD", 9, PR_FALSE, 0},
               {"abcdefg""DBC", 9, PR_FALSE, 0},
               {"abcdefg""GHI", 9, PR_FALSE, 0},
               {"abcdefgabcdefg""ae", 10, PR_TRUE, 7},
               {"abcdefgabcdefg""ei", 10, PR_TRUE, 4},
               {"abcdefgabcdefg""io", 10, PR_FALSE, 0},
               {"abcdefgabcdefg""bcd", 10, PR_TRUE, 9},
               {"abcdefgabcdefg""cbd", 10, PR_TRUE, 9},
               {"abcdefgabcdefg""dbc", 10, PR_TRUE, 9},
               {"abcdefgabcdefg""ghi", 10, PR_TRUE, 6},
               {"abcdefgabcdefg""AE", 10, PR_FALSE, 0},
               {"abcdefgabcdefg""EI", 10, PR_FALSE, 0},
               {"abcdefgabcdefg""IO", 10, PR_FALSE, 0},
               {"abcdefgabcdefg""BCD", 10, PR_FALSE, 0},
               {"abcdefgabcdefg""CBD", 10, PR_FALSE, 0},
               {"abcdefgabcdefg""DBC", 10, PR_FALSE, 0},
               {"abcdefgabcdefg""GHI", 10, PR_FALSE, 0}};

  int i;

  printf("Test 022 (PL_strnprbrk) ...");
  fflush(stdout);

  for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
    char* rv = PL_strnprbrk(array[i].str, array[i].chrs, array[i].max);

    if (PR_FALSE == array[i].ret) {
      if ((char*)0 != rv) {
        printf("FAIL %d: %s,%s/%lu -> %.32s, not null\n", i,
               array[i].str ? array[i].str : "(null)",
               array[i].chrs ? array[i].chrs : "(null)", array[i].max, rv);
        return PR_FALSE;
      }
    } else {
      if ((char*)0 == rv) {
        printf("FAIL %d: %s,%s/%lu -> null, not +%lu\n", i,
               array[i].str ? array[i].str : "(null)",
               array[i].chrs ? array[i].chrs : "(null)", array[i].max,
               array[i].off);
        return PR_FALSE;
      }

      if (&array[i].str[array[i].off] != rv) {
        printf("FAIL %d: %s,%s/%lu -> 0x%x, not 0x%x+%lu\n", i,
               array[i].str ? array[i].str : "(null)",
               array[i].chrs ? array[i].chrs : "(null)", array[i].max, rv,
               array[i].str, array[i].off);
        return PR_FALSE;
      }
    }
  }

  printf("PASS\n");
  return PR_TRUE;
}

/* PL_strstr */
PRBool test_023(void) {
  static struct {
    const char* str;
    const char* sub;
    PRBool ret;
    PRUint32 off;
  } array[] = {{(const char*)0, (const char*)0, PR_FALSE, 0},
               {(const char*)0, "blah", PR_FALSE, 0},
               {"blah-de-blah", (const char*)0, PR_FALSE, 0},
               {"blah-de-blah""blah", PR_TRUE, 0},
               {"""blah", PR_FALSE, 0},
               {"blah-de-blah""", PR_FALSE, 0},
               {"abcdefg""a", PR_TRUE, 0},
               {"abcdefg""c", PR_TRUE, 2},
               {"abcdefg""e", PR_TRUE, 4},
               {"abcdefg""g", PR_TRUE, 6},
               {"abcdefg""i", PR_FALSE, 0},
               {"abcdefg""ab", PR_TRUE, 0},
               {"abcdefg""cd", PR_TRUE, 2},
               {"abcdefg""ef", PR_TRUE, 4},
               {"abcdefg""gh", PR_FALSE, 0},
               {"abcdabc""bc", PR_TRUE, 1},
               {"abcdefg""abcdefg", PR_TRUE, 0},
               {"abcdefgabcdefg""a", PR_TRUE, 0},
               {"abcdefgabcdefg""c", PR_TRUE, 2},
               {"abcdefgabcdefg""e", PR_TRUE, 4},
               {"abcdefgabcdefg""g", PR_TRUE, 6},
               {"abcdefgabcdefg""i", PR_FALSE, 0},
               {"abcdefgabcdefg""ab", PR_TRUE, 0},
               {"abcdefgabcdefg""cd", PR_TRUE, 2},
               {"abcdefgabcdefg""ef", PR_TRUE, 4},
               {"abcdefgabcdefg""gh", PR_FALSE, 0},
               {"abcdabcabcdabc""bc", PR_TRUE, 1},
               {"abcdefgabcdefg""abcdefg", PR_TRUE, 0},
               {"ABCDEFG""a", PR_FALSE, 0},
               {"ABCDEFG""c", PR_FALSE, 0},
               {"ABCDEFG""e", PR_FALSE, 0},
               {"ABCDEFG""g", PR_FALSE, 0},
               {"ABCDEFG""i", PR_FALSE, 0},
               {"ABCDEFG""ab", PR_FALSE, 0},
               {"ABCDEFG""cd", PR_FALSE, 0},
               {"ABCDEFG""ef", PR_FALSE, 0},
               {"ABCDEFG""gh", PR_FALSE, 0},
               {"ABCDABC""bc", PR_FALSE, 0},
               {"ABCDEFG""abcdefg", PR_FALSE, 0},
               {"ABCDEFGABCDEFG""a", PR_FALSE, 0},
               {"ABCDEFGABCDEFG""c", PR_FALSE, 0},
               {"ABCDEFGABCDEFG""e", PR_FALSE, 0},
               {"ABCDEFGABCDEFG""g", PR_FALSE, 0},
               {"ABCDEFGABCDEFG""i", PR_FALSE, 0},
               {"ABCDEFGABCDEFG""ab", PR_FALSE, 0},
               {"ABCDEFGABCDEFG""cd", PR_FALSE, 0},
               {"ABCDEFGABCDEFG""ef", PR_FALSE, 0},
               {"ABCDEFGABCDEFG""gh", PR_FALSE, 0},
               {"ABCDABCABCDABC""bc", PR_FALSE, 0},
               {"ABCDEFGABCDEFG""abcdefg", PR_FALSE, 0}};

  int i;

  printf("Test 023 (PL_strstr) ...");
  fflush(stdout);

  for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
    char* rv = PL_strstr(array[i].str, array[i].sub);

    if (PR_FALSE == array[i].ret) {
      if ((char*)0 != rv) {
        printf("FAIL %d: %s,%s -> %.32s, not null\n", i,
               array[i].str ? array[i].str : "(null)",
               array[i].sub ? array[i].sub : "(null)", rv);
        return PR_FALSE;
      }
    } else {
      if ((char*)0 == rv) {
        printf("FAIL %d: %s,%s -> null, not 0x%x+%lu\n", i,
               array[i].str ? array[i].str : "(null)",
               array[i].sub ? array[i].sub : "(null)", array[i].str,
               array[i].off);
        return PR_FALSE;
      }

      if (&array[i].str[array[i].off] != rv) {
        printf("FAIL %d: %s,%s -> 0x%x, not 0x%x+%lu\n", i,
               array[i].str ? array[i].str : "(null)",
               array[i].sub ? array[i].sub : "(null)", rv, array[i].str,
               array[i].off);
        return PR_FALSE;
      }
    }
  }

  printf("PASS\n");
  return PR_TRUE;
}

/* PL_strrstr */
PRBool test_024(void) {
  static struct {
    const char* str;
    const char* sub;
    PRBool ret;
    PRUint32 off;
  } array[] = {{(const char*)0, (const char*)0, PR_FALSE, 0},
               {(const char*)0, "blah", PR_FALSE, 0},
               {"blah-de-blah", (const char*)0, PR_FALSE, 0},
               {"blah-de-blah""blah", PR_TRUE, 8},
               {"""blah", PR_FALSE, 0},
               {"blah-de-blah""", PR_FALSE, 0},
--> --------------------

--> maximum size reached

--> --------------------

Messung V0.5
C=94 H=95 G=94

¤ Dauer der Verarbeitung: 0.31 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.