1 #include <stic.h>
2
3 #include <stdlib.h> /* free() */
4 #include <string.h> /* memset() */
5
6 #include "../../src/engine/parsing.h"
7 #include "../../src/engine/var.h"
8
9 #include "asserts.h"
10
TEST(negative_number_ok)11 TEST(negative_number_ok)
12 {
13 ASSERT_OK("-1", "-1");
14 }
15
TEST(multiple_negations_ok)16 TEST(multiple_negations_ok)
17 {
18 ASSERT_OK("--1", "1");
19 ASSERT_OK("---1", "-1");
20 ASSERT_OK("----1", "1");
21 ASSERT_OK("-----1", "-1");
22 }
23
TEST(spaces_betwen_signs_ok)24 TEST(spaces_betwen_signs_ok)
25 {
26 ASSERT_OK("--- 1", "-1");
27 ASSERT_OK("- - + 1", "1");
28 ASSERT_OK(" ++ + 1", "1");
29 }
30
TEST(zero_ok)31 TEST(zero_ok)
32 {
33 ASSERT_OK("0", "0");
34 ASSERT_OK("-0", "0");
35 ASSERT_OK("+0", "0");
36 }
37
TEST(multiple_zeroes_ok)38 TEST(multiple_zeroes_ok)
39 {
40 ASSERT_OK("00000", "0");
41 ASSERT_OK("-00000", "0");
42 ASSERT_OK("+00000", "0");
43 }
44
TEST(positive_number_ok)45 TEST(positive_number_ok)
46 {
47 ASSERT_OK("12345", "12345");
48 ASSERT_OK("+12", "12");
49 ASSERT_OK("++12", "12");
50 ASSERT_OK("+++12", "12");
51 }
52
TEST(leading_zeroes_ok)53 TEST(leading_zeroes_ok)
54 {
55 ASSERT_OK("0123456", "123456");
56 }
57
TEST(single_signs_fail)58 TEST(single_signs_fail)
59 {
60 ASSERT_FAIL("-", PE_INVALID_EXPRESSION);
61 ASSERT_FAIL("--", PE_INVALID_EXPRESSION);
62 ASSERT_FAIL("+", PE_INVALID_EXPRESSION);
63 ASSERT_FAIL("++", PE_INVALID_EXPRESSION);
64 ASSERT_FAIL("- +", PE_INVALID_EXPRESSION);
65 ASSERT_FAIL("+ -", PE_INVALID_EXPRESSION);
66 }
67
TEST(string_is_converted_for_signs)68 TEST(string_is_converted_for_signs)
69 {
70 ASSERT_OK("-'a'", "0");
71 ASSERT_OK("+'a'", "0");
72 ASSERT_OK("-'1'", "-1");
73 ASSERT_OK("-'0'", "0");
74 ASSERT_OK("-''", "0");
75 ASSERT_OK("-'-1'", "1");
76 ASSERT_OK("-'--1'", "0");
77 ASSERT_OK("+'10'", "10");
78 ASSERT_OK("+'-100'", "-100");
79 }
80
TEST(extremely_long_number)81 TEST(extremely_long_number)
82 {
83 var_t res_var = var_false();
84
85 char zeroes[8192];
86 memset(zeroes, '0', sizeof(zeroes) - 1U);
87 zeroes[sizeof(zeroes) - 1U] = '\0';
88
89 assert_int_equal(PE_INTERNAL, parse(zeroes, 0, &res_var));
90 var_free(res_var);
91 }
92
93 /* vim: set tabstop=2 softtabstop=2 shiftwidth=2 noexpandtab cinoptions-=(0 : */
94 /* vim: set cinoptions+=t0 filetype=c : */
95