~ubuntu-branches/ubuntu/maverick/avr-libc/maverick

« back to all changes in this revision

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

  • Committer: Bazaar Package Importer
  • Author(s): Hakan Ardo
  • Date: 2009-10-31 11:52:10 UTC
  • mfrom: (1.2.2 upstream)
  • mto: This revision was merged to the branch mainline in revision 10.
  • Revision ID: james.westby@ubuntu.com-20091031115210-crjd42sn6ezrj52c
* New upstream relese (closes: #544030)
* Added lintian overrides (closes: #553265)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* $Id: memchr.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 *s, int c, size_t len, int expect)
11
 
{
12
 
    char t[320];
13
 
    char *p;
14
 
    
15
 
    if (len > sizeof(t))
16
 
        exit (1);
17
 
    memcpy_P (t, s, len);
18
 
    p = memchr (t, c, len);
19
 
    if ((expect == -1 && !p) || (t + expect == p))
20
 
        return;
21
 
#ifndef __AVR__
22
 
    printf ("\nLine %d: expect: %d, result: %d\n",
23
 
            line, expect, (p ? p-t : -1));
24
 
    if (line > 255) line = 255;                 /* common OS restriction */
25
 
#endif
26
 
    exit (line);
27
 
}
28
 
 
29
 
#define CHECK(s, c, len, expect)        do {    \
30
 
    Check (__LINE__, PSTR(s), c, len, expect);  \
31
 
} while (0)
32
 
 
33
 
int main ()
34
 
{
35
 
    /* Not found        */
36
 
    CHECK ("", 0, 0, -1);
37
 
    CHECK ("", 255, 0, -1);
38
 
    CHECK ("ABCDEF", 'a', 6, -1);
39
 
    
40
 
    /* Found    */
41
 
    CHECK ("\000", 0, 1, 0);
42
 
    CHECK ("\001", 1, 1, 0);
43
 
    CHECK ("\377", 255, 1, 0);
44
 
    CHECK ("987654321", '7', 9, 2);
45
 
 
46
 
    /* '\0' has't a special sense       */
47
 
    CHECK ("12345", 0, 6, 5);
48
 
    CHECK (".\000.", 0, 3, 1);
49
 
    CHECK ("\000a\000b", 'b', 4, 3);
50
 
 
51
 
    /* First occurance  */
52
 
    CHECK ("abcdabcd", 'b', 8, 1);
53
 
    CHECK ("........", '.', 8, 0);
54
 
    
55
 
    /* 'c' converted to a char  */
56
 
    CHECK ("ABCDEF", 'A'+0x100, 6, 0);
57
 
    CHECK ("ABCDE\377", ~0, 6, 5);
58
 
    
59
 
    /* Very long string */
60
 
    CHECK ("................................................................"
61
 
           "................................................................"
62
 
           "................................................................"
63
 
           "................................................................"
64
 
           "*...............................................................",
65
 
           '*', 320, 256);
66
 
 
67
 
    return 0;
68
 
}