Calculator  Step 4
Functions
test_parse.cpp File Reference
#include <iostream>
#include <istream>
#include <ostream>
#include <sstream>
#include <string>
#include <boost/test/auto_unit_test.hpp>
#include "parse.hpp"

Go to the source code of this file.

Functions

 BOOST_AUTO_TEST_SUITE (parse_test)
 
 BOOST_AUTO_TEST_CASE (test_number)
 
 BOOST_AUTO_TEST_CASE (test_negative)
 
 BOOST_AUTO_TEST_CASE (test_add)
 
 BOOST_AUTO_TEST_CASE (test_subtract)
 
 BOOST_AUTO_TEST_CASE (test_multiply)
 
 BOOST_AUTO_TEST_CASE (test_divide)
 
 BOOST_AUTO_TEST_CASE (test_mix)
 
 BOOST_AUTO_TEST_CASE (test_var)
 
 BOOST_AUTO_TEST_CASE (test_predefined_vars)
 
 BOOST_AUTO_TEST_CASE (test_function)
 
 BOOST_AUTO_TEST_CASE (test_error1)
 
 BOOST_AUTO_TEST_CASE (test_error2)
 
 BOOST_AUTO_TEST_CASE (test_error3)
 
 BOOST_AUTO_TEST_CASE (test_error4)
 
 BOOST_AUTO_TEST_CASE (test_error5)
 
 BOOST_AUTO_TEST_CASE (test_error6)
 
 BOOST_AUTO_TEST_CASE (test_error7)
 
 BOOST_AUTO_TEST_SUITE_END ()
 

Function Documentation

BOOST_AUTO_TEST_CASE ( test_number  )

Definition at line 13 of file test_parse.cpp.

References parse_loop().

14 {
15  std::istringstream in("1\n3.14159\n1.23e45\n45.67e+8\n");
16  std::ostringstream out;
17  parse_loop(in, out);
18  BOOST_CHECK_EQUAL("> 1\n> 3.14159\n> 1.23e+45\n> 4.567e+09\n> ", out.str());
19 }
void parse_loop(std::istream &input, std::ostream &output)
Definition: parse.cpp:338
BOOST_AUTO_TEST_CASE ( test_negative  )

Definition at line 21 of file test_parse.cpp.

References parse_loop().

22 {
23  std::istringstream in("-1\n-3.14159\n-1.23e-45\n-34.56e-7\n");
24  std::ostringstream out;
25  parse_loop(in, out);
26  BOOST_CHECK_EQUAL("> -1\n> -3.14159\n> -1.23e-45\n> -3.456e-06\n> ", out.str());
27 }
void parse_loop(std::istream &input, std::ostream &output)
Definition: parse.cpp:338
BOOST_AUTO_TEST_CASE ( test_add  )

Definition at line 29 of file test_parse.cpp.

References parse_loop().

30 {
31  std::istringstream in("1 + 2\n1 + 2 + 3");
32  std::ostringstream out;
33  parse_loop(in, out);
34  BOOST_CHECK_EQUAL("> 3\n> 6\n> ", out.str());
35 }
void parse_loop(std::istream &input, std::ostream &output)
Definition: parse.cpp:338
BOOST_AUTO_TEST_CASE ( test_subtract  )

Definition at line 37 of file test_parse.cpp.

References parse_loop().

38 {
39  std::istringstream in("1 - 2\n5 - 1 - 2");
40  std::ostringstream out;
41  parse_loop(in, out);
42  BOOST_CHECK_EQUAL("> -1\n> 2\n> ", out.str());
43 }
void parse_loop(std::istream &input, std::ostream &output)
Definition: parse.cpp:338
BOOST_AUTO_TEST_CASE ( test_multiply  )

Definition at line 45 of file test_parse.cpp.

References parse_loop().

46 {
47  std::istringstream in("1 * 2\n5 * 2 * 1.5");
48  std::ostringstream out;
49  parse_loop(in, out);
50  BOOST_CHECK_EQUAL("> 2\n> 15\n> ", out.str());
51 }
void parse_loop(std::istream &input, std::ostream &output)
Definition: parse.cpp:338
BOOST_AUTO_TEST_CASE ( test_divide  )

Definition at line 53 of file test_parse.cpp.

References parse_loop().

54 {
55  std::istringstream in("1 / 2\n10 / 2 / 2");
56  std::ostringstream out;
57  parse_loop(in, out);
58  BOOST_CHECK_EQUAL("> 0.5\n> 2.5\n> ", out.str());
59 }
void parse_loop(std::istream &input, std::ostream &output)
Definition: parse.cpp:338
BOOST_AUTO_TEST_CASE ( test_mix  )

Definition at line 61 of file test_parse.cpp.

References parse_loop().

62 {
63  std::istringstream in(" 1.5 * 2 + 3 / 1.5 - (10 - 3) + 2 * -1");
64  std::ostringstream out;
65  parse_loop(in, out);
66  BOOST_CHECK_EQUAL("> -4\n> ", out.str());
67 }
void parse_loop(std::istream &input, std::ostream &output)
Definition: parse.cpp:338
BOOST_AUTO_TEST_CASE ( test_var  )

