~ubuntu-branches/ubuntu/raring/avr-libc/raring-proposed

« back to all changes in this revision

Viewing changes to tests/simulate/string/strstr.c

  • Committer: Bazaar Package Importer
  • Author(s): Hakan Ardo
  • Date: 2008-08-10 09:59:16 UTC
  • mfrom: (1.1.7 upstream) (4.1.1 lenny)
  • Revision ID: james.westby@ubuntu.com-20080810095916-wwyigh3vt0e9s7ud
Tags: 1:1.6.2.cvs20080610-2
Added build-depends on texlive-extra-utils (closes: #493454)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* $Id: strstr.c,v 1.1 2007/03/01 13:10:55 dmix Exp $   */
 
2
 
 
3
#ifndef __AVR__
 
4
# include <stdio.h>
 
5
#endif
 
6
#include <stdlib.h>
 
7
#include <string.h>
 
8
#include "progmem.h"
 
9
 
 
10
void Check (int line, const char *s1, const char *s2, int expect)
 
11
{
 
12
    char t1[200];
 
13
    char t2[200];
 
14
    char *p;
 
15
 
 
16
    if (   strlen_P(s1) > sizeof(t1) - 1
 
17
        || strlen_P(s2) > sizeof(t2) - 1)
 
18
      exit (1);
 
19
    strcpy_P (t1, s1);
 
20
    strcpy_P (t2, s2);
 
21
    p = strstr (t1, t2);
 
22
    if ((!p && expect == -1)  || (p == t1 + expect))
 
23
        return;
 
24
#if     !defined(__AVR__)
 
25
    printf ("\nLine %d: expect: %d, result: %d\n",
 
26
            line, expect, (p ? p - t1 : -1));
 
27
    if (line > 255) line = 255;
 
28
#elif   defined(DEBUG)
 
29
    exit (p ? p - t1 : -1);
 
30
#endif
 
31
    exit (line);
 
32
}
 
33
 
 
34
#define CHECK(s1, s2, expect)   do {                    \
 
35
    Check (__LINE__, PSTR(s1), PSTR(s2), expect);       \
 
36
} while (0)
 
37
 
 
38
int main ()
 
39
{
 
40
    /* Empty 'needle'.  */
 
41
    CHECK ("", "", 0);
 
42
    CHECK ("12345", "", 0);
 
43
 
 
44
    /* bug #19135       */
 
45
    CHECK ("ababac", "abac", 2);
 
46
 
 
47
    /* 'needle' of 1 byte long  */
 
48
    CHECK ("", "a", -1);
 
49
    CHECK ("b", "a", -1);
 
50
    CHECK ("a", "a", 0);
 
51
    CHECK ("abcbef", "a", 0);
 
52
    CHECK (".a", "a", 1);
 
53
    CHECK (".a.", "a", 1);
 
54
    CHECK ("ABCDEFGH", "H", 7);
 
55
    
 
56
    /* 'needle' of 2 bytes long */
 
57
    CHECK ("", "12", -1);
 
58
    CHECK ("13", "12", -1);
 
59
    CHECK ("32", "12", -1);
 
60
    CHECK ("12", "12", 0);
 
61
    CHECK ("123", "12", 0);
 
62
    CHECK ("012", "12", 1);
 
63
    CHECK ("01200", "12", 1);
 
64
    
 
65
    /* partially mathing        */
 
66
    CHECK ("a_ab_abc_abcd_abcde", "abcdef", -1);
 
67
    CHECK ("a_ab_abc_abcd_abcde_abcdef", "abcdef", 20);
 
68
    CHECK ("aababcabcdabcde", "abcdef", -1);
 
69
    CHECK ("aababcabcdabcdeabcdef", "abcdef", 15);
 
70
    
 
71
    /* repeated chars   */
 
72
    CHECK ("abaabaaabaaaab", "aaaaab", -1);
 
73
    CHECK ("abaabaaabaaaabaaaaab", "aaaaab", 14);
 
74
    
 
75
    /* A first match is returned.       */
 
76
    CHECK ("_foo_foo", "foo", 1);
 
77
    
 
78
    /* Case is importent.       */
 
79
    CHECK ("A", "a", -1);
 
80
 
 
81
    return 0;
 
82
}