You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@daffodil.apache.org by ja...@apache.org on 2018/07/09 14:52:40 UTC
[incubator-daffodil] 03/13: Added conversion function for
AsciiTandemModified
This is an automated email from the ASF dual-hosted git repository.
jadams pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-daffodil.git
commit 6fd9ead0755cf8b2af4339fa740f673f938cc513
Author: Josh Adams <ja...@tresys.com>
AuthorDate: Tue Apr 10 16:37:12 2018 -0400
Added conversion function for AsciiTandemModified
Added test cases as well.
---
.../org/apache/daffodil/util/DecimalUtils.scala | 26 +++++---
.../apache/daffodil/util/TestDecimalUtils.scala | 70 ++++++++++++++++++++++
.../apache/daffodil/xsd/DFDL_part1_simpletypes.xsd | 1 +
3 files changed, 88 insertions(+), 9 deletions(-)
diff --git a/daffodil-lib/src/main/scala/org/apache/daffodil/util/DecimalUtils.scala b/daffodil-lib/src/main/scala/org/apache/daffodil/util/DecimalUtils.scala
index 87fc47f..5851369 100644
--- a/daffodil-lib/src/main/scala/org/apache/daffodil/util/DecimalUtils.scala
+++ b/daffodil-lib/src/main/scala/org/apache/daffodil/util/DecimalUtils.scala
@@ -336,7 +336,7 @@ object DecimalUtils {
}
def convertFromAsciiStandard(digit: Int): Int = {
- if ((digit >= 48) && (digit <= 57))
+ if ((digit >= 48) && (digit <= 57)) // positive 0-9
return digit - 48
else if ((digit >= 112) && (digit <= 121)) // negative 0-9
return -(digit - 112)
@@ -382,7 +382,7 @@ object DecimalUtils {
}
def convertFromAsciiCARealiaModified(digit: Int): Int = {
- if ((digit >= 48) && (digit <= 57))
+ if ((digit >= 48) && (digit <= 57)) // positive 0-9
return digit - 48
else if ((digit >= 32) && (digit <= 41)) // negative 0-9
return -(digit - 32)
@@ -396,14 +396,21 @@ object DecimalUtils {
return (digit - 16).asInstanceOf[Char]
}
- /*def convertAsciiTandemModified(digit: Int): Int = {
- if ((digit >= 0) && (digit <= 9))
- return digit
- else if ((digit >= 32) && (digit <= 41)) // negative 0-9
- return -(digit - 32)
+ def convertFromAsciiTandemModified(digit: Int): Int = {
+ if ((digit >= 48) && (digit <= 57)) // positive 0-9
+ return digit - 48
+ else if ((digit >= 128) && (digit <= 137)) // negative 0-9
+ return -(digit - 128)
else
return 0
- }*/
+ }
+
+ def convertToAsciiTandemModified(digit: Char, positive: Boolean): Char = {
+ if (positive)
+ return digit
+ else
+ return (digit + 80).asInstanceOf[Char]
+ }
def zonedToInt(num: String, zonedStyle: TextZonedSignStyle): Int = {
val decodedValue = new StringBuilder()
@@ -414,7 +421,7 @@ object DecimalUtils {
case TextZonedSignStyle.AsciiStandard => convertFromAsciiStandard(char)
case TextZonedSignStyle.AsciiTranslatedEBCDIC => convertFromAsciiTranslatedEBCDIC(char)
case TextZonedSignStyle.AsciiCARealiaModified => convertFromAsciiCARealiaModified(char)
- //case TextZonedSignStyle.AsciiTandemModified => convertAsciiTandemModified(char)
+ case TextZonedSignStyle.AsciiTandemModified => convertFromAsciiTandemModified(char)
}
if ((digit < 0) && !negative)
@@ -439,6 +446,7 @@ object DecimalUtils {
case TextZonedSignStyle.AsciiStandard => convertToAsciiStandard(char, positive)
case TextZonedSignStyle.AsciiTranslatedEBCDIC => convertToAsciiTranslatedEBCDIC(char, positive)
case TextZonedSignStyle.AsciiCARealiaModified => convertToAsciiCARealiaModified(char, positive)
+ case TextZonedSignStyle.AsciiTandemModified => convertToAsciiTandemModified(char, positive)
}
encodedValue.append(digit)
diff --git a/daffodil-lib/src/test/scala/org/apache/daffodil/util/TestDecimalUtils.scala b/daffodil-lib/src/test/scala/org/apache/daffodil/util/TestDecimalUtils.scala
index 8b736a8..fc1c950 100644
--- a/daffodil-lib/src/test/scala/org/apache/daffodil/util/TestDecimalUtils.scala
+++ b/daffodil-lib/src/test/scala/org/apache/daffodil/util/TestDecimalUtils.scala
@@ -1390,4 +1390,74 @@ class TestDecimalUtils {
assertEquals(zonedFromInt(result, TextZonedSignStyle.AsciiCARealiaModified), "!\"#$%&'() ")
}
+ @Test def zonedIntAsciiTandemModifiedPos1() {
+ val num = "1"
+ val result = zonedToInt(num, TextZonedSignStyle.AsciiTandemModified)
+ assertEquals(result, 1)
+ assertEquals(zonedFromInt(result, TextZonedSignStyle.AsciiTandemModified), num)
+ }
+
+ @Test def zonedIntAsciiTandemModifiedPos2() {
+ val num = "12"
+ val result = zonedToInt(num, TextZonedSignStyle.AsciiTandemModified)
+ assertEquals(result, 12)
+ assertEquals(zonedFromInt(result, TextZonedSignStyle.AsciiTandemModified), num)
+ }
+
+ @Test def zonedIntAsciiTandemModifiedPos3() {
+ val num = "123"
+ val result = zonedToInt(num, TextZonedSignStyle.AsciiTandemModified)
+ assertEquals(result, 123)
+ assertEquals(zonedFromInt(result, TextZonedSignStyle.AsciiTandemModified), num)
+ }
+
+ @Test def zonedIntAsciiTandemModifiedPos4() {
+ val num = "1234567890"
+ val result = zonedToInt(num, TextZonedSignStyle.AsciiTandemModified)
+ assertEquals(result, 1234567890)
+ assertEquals(zonedFromInt(result, TextZonedSignStyle.AsciiTandemModified), num)
+ }
+
+ @Test def zonedIntAsciiTandemModifiedPos5() {
+ val num = "000000000001234567890"
+ val result = zonedToInt(num, TextZonedSignStyle.AsciiTandemModified)
+ assertEquals(result, 1234567890)
+ assertEquals(zonedFromInt(result, TextZonedSignStyle.AsciiTandemModified), "1234567890")
+ }
+
+ @Test def zonedIntAsciiTandemModifiedNeg1() {
+ val num = ""
+ val result = zonedToInt(num, TextZonedSignStyle.AsciiTandemModified)
+ assertEquals(result, -1)
+ assertEquals(zonedFromInt(result, TextZonedSignStyle.AsciiTandemModified), num)
+ }
+
+ @Test def zonedIntAsciiTandemModifiedNeg2() {
+ val num = ""
+ val result = zonedToInt(num, TextZonedSignStyle.AsciiTandemModified)
+ assertEquals(result, -12)
+ assertEquals(zonedFromInt(result, TextZonedSignStyle.AsciiTandemModified), num)
+ }
+
+ @Test def zonedIntAsciiTandemModifiedNeg3() {
+ val num = ""
+ val result = zonedToInt(num, TextZonedSignStyle.AsciiTandemModified)
+ assertEquals(result, -123)
+ assertEquals(zonedFromInt(result, TextZonedSignStyle.AsciiTandemModified), num)
+ }
+
+ @Test def zonedIntAsciiTandemModifiedNeg4() {
+ val num = "
"
+ val result = zonedToInt(num, TextZonedSignStyle.AsciiTandemModified)
+ assertEquals(result, -1234567890)
+ assertEquals(zonedFromInt(result, TextZonedSignStyle.AsciiTandemModified), num)
+ }
+
+ @Test def zonedIntAsciiTandemModifiedNeg5() {
+ val num = "
"
+ val result = zonedToInt(num, TextZonedSignStyle.AsciiTandemModified)
+ assertEquals(result, -1234567890)
+ assertEquals(zonedFromInt(result, TextZonedSignStyle.AsciiTandemModified), "
")
+ }
+
}
diff --git a/daffodil-propgen/src/main/resources/org/apache/daffodil/xsd/DFDL_part1_simpletypes.xsd b/daffodil-propgen/src/main/resources/org/apache/daffodil/xsd/DFDL_part1_simpletypes.xsd
index 1d1635c..280c367 100644
--- a/daffodil-propgen/src/main/resources/org/apache/daffodil/xsd/DFDL_part1_simpletypes.xsd
+++ b/daffodil-propgen/src/main/resources/org/apache/daffodil/xsd/DFDL_part1_simpletypes.xsd
@@ -314,6 +314,7 @@
<xsd:enumeration value="asciiStandard" />
<xsd:enumeration value="asciiTranslatedEBCDIC" />
<xsd:enumeration value="asciiCARealiaModified" />
+ <xsd:enumeration value="asciiTandemModified" />
</xsd:restriction>
</xsd:simpleType>