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