make TriangularStep ctor public

This commit is contained in:
Jonathan Shook 2022-12-09 14:27:58 -06:00
parent 457c75bc3e
commit 862058d80f
2 changed files with 15 additions and 15 deletions

View File

@ -38,7 +38,7 @@ import java.util.function.LongUnaryOperator;
* join the project or let us know.</p>
*/
@ThreadSafeMapper
public class TriangularStepFunction implements LongUnaryOperator {
public class TriangularStep implements LongUnaryOperator {
private final Hash hasher = new Hash();
private final long average;
@ -47,9 +47,9 @@ public class TriangularStepFunction implements LongUnaryOperator {
private final long variance;
@Example({"TriangularStepFunction(100,20)","Create a sequence of values where the average is 100, but the range of values is between 80 and 120."})
@Example({"TriangularStepFunction(80,10)","Create a sequence of values where the average is 80, but the range of values is between 70 and 90."})
TriangularStepFunction(long average, long variance) {
@Example({"TriangularStep(100,20)","Create a sequence of values where the average is 100, but the range of values is between 80 and 120."})
@Example({"TriangularStep(80,10)","Create a sequence of values where the average is 80, but the range of values is between 70 and 90."})
public TriangularStep(long average, long variance) {
if (average<=0 || variance < 0 || variance > average) {
throw new RuntimeException(
"The average must be positive, variance non-negative and the variance must be less than the average. " +
@ -61,7 +61,7 @@ public class TriangularStepFunction implements LongUnaryOperator {
this.sizer = new HashRange(average-variance,average+variance);
}
TriangularStepFunction(long average) {
TriangularStep(long average) {
this(average, average/2);
}
@ -71,9 +71,9 @@ public class TriangularStepFunction implements LongUnaryOperator {
long count = operand / average;
// offset within window
long offset = operand % average;
// base of window
// base of window, same as count*average
long base = operand - offset;
// variate up to window size
// variate + or - from average
long variance = sizer.applyAsLong(base);
// variate offset from start of window
long slice = base + variance;

View File

@ -25,14 +25,14 @@ import java.util.stream.IntStream;
import static org.assertj.core.api.Assertions.assertThat;
public class TriangularStepFunctionTest {
public class TriangularStepTest {
private static final int LABEL=0;
private static final int FREQUENCY=1;
@Test
public void testExample1() {
TriangularStepFunction e1 = new TriangularStepFunction(100, 20);
public void testStepExample1() {
TriangularStep e1 = new TriangularStep(100, 20);
int[] runLengths = this.rleStatsFor(e1, 0, 10000);
System.out.println(Arrays.toString(runLengths));
assertThat(IntStream.of(runLengths).min().orElseThrow()).isEqualTo(80L);
@ -40,8 +40,8 @@ public class TriangularStepFunctionTest {
}
@Test
public void testExample2() {
TriangularStepFunction e1 = new TriangularStepFunction(80, 10);
public void testStepExample2() {
TriangularStep e1 = new TriangularStep(80, 10);
int[] runLengths = this.rleStatsFor(e1, 0, 10000);
System.out.println(Arrays.toString(runLengths));
assertThat(IntStream.of(runLengths).min().orElseThrow()).isEqualTo(70L);
@ -50,7 +50,7 @@ public class TriangularStepFunctionTest {
@Test
public void testIncrementalVariance() {
TriangularStepFunction f = new TriangularStepFunction(100, 0);
TriangularStep f = new TriangularStep(100, 0);
assertThat(f.applyAsLong(0L)).isEqualTo(0L);
assertThat(f.applyAsLong(1L)).isEqualTo(0L);
assertThat(f.applyAsLong(99L)).isEqualTo(0L);
@ -60,7 +60,7 @@ public class TriangularStepFunctionTest {
@Test
public void testVariance() {
long first=0;
TriangularStepFunction f = new TriangularStepFunction(100,1);
TriangularStep f = new TriangularStep(100,1);
var rlestats = rleStatsFor(f, 0, 100000);
LongSummaryStatistics stats99to101 = statsForRle((int) f.applyAsLong(first),rlestats);
assertThat(stats99to101.getMin()).isEqualTo(99L);
@ -74,7 +74,7 @@ public class TriangularStepFunctionTest {
assertThat(histoStats.getAverage()).isEqualTo(100);
}
private int[] rleStatsFor(TriangularStepFunction f, long firstTrialIncl, long lastTrialExcl) {
private int[] rleStatsFor(TriangularStep f, long firstTrialIncl, long lastTrialExcl) {
long firstBucket = f.applyAsLong(firstTrialIncl);
long lastBucket = f.applyAsLong(lastTrialExcl);
if (firstBucket>Integer.MAX_VALUE||lastBucket>Integer.MAX_VALUE) {