1e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET/***************************************************************************
2e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET *                                  _   _ ____  _
3e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET *  Project                     ___| | | |  _ \| |
4e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET *                             / __| | | | |_) | |
5e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET *                            | (__| |_| |  _ <| |___
6e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET *                             \___|\___/|_| \_\_____|
7e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET *
88f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
9e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET *
10e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * This software is licensed as described in the file COPYING, which
11e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * you should have received as part of this distribution. The terms
128f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo * are also available at https://curl.haxx.se/docs/copyright.html.
13e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET *
14e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * You may opt to use, copy, modify, merge, publish, distribute and/or sell
15e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * copies of the Software, and permit persons to whom the Software is
16e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * furnished to do so, under the terms of the COPYING file.
17e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET *
18e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
19e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * KIND, either express or implied.
20e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET *
21e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET ***************************************************************************/
22e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#include "curlcheck.h"
23e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET
24e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define ENABLE_CURLX_PRINTF
25e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#include "curlx.h"
26e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET
27e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#include "hash.h"
28e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET
29e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#include "memdebug.h" /* LAST include file */
30e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET
318f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymostatic struct curl_hash hash_static;
328f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo
338f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymostatic void mydtor(void *p)
34e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET{
35cee0338be80bb81b15101686d6f60864455f1e6eElliott Hughes  int *ptr = (int *)p;
368f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo  free(ptr);
37e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET}
38e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET
398f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymostatic CURLcode unit_setup(void)
40e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET{
418f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo  return Curl_hash_init(&hash_static, 7, Curl_hash_str,
428f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo                        Curl_str_key_compare, mydtor);
43e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET}
44e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET
458f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymostatic void unit_stop(void)
46e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET{
478f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo  Curl_hash_destroy(&hash_static);
48e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET}
49e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET
50e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNETUNITTEST_START
51e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  int *value;
52e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  int *value2;
538f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo  int *nodep;
54e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  size_t klen = sizeof(int);
55e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET
56e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  int key = 20;
57e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  int key2 = 25;
58e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET
59e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET
60e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  value = malloc(sizeof(int));
618f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo  abort_unless(value != NULL, "Out of memory");
62e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  *value = 199;
638f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo  nodep = Curl_hash_add(&hash_static, &key, klen, value);
648f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo  if(!nodep)
658f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo    free(value);
668f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo  abort_unless(nodep, "insertion into hash failed");
67e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  Curl_hash_clean(&hash_static);
68e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET
69e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  /* Attempt to add another key/value pair */
708f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo  value2 = malloc(sizeof(int));
718f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo  abort_unless(value2 != NULL, "Out of memory");
728f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo  *value2 = 204;
738f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo  nodep = Curl_hash_add(&hash_static, &key2, klen, value2);
748f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo  if(!nodep)
758f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo    free(value2);
768f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo  abort_unless(nodep, "insertion into hash failed");
77e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET
78e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNETUNITTEST_STOP
79