[med-svn] [libgtextutils] 35/83: Added Tuple-Parser unit-tester.
Charles Plessy
plessy at moszumanska.debian.org
Wed Jan 8 13:37:27 UTC 2014
This is an automated email from the git hooks/post-receive script.
plessy pushed a commit to branch debian/unstable
in repository libgtextutils.
commit abe3d35edfeab2b39321918243a4ba1030d5fda7
Author: A. Gordon <gordon at cshl.edu>
Date: Mon Apr 6 00:23:50 2009 -0400
Added Tuple-Parser unit-tester.
---
tests/Makefile.am | 2 +
tests/test_tuple_parser.cpp | 163 ++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 165 insertions(+)
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 772e623..efeb0e3 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -20,6 +20,7 @@ check_PROGRAMS = test_container_join \
test_fd_outbuf \
test_fd_inbuf \
test_in_out_buf \
+ test_tuple_parser \
test_pipe_fitter
TESTS = $(check_PROGRAMS)
@@ -36,3 +37,4 @@ test_fd_outbuf_SOURCES = test_fd_outbuf.cpp
test_fd_inbuf_SOURCES = test_fd_inbuf.cpp
test_in_out_buf_SOURCES = test_in_out_buf.cpp
test_pipe_fitter_SOURCES = test_pipe_fitter.c
+test_tuple_parser_SOURCES = test_tuple_parser.cpp
diff --git a/tests/test_tuple_parser.cpp b/tests/test_tuple_parser.cpp
new file mode 100644
index 0000000..3d0525c
--- /dev/null
+++ b/tests/test_tuple_parser.cpp
@@ -0,0 +1,163 @@
+#include <err.h>
+
+#include <cmath>
+#include <limits>
+#include <iostream>
+#include <sstream>
+#include <string>
+#include <utility>
+
+#include <tr1/tuple>
+#include <tr1/type_traits>
+
+#include "gtextutils/tuple_parser.h"
+#include "tests_assertion.h"
+
+using namespace std;
+using namespace std::tr1;
+
+
+// Helper function to safely compare doubles
+bool doubles_are_equal ( double a, double b )
+{
+ return std::abs(a-b) <= numeric_limits<double>::epsilon() ;
+}
+
+/*
+ Test most basic TupleParser usage.
+
+ Parser expects three values: int, string, double.
+
+ The int is expected to be on column 4.
+ The string is expected on column 3,
+ The double is expected on column 1.
+
+ After parsing, validate extracted values.
+*/
+void test_parser1()
+{
+ Tuple_Parser<int,std::string,double> parser(4,3,1);
+
+ istringstream is ( "3.14 DUMMY HELLOWORLD 42" ) ;
+
+ is >> parser ;
+
+ int a = get<0>(parser);
+ ASSERT ( a == 42 ) ;
+
+ std::string b = get<1>(parser);
+ ASSERT ( b == "HELLOWORLD" ) ;
+
+ double c = get<2>(parser);
+ ASSERT ( doubles_are_equal (c, 3.14) ) ;
+}
+
+/*
+ Test column collusion detection.
+
+ Parser expects three values: int, string, double.
+
+ Two fields use the same column number.
+ An exception should be thrown.
+*/
+void test_parser_column_collusion()
+{
+ try {
+ Tuple_Parser<int,std::string,double> parser(1,3,1);
+
+ //We should not get here
+ ASSERT ( ! "Column collusion (1) not detected." ) ;
+ } catch ( std::invalid_argument &ex ) {
+ //fine, exception was thrown. we can continue
+ }
+}
+
+/*
+ Test max. column number overflow
+*/
+void test_parser_column_number_overflow()
+{
+ try {
+ Tuple_Parser<int,std::string,double> parser(1,20000,1);
+
+ //We should not get here
+ ASSERT ( ! "Max. Column number overflow not detected." ) ;
+ } catch ( std::length_error &ex ) {
+ //fine, exception was thrown. we can continue
+ }
+}
+
+
+/*
+ Test parsing error
+
+ Parser expects three values: int, string, double.
+
+ The int is expected to be on column 4.
+ The string is expected on column 3,
+ The double is expected on column 1.
+
+ The 4th column doesn't contain a valid integer, and should fail.
+*/
+void test_parser_parsing_error()
+{
+ Tuple_Parser<int,std::string,double> parser(4,3,1);
+
+ istringstream is ( "3.14 DUMMY HELLOWORLD i42" ) ;
+
+ try {
+ is >> parser ;
+
+ //We should not get here
+ ASSERT ( ! "Invalid input not detected." ) ;
+ } catch ( tuple_parser_parsing_error &ex ) {
+ //exception was thrown. valid reported errornous columns
+ ASSERT ( ex.column() == 4 ) ;
+ }
+}
+
+/*
+ Test premature-end-of-line
+
+ Parser expects three values: int, string, double.
+
+ The int is expected to be on column 4.
+ The string is expected on column 3,
+ The double is expected on column 1.
+
+ The input contains only 2 columns (instead of expected 4)
+*/
+void test_parser_premature_eol()
+{
+ Tuple_Parser<int,std::string,double> parser(4,3,1);
+
+ istringstream is ( "3.14 DUMMY" ) ;
+
+ try {
+ is >> parser ;
+
+ //We should not get here
+ ASSERT ( ! "premature-end-of-line not detected." ) ;
+ } catch ( tuple_parser_premature_end_of_line &ex ) {
+ //exception was thrown. valid reported errornous columns
+ ASSERT ( ex.expected_columns() == 4 ) ;
+
+ ASSERT ( ex.actual_columns() == 2 ) ;
+ }
+}
+
+
+int main()
+{
+ test_parser1();
+
+ test_parser_column_collusion();
+
+ test_parser_column_number_overflow();
+
+ test_parser_parsing_error();
+
+ test_parser_premature_eol();
+
+ return 0;
+}
--
Alioth's /git/debian-med/git-commit-notice on /srv/git.debian.org/git/debian-med/libgtextutils.git
More information about the debian-med-commit
mailing list