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

« back to all changes in this revision

Viewing changes to tests/simulate/string/memcmp.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: memcmp.c,v 1.1 2007/02/24 14:20:17 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, size_t len, int expect)
11
 
{
12
 
    char t1[200];
13
 
    char t2[200];
14
 
    int i;
15
 
    if (len > sizeof(t1) || len > sizeof(t2))
16
 
        exit (1);
17
 
    memcpy_P (t1, s1, len ? len : 1);
18
 
    memcpy_P (t2, s2, len ? len : 1);
19
 
    i = memcmp (t1, t2, len);
20
 
    if (i == expect)
21
 
        return;
22
 
#if     !defined(__AVR__)
23
 
    /* Glibc memcmp() returns: -1/0/+1. */
24
 
    if (   (i < 0 && expect < 0)
25
 
        || (i > 0 && expect > 0)
26
 
        || (i == 0 && expect == 0) )
27
 
      return;
28
 
    printf ("\nLine %d: expect: %d, result: %d\n",
29
 
            line, expect, i);
30
 
    if (line > 255) line = 255;
31
 
#elif   defined(DEBUG)
32
 
    exit (i);
33
 
#endif
34
 
    exit (line);
35
 
}
36
 
 
37
 
#define CHECK(s1, s2, len, expect)      do {            \
38
 
    Check (__LINE__, PSTR(s1), PSTR(s2), len, expect);  \
39
 
} while (0)
40
 
 
41
 
int main ()
42
 
{
43
 
    /* len == 0 */
44
 
    CHECK ("", "", 0, 0);
45
 
    CHECK ("A", "A", 0, 0);
46
 
    CHECK ("B", "C", 0, 0);
47
 
 
48
 
    /* len == 1 */
49
 
    CHECK ("\000", "\001", 1, -1);
50
 
    CHECK ("\000", "\377", 1, -255);
51
 
    CHECK ("\001", "\000", 1, 1);
52
 
    CHECK ("\377", "\000", 1, 255);
53
 
 
54
 
    /* Agrs are equal.  */
55
 
    CHECK ("\001", "\001", 1, 0);
56
 
    CHECK ("\001", "\001", 2, 0);
57
 
    CHECK ("1234\377", "1234\377", 1, 0);
58
 
    CHECK ("1234\377+", "1234\377-", 5, 0);
59
 
 
60
 
    /* Args are not equal.      */
61
 
    CHECK ("ABCDEF", "ABCDE\000", 6, 'F');
62
 
    CHECK ("abcde\000", "abcdef", 6, -'f');
63
 
    CHECK ("12345", "12245", 5, 1);
64
 
 
65
 
    /* Case is important.       */
66
 
    CHECK ("xyz", "xYz", 3, 'y'-'Y');
67
 
    CHECK ("QUICK", "qUICK", 5, 'Q'-'q');
68
 
 
69
 
    /* Chars are unsigned       */
70
 
    CHECK ("\200", "\177", 1, 1);
71
 
    CHECK ("\177", "\200", 1, -1);
72
 
    CHECK ("\001", "\377", 1, -254);
73
 
    CHECK ("\377", "\001", 1, 254);
74
 
 
75
 
    /* '\0' is possible in the middle of array  */
76
 
    CHECK ("\000ABC\000D", "\000ABC\000C", 5, 0);
77
 
    CHECK ("\000ABC\000D", "\000ABC\000C", 6, 1);
78
 
 
79
 
    return 0;
80
 
}