From 24537fdb458738ac9a9828aa724d4dcfd163f949 Mon Sep 17 00:00:00 2001
From: Andreas Fankhauser hiddenalpha.ch
Date: Sat, 24 Dec 2022 01:01:27 +0100
Subject: Add some tests for FormatUtils.toStr()
---
pom.xml | 12 +++
xtra4j-misc/pom.xml | 8 ++
.../ch/hiddenalpha/xtra4j/format/FormatUtils.java | 3 +-
.../hiddenalpha/xtra4j/format/FormatUtilsTest.java | 89 ++++++++++++++++++++++
4 files changed, 111 insertions(+), 1 deletion(-)
create mode 100644 xtra4j-misc/src/test/java/ch/hiddenalpha/xtra4j/format/FormatUtilsTest.java
diff --git a/pom.xml b/pom.xml
index d97fb24..98e3167 100644
--- a/pom.xml
+++ b/pom.xml
@@ -15,10 +15,22 @@
UTF-8
8
8
+ 4.13.2
xtra4j-misc
+
+
+
+ junit
+ junit
+ ${dep.version.junit}
+ test
+
+
+
+
diff --git a/xtra4j-misc/pom.xml b/xtra4j-misc/pom.xml
index 8172f36..e93de16 100644
--- a/xtra4j-misc/pom.xml
+++ b/xtra4j-misc/pom.xml
@@ -15,4 +15,12 @@
jar
+
+
+ junit
+ junit
+ test
+
+
+
diff --git a/xtra4j-misc/src/main/java/ch/hiddenalpha/xtra4j/format/FormatUtils.java b/xtra4j-misc/src/main/java/ch/hiddenalpha/xtra4j/format/FormatUtils.java
index fc10ab2..2311628 100644
--- a/xtra4j-misc/src/main/java/ch/hiddenalpha/xtra4j/format/FormatUtils.java
+++ b/xtra4j-misc/src/main/java/ch/hiddenalpha/xtra4j/format/FormatUtils.java
@@ -19,6 +19,7 @@ public class FormatUtils {
* How many significant digits to be printed. MUST be in range 1..7.
*/
public static String toStr( float val, int ndig ){
+ assert ndig >= 1 && ndig <= 7 : ndig;
int exp;
float limit;
String fmt;
@@ -37,7 +38,7 @@ public class FormatUtils {
}
if( val >= exp && val <= limit ){
// Print simple numbers as int.
- return String.valueOf((int)val);
+ return String.valueOf((int)(val + .5));
}else{
// Format too large or too small numbers with not wasting too much
// space. In addition, fix annoying locale chars as this function is
diff --git a/xtra4j-misc/src/test/java/ch/hiddenalpha/xtra4j/format/FormatUtilsTest.java b/xtra4j-misc/src/test/java/ch/hiddenalpha/xtra4j/format/FormatUtilsTest.java
new file mode 100644
index 0000000..237f171
--- /dev/null
+++ b/xtra4j-misc/src/test/java/ch/hiddenalpha/xtra4j/format/FormatUtilsTest.java
@@ -0,0 +1,89 @@
+package ch.hiddenalpha.xtra4j.format;
+
+import org.junit.Test;
+
+import static ch.hiddenalpha.xtra4j.format.FormatUtils.toStr;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+
+public class FormatUtilsTest {
+
+ @Test
+ public void zeroIsJustZero() {
+ for( int i = 1; i < 8; ++i ){
+ assertEquals("i=" + i, "0", toStr(0F, i));
+ }
+ }
+
+ @Test
+ public void smallIntsAreJustInts() {
+ assertEquals("1", toStr(1F, 1));
+ assertEquals("7", toStr(7F, 1));
+ assertEquals("19", toStr(19F, 1));
+ assertEquals("123", toStr(123F, 1));
+ }
+
+ @Test
+ public void nonsensePrecisionGetsThrownAway() {
+ assertEquals("2", toStr(1.99999999999999999F, 1));
+ assertEquals("2", toStr(1.50000000000000001F, 1));
+ assertEquals("1", toStr(1.4999999F, 1));
+ assertEquals("2.0", toStr(1.99999999999999999F, 2));
+ assertEquals("1.5", toStr(1.50000000000000001F, 2));
+ assertEquals("1.5", toStr(1.4999999F, 2));
+ }
+
+ @Test
+ public void veryLargeNumsUseScientificNotation() {
+ assertEquals("1e+08", toStr(123456700F, 1));
+ assertEquals("1.2e+08", toStr(123456700F, 2));
+ assertEquals("1.23e+08", toStr(123456700F, 3));
+ assertEquals("1.235e+08", toStr(123456700F, 4));
+ assertTrue(toStr(123456700F, 5).matches("^1234567\\d\\d$"));
+ assertTrue(toStr(123456700F, 6).matches("^1234567\\d\\d$"));
+ assertTrue(toStr(123456700F, 7).matches("^1234567\\d\\d$"));
+ }
+
+ @Test
+ public void smallNumsAreJustFloats() {
+ assertEquals("0.0001", toStr(0.000123456789F, 1));
+ assertEquals("0.00012", toStr(0.000123456789F, 2));
+ assertEquals("0.000123", toStr(0.000123456789F, 3));
+ assertEquals("0.0001235", toStr(0.000123456789F, 4));
+ assertEquals("0.00012346", toStr(0.000123456789F, 5));
+ assertEquals("0.000123457", toStr(0.000123456789F, 6));
+ assertEquals("0.0001234568", toStr(0.000123456789F, 7));
+ }
+
+ @Test
+ public void verySmallNumsUseScientificNotation() {
+ assertEquals("1e-05", toStr(0.0000123456789F, 1));
+ assertEquals("1.2e-05", toStr(0.0000123456789F, 2));
+ assertEquals("1.23e-05", toStr(0.0000123456789F, 3));
+ assertEquals("1.235e-05", toStr(0.0000123456789F, 4));
+ assertEquals("1.2346e-05", toStr(0.0000123456789F, 5));
+ assertEquals("1.23457e-05", toStr(0.0000123456789F, 6));
+ assertEquals("1.234568e-05", toStr(0.0000123456789F, 7));
+ }
+
+ @Test
+ public void positiveInfinityIsSameAsToString() {
+ assertEquals(String.valueOf(Float.POSITIVE_INFINITY),
+ toStr(Float.POSITIVE_INFINITY, 7));
+ }
+
+ @Test
+ public void negativeInfinityIsSameAsToString() {
+ assertEquals(String.valueOf(Float.NEGATIVE_INFINITY),
+ toStr(Float.NEGATIVE_INFINITY, 7));
+ }
+
+ @Test
+ public void NaNisNaN() {
+ for( int i = 1 ; i <= 7 ; ++i ){
+ assertEquals("NaN", toStr(Float.NaN, i));
+ }
+ }
+
+}
--
cgit v1.1