[PPL-devel] [GIT] ppl/ppl(sparse_matrices): Let the input routine accept floating-point syntax starting with ".".
Enea Zaffanella
zaffanella at cs.unipr.it
Fri Sep 3 14:36:11 CEST 2010
Module: ppl/ppl
Branch: sparse_matrices
Commit: dd5bdc7dd6b33e94ff4bbf0b3e33d7f791d8e31c
URL: http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=dd5bdc7dd6b33e94ff4bbf0b3e33d7f791d8e31c
Author: Enea Zaffanella <zaffanella at cs.unipr.it>
Date: Wed Sep 1 08:18:04 2010 +0200
Let the input routine accept floating-point syntax starting with ".".
---
src/checked.cc | 38 +++++++++++++++++++++++---------------
tests/Polyhedron/numberinput1.cc | 6 ++++--
2 files changed, 27 insertions(+), 17 deletions(-)
diff --git a/src/checked.cc b/src/checked.cc
index c3ba12f..a36bce4 100644
--- a/src/checked.cc
+++ b/src/checked.cc
@@ -120,6 +120,12 @@ parse_number_part(std::istream& is, number_struct& num) {
c = is.get();
if (c == 'i' || c == 'I')
goto inf;
+ if (c != '.')
+ break;
+ // Fall through.
+ case '.':
+ state = FRACTIONAL;
+ c = is.get();
break;
case 'n':
case 'N':
@@ -141,26 +147,28 @@ parse_number_part(std::istream& is, number_struct& num) {
goto error;
return num.neg_mantissa ? V_EQ_MINUS_INFINITY : V_EQ_PLUS_INFINITY;
}
- if (get_digit(c, 10) < 0)
- goto error;
- if (c == '0') {
- int d = is.get();
- if (d == 'x' || d == 'X') {
- num.base = 16;
- num.base_for_exponent = 16;
- state = INTEGER;
- c = is.get();
+ if (state != FRACTIONAL) {
+ if (get_digit(c, 10) < 0)
+ goto error;
+ if (c == '0') {
+ int d = is.get();
+ if (d == 'x' || d == 'X') {
+ num.base = 16;
+ num.base_for_exponent = 16;
+ state = INTEGER;
+ c = is.get();
+ }
+ else {
+ c = d;
+ empty_mantissa = false;
+ }
}
else {
- c = d;
+ num.mantissa += (char) c;
empty_mantissa = false;
+ c = is.get();
}
}
- else {
- num.mantissa += (char) c;
- empty_mantissa = false;
- c = is.get();
- }
while (true) {
switch (state) {
case BASE:
diff --git a/tests/Polyhedron/numberinput1.cc b/tests/Polyhedron/numberinput1.cc
index cdc43f1..cfb33e2 100644
--- a/tests/Polyhedron/numberinput1.cc
+++ b/tests/Polyhedron/numberinput1.cc
@@ -144,7 +144,9 @@ test04() {
&& aux_test("0.123456 101", "1929/15625", " 101", V_EQ)
&& aux_test("0.123456 101", "1929/15625", " 101", V_EQ)
&& aux_test("0.123456 ", "1929/15625", " ", V_EQ)
- && aux_test(".333", "nan", ".333", V_CVT_STR_UNK);
+ && aux_test(".499975", "19999/40000", "", V_EQ)
+ && aux_test(".333", "333/1000", "", V_EQ)
+ && aux_test(".0x333", "0", "x333", V_EQ);
}
// Testing exponent.
@@ -256,7 +258,7 @@ test09() {
bool
test10() {
return
- // Fraction.
+ // Fraction.
aux_test("2^^11.1", "7/2", "", V_EQ)
&& aux_test("2^^11.1a", "7/2", "a", V_EQ)
&& aux_test("2^^11.1.", "7/2", ".", V_EQ)
More information about the PPL-devel
mailing list