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

« back to all changes in this revision

Viewing changes to tests/simulate/pmstring/strchrnul_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: strchrnul_P.c,v 1.1.2.1 2008/03/20 21:42:30 joerg_wunsch Exp $ */
 
2
 
 
3
#ifndef __AVR__
 
4
# define _GNU_SOURCE    /* to include strchrnul()       */
 
5
# define PRINTFLN(line, fmt, ...)       \
 
6
    printf("\nLine %d: " fmt "\n", line, ##__VA_ARGS__)
 
7
# define EXIT(code)     exit ((code) < 255 ? (code) : 255)
 
8
# define strchrnul_P    strchrnul
 
9
#else
 
10
# if defined(__AVR_ATmega128__)
 
11
  /* ATmega128 has enough RAM for sprintf(), print to 0x2000 in XRAM. */
 
12
#  define PRINTFLN(line, fmt, ...)      \
 
13
    sprintf ((char *)0x2000, "\nLine %d: " fmt "\n", line, ##__VA_ARGS__)
 
14
# else
 
15
   /* small AVR */
 
16
#  define PRINTFLN(args...)
 
17
# endif
 
18
# define EXIT   exit
 
19
#endif
 
20
 
 
21
#include <stdlib.h>
 
22
#include <string.h>
 
23
#include <stdio.h>
 
24
#include "progmem.h"
 
25
 
 
26
void Check (int line, const char *s, int c, int expect)
 
27
{
 
28
    const char *p;
 
29
    
 
30
    p = strchrnul_P (s, c);
 
31
    
 
32
    if (p != s + expect) {
 
33
        PRINTFLN (line, "expect: %d, result: %d", expect, p - s);
 
34
        EXIT (line);
 
35
    }
 
36
}
 
37
 
 
38
#define CHECK(s, c, expect)     do {            \
 
39
    Check (__LINE__, PSTR(s), c, expect);       \
 
40
} while (0)
 
41
 
 
42
int main ()
 
43
{
 
44
    /* Not found        */
 
45
    CHECK ("", 1, 0);
 
46
    CHECK ("", 255, 0);
 
47
    CHECK ("ABCDEF", 'a', 6);
 
48
    
 
49
    /* Found    */
 
50
    CHECK ("\001", 1, 0);
 
51
    CHECK ("\377", 255, 0);
 
52
    CHECK ("987654321", '7', 2);
 
53
 
 
54
    /* '\0' is a part of string */
 
55
    CHECK ("12345", 0, 5);
 
56
    CHECK ("", 0, 0);
 
57
 
 
58
    /* First occurance  */
 
59
    CHECK ("abcdabcd", 'b', 1);
 
60
    
 
61
    /* 'c' converted to a char  */
 
62
    CHECK ("ABCDEF", 'A'+0x100, 0);
 
63
    CHECK ("ABCDE\377", ~0, 5);
 
64
    
 
65
    /* Very long string */
 
66
    CHECK ("................................................................"
 
67
           "................................................................"
 
68
           "................................................................"
 
69
           "...............................................................*"
 
70
           "...............", '*', 255);
 
71
    CHECK ("................................................................"
 
72
           "................................................................"
 
73
           "................................................................"
 
74
           "................................................................"
 
75
           "*..............", '*', 256);
 
76
    CHECK ("................................................................"
 
77
           "................................................................"
 
78
           "................................................................"
 
79
           "................................................................"
 
80
           ".*.............", '*', 257);
 
81
 
 
82
    return 0;
 
83
}