package tc.oc.commons.random;
import org.junit.Test;
import tc.oc.commons.core.random.Entropy;
import tc.oc.commons.core.random.MutableEntropy;
import tc.oc.commons.core.random.SaltedEntropy;
import static org.junit.Assert.*;
import static tc.oc.test.Assert.*;
public class SaltedEntropyTest {
@Test
public void saltedDifferentFromUnsalted() throws Exception {
Entropy unsalted = new MutableEntropy();
Entropy salted = new SaltedEntropy(unsalted, hashCode());
assertNotEquals(unsalted.randomLong(), salted.randomLong());
}
@Test
public void saltedDifferentFromEachOther() throws Exception {
Entropy unsalted = new MutableEntropy();
Entropy salted1 = new SaltedEntropy(unsalted, hashCode());
Entropy salted2 = new SaltedEntropy(unsalted, ~hashCode());
assertNotEquals(salted1.randomLong(), salted2.randomLong());
}
@Test
public void saltedAdvancesWithUnsalted() throws Exception {
Entropy unsalted = new MutableEntropy();
Entropy salted = new SaltedEntropy(unsalted, hashCode());
long n = salted.randomLong();
assertEquals(n, salted.randomLong());
unsalted.advance();
assertNotEquals(n, salted.randomLong());
n = salted.randomLong();
assertEquals(n, salted.randomLong());
salted.advance();
assertNotEquals(n, salted.randomLong());
}
}