
1 changed files with 143 additions and 0 deletions
@ -0,0 +1,143 @@ |
|||||
|
package foundation.pEp.pitytest.utils; |
||||
|
|
||||
|
import java.util.ArrayList; |
||||
|
import java.util.List; |
||||
|
|
||||
|
public class SlowFilteredNoise { |
||||
|
private List<RangeInt> selection = new ArrayList<>(); |
||||
|
private List<RangeInt> filter = new ArrayList<>(); |
||||
|
|
||||
|
private RangeInt bandwidth = new RangeInt(0); |
||||
|
|
||||
|
public SlowFilteredNoise() { |
||||
|
} |
||||
|
|
||||
|
public SlowFilteredNoise(List<RangeInt> selection, List<RangeInt> filter) { |
||||
|
setSelection(selection); |
||||
|
setFilter(filter); |
||||
|
} |
||||
|
|
||||
|
public SlowFilteredNoise(RangeInt selection, RangeInt filter) { |
||||
|
addSelection(selection); |
||||
|
addFilter(filter); |
||||
|
} |
||||
|
|
||||
|
public List<RangeInt> getSelection() { |
||||
|
return selection; |
||||
|
} |
||||
|
|
||||
|
public void setSelection(List<RangeInt> selection) { |
||||
|
if (selection != null) { |
||||
|
this.selection = selection; |
||||
|
} else { |
||||
|
this.selection.clear(); |
||||
|
} |
||||
|
calculateBandwitdth(); |
||||
|
} |
||||
|
|
||||
|
public List<RangeInt> getFilter() { |
||||
|
return filter; |
||||
|
} |
||||
|
|
||||
|
public void setFilter(List<RangeInt> filter) { |
||||
|
if (filter != null) { |
||||
|
this.filter = filter; |
||||
|
} else { |
||||
|
this.filter.clear(); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public void addSelection(RangeInt rng) { |
||||
|
if (rng != null) { |
||||
|
this.selection.add(rng); |
||||
|
} |
||||
|
bandwidth = calculateBandwitdth(); |
||||
|
} |
||||
|
|
||||
|
public void addFilter(RangeInt rng) { |
||||
|
if (rng != null) { |
||||
|
this.filter.add(rng); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public RangeInt getBandwidth() { |
||||
|
return bandwidth; |
||||
|
} |
||||
|
|
||||
|
public RangeInt calculateBandwitdth() { |
||||
|
RangeInt ret = new RangeInt(0); |
||||
|
int min = 0; |
||||
|
int max = 0; |
||||
|
if (this.selection.isEmpty()) { |
||||
|
ret.setMinMax(0); |
||||
|
} else { |
||||
|
min = selection.get(0).effectiveMin(); |
||||
|
max = selection.get(0).effectiveMax(); |
||||
|
for (RangeInt sel : this.selection) { |
||||
|
if (sel.effectiveMin() < min) { |
||||
|
min = sel.effectiveMin(); |
||||
|
} |
||||
|
if (sel.effectiveMax() > max) { |
||||
|
max = sel.effectiveMax(); |
||||
|
} |
||||
|
} |
||||
|
ret.setMinMax(min, max); |
||||
|
} |
||||
|
return ret; |
||||
|
} |
||||
|
|
||||
|
public int getNext() { |
||||
|
int ret = 0; |
||||
|
boolean candidatePositive = false; |
||||
|
while (!candidatePositive) { |
||||
|
int candidate = TestUtils.randomInt(bandwidth); |
||||
|
if (this.selection.isEmpty()) { |
||||
|
candidatePositive = true; |
||||
|
ret = candidate; |
||||
|
} else { |
||||
|
if (this.contains(selection, candidate)) { |
||||
|
if (!this.contains(filter, candidate)) { |
||||
|
candidatePositive = true; |
||||
|
ret = candidate; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
return ret; |
||||
|
} |
||||
|
|
||||
|
private boolean contains(List<RangeInt> rngList, int val) { |
||||
|
boolean ret = false; |
||||
|
for (RangeInt rng : rngList) { |
||||
|
if (rng.contains(val)) { |
||||
|
ret = true; |
||||
|
continue; |
||||
|
} |
||||
|
} |
||||
|
return ret; |
||||
|
} |
||||
|
|
||||
|
private String rangeListToString(List<RangeInt> rngl) { |
||||
|
String ret = ""; |
||||
|
int i = 0; |
||||
|
for (RangeInt rng : rngl) { |
||||
|
ret += "Selection nr: " + i + "\n"; |
||||
|
ret += rng.toString(); |
||||
|
i++; |
||||
|
} |
||||
|
return ret; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
@Override |
||||
|
public String toString() { |
||||
|
String ret = ""; |
||||
|
ret += "Selection Ranges\n"; |
||||
|
ret += rangeListToString(selection); |
||||
|
ret += "\nFilter Ranges\n"; |
||||
|
ret += rangeListToString(filter); |
||||
|
ret += "\nBandwidth\n"; |
||||
|
ret += getBandwidth() + "\n\n"; |
||||
|
return ret; |
||||
|
} |
||||
|
} |
Loading…
Reference in new issue