com.Ostermiller.util.SignificantFiguresTests Maven / Gradle / Ivy
Go to download
Open source (GPL) Java utilities maintained by Stephen Ostermiller with help from many contributors.
The newest version!
/*
* Copyright (C) 2004-2007 Stephen Ostermiller
* http://ostermiller.org/contact.pl?regarding=Java+Utilities
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* See COPYING.TXT for details.
*/
package com.Ostermiller.util;
/**
* Significant Figures regression test.
*/
class SignificantFiguresTests {
private static class TestCase {
private String original;
private int sigfigs;
private String desiredResult;
/**
* Test case
* @param original test number (as string)
* @param sigfigs number of significant figures to use
* @param desiredResult desired test result (number as string)
*/
public TestCase(String original, int sigfigs, String desiredResult){
this.original = original;
this.sigfigs = sigfigs;
this.desiredResult = desiredResult;
}
private void test() throws Exception {
String result = SignificantFigures.format(original, sigfigs);
if (!desiredResult.equals(result)) throw new Exception("Got " + result + " but expected " + desiredResult + " for " + original + " with " + sigfigs + " significant digits.");
}
}
private static final TestCase[] testCases = new TestCase[]{
new TestCase("1234", 3, "1230"),
new TestCase("60.91", 3, "60.9"),
new TestCase("3343", 1, "3000"),
new TestCase("200", 2, "2.0E2"), // not representable without scientific notation
new TestCase("5097.808073851760832954355668151943215272", 3, "5.10E3"), // not representable without scientific notation
new TestCase("6.15", 2, "6.2"), // rounding on a five - special even odd rule
new TestCase("6.25", 2, "6.2"), // rounding on a five - special even odd rule
new TestCase("6.150", 2, "6.2"), // rounding on a five - special even odd rule
new TestCase("6.250", 2, "6.2"), // rounding on a five - special even odd rule
new TestCase("6.1500", 2, "6.2"), // rounding on a five - special even odd rule
new TestCase("6.2500", 2, "6.2"), // rounding on a five - special even odd rule
new TestCase("6.153", 2, "6.2"), // when more digits special even odd rule does not apply when rounding on a five
new TestCase("6.253", 2, "6.3"), // when more digits special even odd rule does not apply when rounding on a five
new TestCase("200.123", 3, "200."), // decimal point at end
new TestCase("234.123", 3, "234"), // no decimal point at end
new TestCase("199.87", 3, "200."), // decimal point at end
new TestCase(".0033234324", 2, "0.0033"), // gets leading zero
new TestCase("0.0033234324", 2, "0.0033"), // keeps leading zero, can be represented without scientific notation
new TestCase(".00033234324", 2, "3.3E-4"), // too small without scientific notation
new TestCase("1234567", 3, "1230000"), // can be represented without scientific notation
new TestCase("12345678", 3, "1.23E7"), // too large without scientific notation
};
/**
* Main method for regression test
* @param args command line arguments (ignored)
*/
public static void main(String[] args){
try {
for (int i=0; i
© 2015 - 2025 Weber Informatics LLC | Privacy Policy