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

« back to all changes in this revision

Viewing changes to tests/simulate/pmstring/strcspn_P.c

  • Committer: Bazaar Package Importer
  • Author(s): Hakan Ardo
  • Date: 2008-08-10 09:59:16 UTC
  • mfrom: (1.2.1 upstream) (8 intrepid)
  • mto: (4.1.7 sid)
  • mto: This revision was merged to the branch mainline in revision 9.
  • Revision ID: james.westby@ubuntu.com-20080810095916-7ku06pjsfia3hz16
Added build-depends on texlive-extra-utils (closes: #493454)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* $Id: strcspn_P.c,v 1.1 2007/03/01 13:06:02 dmix Exp $        */
 
2
 
 
3
#ifndef __AVR__
 
4
# include <stdio.h>
 
5
# define strcspn_P  strcspn
 
6
#endif
 
7
#include <stdlib.h>
 
8
#include <string.h>
 
9
#include "progmem.h"
 
10
 
 
11
void Check (int line, const char *s1, const char *s2, size_t expect)
 
12
{
 
13
    char t1[300];
 
14
    size_t n;
 
15
 
 
16
    if (strlen_P(s1) > sizeof(t1) - 1)
 
17
        exit (1);
 
18
    strcpy_P (t1, s1);
 
19
    n = strcspn_P (t1, s2);
 
20
    if (n == expect)
 
21
        return;
 
22
#if   !defined(__AVR__)
 
23
    printf ("\nLine %d: expect: %d, result: %d\n",
 
24
            line, expect, n);
 
25
    if (line > 255) line = 255;
 
26
#elif   defined(DEBUG)
 
27
    exit (n ? n : ~0);
 
28
#endif
 
29
    exit (line);
 
30
}
 
31
 
 
32
#define CHECK(s1, s2, expect)   do {                    \
 
33
    Check (__LINE__, PSTR(s1), PSTR(s2), expect);       \
 
34
} while (0)
 
35
 
 
36
int main ()
 
37
{
 
38
    /* Empty string.    */
 
39
    CHECK ("", "", 0);
 
40
    CHECK ("", "A", 0);
 
41
    CHECK ("", "abcdef", 0);
 
42
    CHECK ("A", "", 1);
 
43
    CHECK ("0123456789", "", 10);
 
44
 
 
45
    /* accept[] length is 1.    */
 
46
    CHECK ("B", "A", 1);
 
47
    CHECK ("abcdefghij", "A", 10);
 
48
    CHECK ("A", "A", 0);
 
49
    CHECK ("AAAAAAAA", "A", 0);
 
50
 
 
51
    /* accept[] length is 2.    */
 
52
    CHECK ("c", "ab", 1);
 
53
    CHECK ("cd", "ab", 2);
 
54
    CHECK ("cde", "ab", 3);
 
55
    CHECK ("a", "ab", 0);
 
56
    CHECK (".a", "ab", 1);
 
57
    CHECK ("..a", "ab", 2);
 
58
    CHECK ("...a", "ab", 3);
 
59
    CHECK ("b", "ab", 0);
 
60
    CHECK (".b", "ab", 1);
 
61
    CHECK ("..b", "ab", 2);
 
62
    CHECK ("...b", "ab", 3);
 
63
    CHECK ("0101010101", "23", 10);
 
64
    CHECK ("0123456789AB", ".A", 10);
 
65
    
 
66
    /* accept[] length > 2      */
 
67
    CHECK ("the quick brown fox", "QWERTYUIOPASDFGHJKLZXCVBNM", 19);
 
68
    CHECK ("the quick brown fox ...", ".QWERTYUIOPASDFGHJKLZXCVBNM", 20);
 
69
    CHECK ("the quick brown fox .?", "QWERTYUIOPASDFGHJKLZXCVBNM?", 21);
 
70
    
 
71
    /* non ASCII chars  */
 
72
    CHECK ("\001", "\001", 0);
 
73
    CHECK ("\377", "\377", 0);
 
74
    CHECK ("\002\376", "\001\377", 2);
 
75
 
 
76
    /* Result approx. 256       */
 
77
    CHECK ("................................................................"
 
78
           "................................................................"
 
79
           "................................................................"
 
80
           "...............................................................",
 
81
           "*", 255);
 
82
    CHECK ("................................................................"
 
83
           "................................................................"
 
84
           "................................................................"
 
85
           "................................................................",
 
86
           "*", 256);
 
87
    CHECK ("................................................................"
 
88
           "................................................................"
 
89
           "................................................................"
 
90
           "................................................................"
 
91
           ".*", "*", 257);
 
92
 
 
93
    return 0;
 
94
}