Definition at line 69 of file test_parse.cpp.

References parse_loop().

70 {
71  std::istringstream in(" def half = 1 / 2\ndef one=1.0\n one + half");
72  std::ostringstream out;
73  parse_loop(in, out);
74  BOOST_CHECK_EQUAL("> > > 1.5\n> ", out.str());
75 }
void parse_loop(std::istream &input, std::ostream &output)
Definition: parse.cpp:338
BOOST_AUTO_TEST_CASE ( test_predefined_vars  )

Definition at line 77 of file test_parse.cpp.

References parse_loop().

78 {
79  std::istringstream in(" pi - e");
80  std::ostringstream out;
81  parse_loop(in, out);
82  BOOST_CHECK_EQUAL("> 0.423311\n> ", out.str());
83 }
void parse_loop(std::istream &input, std::ostream &output)
Definition: parse.cpp:338
BOOST_AUTO_TEST_CASE ( test_function  )

Definition at line 85 of file test_parse.cpp.

References parse_loop().

86 {
87  std::istringstream in("def times(a, b) = a * b\ntimes(2, 3)\n");
88  std::ostringstream out;
89  parse_loop(in, out);
90  BOOST_CHECK_EQUAL("> > 6\n> ", out.str());
91 }
void parse_loop(std::istream &input, std::ostream &output)
Definition: parse.cpp:338
BOOST_AUTO_TEST_CASE ( test_error1  )

Definition at line 93 of file test_parse.cpp.

References parse_loop().

94 {
95  std::istringstream in("1+++2");
96  std::ostringstream out;
97  parse_loop(in, out);
98  BOOST_CHECK_EQUAL("> syntax error: expected a primary, got +\n> ", out.str());
99 }
void parse_loop(std::istream &input, std::ostream &output)
Definition: parse.cpp:338
BOOST_AUTO_TEST_CASE ( test_error2  )

Definition at line 101 of file test_parse.cpp.

References parse_loop().

102 {
103  std::istringstream in("1..2");
104  std::ostringstream out;
105  parse_loop(in, out);
106  BOOST_CHECK_EQUAL("> syntax error: expected digit after decimal point, got '.'\n> ", out.str());
107 }
void parse_loop(std::istream &input, std::ostream &output)
Definition: parse.cpp:338
BOOST_AUTO_TEST_CASE ( test_error3  )

Definition at line 109 of file test_parse.cpp.

References parse_loop().

110 {
111  std::istringstream in("1 @ 2");
112  std::ostringstream out;
113  parse_loop(in, out);
114  BOOST_CHECK_EQUAL("> syntax error: expected digit, got '@'\n> ", out.str());
115 }
void parse_loop(std::istream &input, std::ostream &output)
Definition: parse.cpp:338
BOOST_AUTO_TEST_CASE ( test_error4  )

Definition at line 117 of file test_parse.cpp.

References parse_loop().

118 {
119  std::istringstream in("(1 + 2");
120  std::ostringstream out;
121  parse_loop(in, out);
122  BOOST_CHECK_EQUAL("> syntax error: expected ')', got end of line\n> ", out.str());
123 }
void parse_loop(std::istream &input, std::ostream &output)
Definition: parse.cpp:338
BOOST_AUTO_TEST_CASE ( test_error5  )

Definition at line 125 of file test_parse.cpp.

References parse_loop().

126 {
127  std::istringstream in("pi(2)");
128  std::ostringstream out;
129  parse_loop(in, out);
130  BOOST_CHECK_EQUAL("> wrong number of arguments in call to pi(), expected 0, got 1\n> ", out.str());
131 }
void parse_loop(std::istream &input, std::ostream &output)
Definition: parse.cpp:338
BOOST_AUTO_TEST_CASE ( test_error6  )

Definition at line 133 of file test_parse.cpp.

References parse_loop().

134 {
135  std::istringstream in("def times(a, b) = a * b\ntimes(2)");
136  std::ostringstream out;
137  parse_loop(in, out);
138  BOOST_CHECK_EQUAL("> > wrong number of arguments in call to times(), expected 2, got 1\n> ", out.str());
139 }
void parse_loop(std::istream &input, std::ostream &output)
Definition: parse.cpp:338
BOOST_AUTO_TEST_CASE ( test_error7  )

Definition at line 141 of file test_parse.cpp.

References parse_loop().

142 {
143  std::istringstream in("def times(a, b) = a * b\ndivide(2, 3)");
144  std::ostringstream out;
145  parse_loop(in, out);
146  BOOST_CHECK_EQUAL("> > unknown function: divide\n> ", out.str());
147 }
void parse_loop(std::istream &input, std::ostream &output)
Definition: parse.cpp:338
BOOST_AUTO_TEST_SUITE ( parse_test  )
BOOST_AUTO_TEST_SUITE_END ( )