From 36c80a181b589fcc0920b54f73185b3ca66833bd Mon Sep 17 00:00:00 2001
From: BenceJanosSzabo <bence.janos.szabo@ericsson.com>
Date: Wed, 18 Jan 2017 12:05:25 +0100
Subject: [PATCH] xsd2ttcn: special fixed value of float elements are handled
 correctly (Bug 510589)

Change-Id: I23a61eb05e72ef378579e02b71fb3d772f4c06ed
Signed-off-by: BenceJanosSzabo <bence.janos.szabo@ericsson.com>
---
 .../www_example_org_fixed_value_e.ttcn        | 21 +++++++++++++++++++
 .../XML/XmlWorkflow/xsd/fixed_value.xsd       |  3 +++
 xsdconvert/SimpleType.cc                      | 12 +++++++++++
 3 files changed, 36 insertions(+)

diff --git a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_fixed_value_e.ttcn b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_fixed_value_e.ttcn
index 40f1fca2f..d3478eb1f 100644
--- a/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_fixed_value_e.ttcn
+++ b/regression_test/XML/XmlWorkflow/XmlTest_expectedTtcns/www_example_org_fixed_value_e.ttcn
@@ -65,6 +65,27 @@ with {
 };
 
 
+type XSD.Float FloatType2 (infinity)
+with {
+  variant "defaultForEmpty as 'INF'";
+  variant "element";
+};
+
+
+type XSD.Float FloatType3 (-infinity)
+with {
+  variant "defaultForEmpty as '-INF'";
+  variant "element";
+};
+
+
+type XSD.Float FloatType4 (not_a_number)
+with {
+  variant "defaultForEmpty as 'NaN'";
+  variant "element";
+};
+
+
 type XSD.Double DoubleType (7.0)
 with {
   variant "defaultForEmpty as '7.0'";
diff --git a/regression_test/XML/XmlWorkflow/xsd/fixed_value.xsd b/regression_test/XML/XmlWorkflow/xsd/fixed_value.xsd
index a6f1a2fce..b7e4d7900 100644
--- a/regression_test/XML/XmlWorkflow/xsd/fixed_value.xsd
+++ b/regression_test/XML/XmlWorkflow/xsd/fixed_value.xsd
@@ -6,6 +6,9 @@
 <xsd:element name="StringType" type="xsd:string" fixed="a"/>
 <xsd:element name="IntegerType" type="xsd:integer" fixed="7"/>
 <xsd:element name="FloatType" type="xsd:float" fixed="7.0"/>
+<xsd:element name="FloatType2" type="xsd:float" fixed="INF"/> 
+<xsd:element name="FloatType3" type="xsd:float" fixed="-INF"/> 
+<xsd:element name="FloatType4" type="xsd:float" fixed="NaN"/> 
 <xsd:element name="DoubleType" type="xsd:double" fixed="7.0"/>
 <xsd:element name="BooleanType" type="xsd:boolean" fixed="true"/>
 <xsd:element name="BooleanType2" type="xsd:boolean" fixed="0"/>
diff --git a/xsdconvert/SimpleType.cc b/xsdconvert/SimpleType.cc
index 1aa78caaf..b186c6b0f 100644
--- a/xsdconvert/SimpleType.cc
+++ b/xsdconvert/SimpleType.cc
@@ -1551,6 +1551,18 @@ void ValueType::printToFile(FILE * file) const {
         val = fixed_value;
       }
       fprintf(file, " (%s)", val.c_str());
+    } else if (isFloatType(type)) {
+      Mstring val;
+      if (fixed_value == "INF") {
+        val = "infinity";
+      } else if (fixed_value == "-INF") {
+        val = "-infinity";
+      } else if (fixed_value == "NaN") {
+        val = "not_a_number";
+      } else {
+        val = fixed_value;
+      }
+      fprintf(file, " (%s)", val.c_str());
     } else {
       fprintf(file, " (%s)", fixed_value.c_str());
     }
-- 
GitLab