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

« back to all changes in this revision

Viewing changes to tests/simulate/pmstring/memrchr_P.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: memrchr_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 memrchr() */
 
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 memrchr_P      memrchr
 
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, size_t len, int expect)
 
27
{
 
28
    const char *p;
 
29
    
 
30
    p = memrchr_P (s, c, len);
 
31
 
 
32
    if (expect < 0) {
 
33
        if (p) {
 
34
            PRINTFLN (line, "non zero pointer is returned");
 
35
            EXIT (line);
 
36
        }
 
37
    } else {
 
38
        if (p != s + expect) {
 
39
            PRINTFLN (line, "expect= %d  result= %d", expect, p - s);
 
40
            EXIT (line + 1000);
 
41
        }
 
42
    }
 
43
}
 
44
 
 
45
#define CHECK(s, c, len, expect)        do {    \
 
46
    Check (__LINE__, PSTR(s), c, len, expect);  \
 
47
} while (0)
 
48
 
 
49
int main ()
 
50
{
 
51
    /* Not found        */
 
52
    CHECK ("", 0, 0, -1);
 
53
    CHECK ("", 255, 0, -1);
 
54
    CHECK ("ABCDEF", 'a', 6, -1);
 
55
    
 
56
    /* Found    */
 
57
    CHECK ("\000", 0, 1, 0);
 
58
    CHECK ("\001", 1, 1, 0);
 
59
    CHECK ("\377", 255, 1, 0);
 
60
    CHECK ("987654321", '7', 9, 2);
 
61
 
 
62
    /* '\0' has't a special sense       */
 
63
    CHECK ("12345", 0, 6, 5);
 
64
    CHECK (".\000.", 0, 3, 1);
 
65
    CHECK ("\000a\000b", 'b', 4, 3);
 
66
 
 
67
    /* Last occurance   */
 
68
    CHECK ("abcdabcd", 'b', 8, 5);
 
69
    CHECK ("........", '.', 8, 7);
 
70
    
 
71
    /* 'c' converted to a char  */
 
72
    CHECK ("ABCDEF", 'A'+0x100, 6, 0);
 
73
    CHECK ("ABCDE\377", ~0, 6, 5);
 
74
    
 
75
    /* Very long string */
 
76
    CHECK ("................................................................"
 
77
           "................................................................"
 
78
           "................................................................"
 
79
           "...............................................................*"
 
80
           "................................................................",
 
81
           '*', 320, 255);
 
82
    CHECK ("................................................................"
 
83
           "................................................................"
 
84
           "................................................................"
 
85
           "................................................................"
 
86
           "*...............................................................",
 
87
           '*', 320, 256);
 
88
    CHECK ("................................................................"
 
89
           "................................................................"
 
90
           "................................................................"
 
91
           "................................................................"
 
92
           ".*..............................................................",
 
93
           '*', 320, 257);
 
94
 
 
95
    return 0;
 
96
}