aboutsummaryrefslogtreecommitdiffstats
path: root/tests/test_atoi.c
blob: 196a0812f642e6b9888a70cf5008e13cd9d126de (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include "../libft.h"
#include "test_utils.h"
#include <limits.h>

static void
_s_ft_atoi_null (void)
{
  _s_sink_i = ft_atoi (NULL);
}
static void
_s_libc_atoi_null (void)
{
  _s_sink_i = atoi (NULL);
}

int
main (void)
{
  int i;
  char buf[64];
  char label[64];

  printf ("=== ft_atoi ===\n");

  /* NULL */
  _s_check_both_crash ("atoi NULL", _s_ft_atoi_null, _s_libc_atoi_null);

  /* edge cases */
  _s_check_eq_int ("zero", ft_atoi ("0"), atoi ("0"));
  _s_check_eq_int ("INT_MAX", ft_atoi ("2147483647"), atoi ("2147483647"));
  _s_check_eq_int ("INT_MIN", ft_atoi ("-2147483648"), atoi ("-2147483648"));
  _s_check_eq_int ("negative", ft_atoi ("-42"), atoi ("-42"));
  _s_check_eq_int ("explicit +", ft_atoi ("+42"), atoi ("+42"));
  _s_check_eq_int ("leading spaces", ft_atoi ("   42"), atoi ("   42"));
  _s_check_eq_int ("leading tabs", ft_atoi ("\t\n\v\f\r 42"),
                   atoi ("\t\n\v\f\r 42"));
  _s_check_eq_int ("trailing chars", ft_atoi ("42abc"), atoi ("42abc"));
  _s_check_eq_int ("empty string", ft_atoi (""), atoi (""));
  _s_check_eq_int ("only spaces", ft_atoi ("   "), atoi ("   "));
  _s_check_eq_int ("only sign", ft_atoi ("-"), atoi ("-"));
  _s_check_eq_int ("sign then space", ft_atoi ("- 42"), atoi ("- 42"));
  _s_check_eq_int ("double sign", ft_atoi ("--42"), atoi ("--42"));
  _s_check_eq_int ("space between", ft_atoi ("4 2"), atoi ("4 2"));
  _s_check_eq_int ("leading zeros", ft_atoi ("00042"), atoi ("00042"));

  /* randomized */
  srand (time (NULL));
  for (i = 0; i < 50; i++)
    {
      int v = rand () - RAND_MAX / 2;
      snprintf (buf, sizeof (buf), "%d", v);
      snprintf (label, sizeof (label), "random %s", buf);
      _s_check_eq_int (label, ft_atoi (buf), atoi (buf));
    }

  _s_print_results ();
  return (_s_fail != 0);
}