OpenCores
URL https://opencores.org/ocsvn/scarts/scarts/trunk

Subversion Repositories scarts

[/] [scarts/] [trunk/] [toolchain/] [scarts-newlib/] [newlib-1.17.0/] [newlib/] [testsuite/] [newlib.search/] [hsearchtest.c] - Blame information for rev 9

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 9 jlechner
/*      $NetBSD: hsearchtest.c,v 1.4 2002/02/21 07:38:15 itojun Exp $   */
2
 
3
/*
4
 * Copyright (c) 2001 Christopher G. Demetriou
5
 * All rights reserved.
6
 *
7
 * Redistribution and use in source and binary forms, with or without
8
 * modification, are permitted provided that the following conditions
9
 * are met:
10
 * 1. Redistributions of source code must retain the above copyright
11
 *    notice, this list of conditions and the following disclaimer.
12
 * 2. Redistributions in binary form must reproduce the above copyright
13
 *    notice, this list of conditions and the following disclaimer in the
14
 *    documentation and/or other materials provided with the distribution.
15
 * 3. The name of the author may not be used to endorse or promote products
16
 *    derived from this software without specific prior written permission.
17
 *
18
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
19
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
20
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21
 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
22
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
23
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
 *
29
 * <<Id: LICENSE_GC,v 1.1 2001/10/01 23:24:05 cgd Exp>>
30
 */
31
 
32
/*
33
 * Test program for hsearch() et al.
34
 */
35
 
36
#include <sys/cdefs.h>
37
#if 0
38
#if !defined(lint)
39
__RCSID("$NetBSD: hsearchtest.c,v 1.4 2002/02/21 07:38:15 itojun Exp $");
40
__COPYRIGHT(
41
"@(#) Copyright (c) 2001 Christopher G. Demetriou.  All rights reserved.\n");
42
#endif /* not lint */
43
#endif
44
 
45
#include <search.h>
46
#include <stdlib.h>
47
#include <stdio.h>
48
#include <string.h>
49
 
50
#define TEST(e) ((e) ? (void)0 : testfail(__FILE__, __LINE__, #e))
51
 
52
static void
53
testfail(const char *file, unsigned long line, const char *expression)
54
{
55
 
56
        fprintf(stderr, "TEST FAILED: %s: file %s, line %ld\n",
57
            expression, file, line);
58
        exit(1);
59
}
60
 
61
int
62
main(int argc, char *argv[])
63
{
64
        ENTRY e, *ep, *ep2;
65
        int created_ok;
66
        char ch[2];
67
        int i;
68
 
69
        created_ok = hcreate(16);
70
        TEST(created_ok);
71
 
72
        /* ch[1] should be constant from here on down. */
73
        ch[1] = '\0';
74
 
75
        /* Basic insertions.  Check enough that there'll be collisions. */
76
        for (i = 0; i < 26; i++) {
77
                ch[0] = 'a' + i;
78
                e.key = strdup(ch);     /* ptr to provided key is kept! */
79
                TEST(e.key != NULL);
80
                e.data = (void *)(long)i;
81
                ep = hsearch(e, ENTER);
82
                TEST(ep != NULL);
83
                TEST(strcmp(ep->key, ch) == 0);
84
                TEST((long)ep->data == i);
85
        }
86
 
87
        /* e.key should be constant from here on down. */
88
        e.key = ch;
89
 
90
        /* Basic lookups. */
91
        for (i = 0; i < 26; i++) {
92
                ch[0] = 'a' + i;
93
                ep = hsearch(e, FIND);
94
                TEST(ep != NULL);
95
                TEST(strcmp(ep->key, ch) == 0);
96
                TEST((long)ep->data == i);
97
        }
98
 
99
        /* Check duplicate entry.  Should _not_ overwrite existing data.  */
100
        ch[0] = 'a';
101
        e.data = (void *)(long)12345;
102
        ep = hsearch(e, FIND);
103
        TEST(ep != NULL);
104
        TEST(strcmp(ep->key, ch) == 0);
105
        TEST((long)ep->data == 0);
106
 
107
        /* Check for something that's not there. */
108
        ch[0] = 'A';
109
        ep = hsearch(e, FIND);
110
        TEST(ep == NULL);
111
 
112
        /* Check two at once. */
113
        ch[0] = 'a';
114
        ep = hsearch(e, FIND);
115
        ch[0] = 'b';
116
        ep2 = hsearch(e, FIND);
117
        TEST(ep != NULL);
118
        TEST(strcmp(ep->key, "a") == 0 && (long)ep->data == 0);
119
        TEST(ep2 != NULL);
120
        TEST(strcmp(ep2->key, "b") == 0 && (long)ep2->data == 1);
121
 
122
        hdestroy();
123
 
124
        exit(0);
125
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.