use of uk.ac.sussex.gdsc.test.junit5.SeededTest in project GDSC-SMLM by aherbert.
the class PrecomputedFunctionTest method precomputedGradient2FunctionWrapsPrecomputedValues.
@SeededTest
void precomputedGradient2FunctionWrapsPrecomputedValues(RandomSeed seed) {
final int n = 3;
final UniformRandomProvider r = RngUtils.create(seed.getSeed());
final int size = 100;
final double[] v = GdscSmlmTestUtils.generateDoubles(size, r);
final double[][] g1 = new double[size][];
final double[][] g2 = new double[size][];
for (int i = 0; i < g1.length; i++) {
g1[i] = GdscSmlmTestUtils.generateDoubles(n, r);
g2[i] = GdscSmlmTestUtils.generateDoubles(n, r);
}
final Gradient2Function func = new PrecomputedGradient2Function(v, g1, g2);
final double[][] g1o = new double[size][];
final double[][] g2o = new double[size][];
final double[] vo = evaluateGradient2Function(func, g1o, g2o);
Assertions.assertArrayEquals(v, vo, "values");
Assertions.assertArrayEquals(g1, g1o, "g1");
Assertions.assertArrayEquals(g2, g2o, "g2");
}
use of uk.ac.sussex.gdsc.test.junit5.SeededTest in project GDSC-SMLM by aherbert.
the class FactorialTest method testFactorialDouble.
/**
* Test the factorial of a fractional number against Commons Math gamma(1+n).
*/
@SeededTest
void testFactorialDouble(RandomSeed seed) {
final UniformRandomProvider rng = RngUtils.create(seed.getSeed());
final DoubleDoubleBiPredicate tol = TestHelper.doublesAreClose(5e-15).or(TestHelper.doublesEqual());
for (int i = 0; i < 100; i++) {
final double n = rng.nextDouble() * 180;
final double expected = n < 1.5 ? 1 / (1 + Gamma.invGamma1pm1(n)) : Gamma.gamma(1 + n);
TestAssertions.assertTest(expected, Factorial.value(n), tol, () -> Double.toString(n));
}
}
use of uk.ac.sussex.gdsc.test.junit5.SeededTest in project GDSC-SMLM by aherbert.
the class FastLogTest method canTestDoubleSpeedLog1P.
@SpeedTag
@SeededTest
void canTestDoubleSpeedLog1P(RandomSeed seed) {
// No assertions, this is just a report
Assumptions.assumeTrue(logger.isLoggable(Level.INFO));
Assumptions.assumeTrue(TestSettings.allow(TestComplexity.MEDIUM));
final UniformRandomProvider rng = RngUtils.create(seed.getSeed());
final double[] x = new double[1000000];
for (int i = 0; i < x.length; i++) {
x[i] = nextUniformDouble(rng);
}
final MathLog fl = new MathLog();
final TimingService ts = new TimingService(5);
// ts.execute(new DoubleTimingTask(new TestLog(fl), 0, x));
ts.execute(new DoubleTimingTask(new Test1PLog(fl), 0, x));
ts.execute(new DoubleTimingTask(new TestLog1P(fl), 0, x));
ts.execute(new DoubleTimingTask(new TestLog1PApache(fl), 0, x));
// ts.execute(new DoubleTimingTask(new TestLog(fl), 0, x));
ts.execute(new DoubleTimingTask(new Test1PLog(fl), 0, x));
ts.execute(new DoubleTimingTask(new TestLog1P(fl), 0, x));
ts.execute(new DoubleTimingTask(new TestLog1PApache(fl), 0, x));
final int size = ts.getSize();
ts.repeat(size);
logger.info(ts.getReport(size));
}
use of uk.ac.sussex.gdsc.test.junit5.SeededTest in project GDSC-SMLM by aherbert.
the class FastLogTest method canTestDoubleErrorRange.
@SeededTest
void canTestDoubleErrorRange(RandomSeed seed) {
Assumptions.assumeTrue(logger.isLoggable(Level.INFO));
Assumptions.assumeTrue(TestSettings.allow(TestComplexity.HIGH));
final UniformRandomProvider rng = RngUtils.create(seed.getSeed());
final LocalList<TestFastLog> test = new LocalList<>();
final int n = 13;
test.add(new TestFastLog(IcsiFastLog.create(n, DataType.DOUBLE)));
test.add(new TestFastLog(new FFastLog(n)));
test.add(new TestFastLog(new DFastLog(n)));
test.add(new TestFastLog(new TurboLog(n)));
// Full range in blocks.
// Only when the number is around 1 or min value are there significant errors
final double[] d = new double[10000000];
final double[] logD = null;
// All
// testDoubleErrorRange(test, n, d, logD, 0, 255, 0);
// Only a problem around min value and x==1
// testDoubleErrorRange(rng, test, n, d, logD, 0, 2, 0);
testDoubleErrorRange(rng, test, n, d, logD, 1021, 1026, 0);
testDoubleErrorRange(rng, test, n, d, logD, 2045, 2047, 0);
}
use of uk.ac.sussex.gdsc.test.junit5.SeededTest in project GDSC-SMLM by aherbert.
the class FastLogTest method canTestDoubleErrorLog1P.
@SeededTest
void canTestDoubleErrorLog1P(RandomSeed seed) {
Assumptions.assumeTrue(logger.isLoggable(Level.INFO));
Assumptions.assumeTrue(TestSettings.allow(TestComplexity.HIGH));
// All float values is a lot so we do a representative set
final UniformRandomProvider rng = RngUtils.create(seed.getSeed());
final double lower = Double.MIN_VALUE;
final double upper = Double.MAX_VALUE;
final double[] d = new double[100000];
final double[] logD = new double[d.length];
for (int i = 0; i < d.length; i++) {
final double v = nextUniformDouble(rng);
d[i] = v;
logD[i] = Math.log1p(v);
}
runCanTestDoubleError(new Test1PLog(new MathLog()), d, logD);
runCanTestDoubleError(new TestLog1P(new MathLog()), d, logD);
}
Aggregations