import junit.framework.TestCase;
import static java.lang.Math.*;
/**
* Inspired by twitter post https://twitter.com/allenholub/status/1617619350080598016
* And https://twitter.com/lucasmeijer/status/1615767525928615956
*/
public class StaticMethodTest extends TestCase {
private static String getPercentageRounds(final double percentage) {
return getPercentageRounds_JeffGrigg(percentage);
// return getPercentageRounds_AllenHolub(percentage);
// return getPercentageRounds_AllenHolub_JeffGrigg(percentage);
// return getPercentageRounds_MichaelGrafl(percentage);
// return getPercentageRounds_NSS(percentage);
}
private static final int TOTAL_NUMBER_OF_DOTS = 10;
private static String getPercentageRounds_JeffGrigg(final double percentage) {
final var blueCircles = max(min((int) ceil(percentage * TOTAL_NUMBER_OF_DOTS), TOTAL_NUMBER_OF_DOTS), 0);
final var emptyCircles = TOTAL_NUMBER_OF_DOTS - blueCircles;
return "🔵".repeat(blueCircles) + "⚪".repeat(emptyCircles);
}
private static final String[] _dots = new String[]{
"⚪⚪⚪⚪⚪⚪⚪⚪⚪⚪",
"🔵⚪⚪⚪⚪⚪⚪⚪⚪⚪",
"🔵🔵⚪⚪⚪⚪⚪⚪⚪⚪",
"🔵🔵🔵⚪⚪⚪⚪⚪⚪⚪",
"🔵🔵🔵🔵⚪⚪⚪⚪⚪⚪",
"🔵🔵🔵🔵🔵⚪⚪⚪⚪⚪",
"🔵🔵🔵🔵🔵🔵⚪⚪⚪⚪",
"🔵🔵🔵🔵🔵🔵🔵⚪⚪⚪",
"🔵🔵🔵🔵🔵🔵🔵🔵⚪⚪",
"🔵🔵🔵🔵🔵🔵🔵🔵🔵⚪",
"🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵"
};
private static String getPercentageRounds_AllenHolub(final double percentage) {
// assert 0.0 <= percentage && percentage <= 1.0;
final var percentageAsIntBetween0And10 = max(min((int) ceil(percentage * TOTAL_NUMBER_OF_DOTS), TOTAL_NUMBER_OF_DOTS), 0);
// final var percentageAsIntBetween0And10 = (int) (percentage * 10);
return _dots[percentageAsIntBetween0And10];
}
private static String getPercentageRounds_MichaelGrafl(final double percentage) {
final var pot = max(min((int) ceil(percentage * TOTAL_NUMBER_OF_DOTS), TOTAL_NUMBER_OF_DOTS), 0);
// final var pot = (int) (percentage * 10 + 0.5);
switch (pot) {
case 0: return "⚪⚪⚪⚪⚪⚪⚪⚪⚪⚪";
case 1: return "🔵⚪⚪⚪⚪⚪⚪⚪⚪⚪";
case 2: return "🔵🔵⚪⚪⚪⚪⚪⚪⚪⚪";
case 3: return "🔵🔵🔵⚪⚪⚪⚪⚪⚪⚪";
case 4: return "🔵🔵🔵🔵⚪⚪⚪⚪⚪⚪";
case 5: return "🔵🔵🔵🔵🔵⚪⚪⚪⚪⚪";
case 6: return "🔵🔵🔵🔵🔵🔵⚪⚪⚪⚪";
case 7: return "🔵🔵🔵🔵🔵🔵🔵⚪⚪⚪";
case 8: return "🔵🔵🔵🔵🔵🔵🔵🔵⚪⚪";
case 9: return "🔵🔵🔵🔵🔵🔵🔵🔵🔵⚪";
case 10: return "🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵";
default: return "⚪⚪⚪⚪⚪⚪⚪⚪⚪⚪";
}
}
// https://twitter.com/NabheetS/status/1616461311139016710
private static String getPercentageRounds_NSS(final double percentage) {
final var blueCircles = max(min((int) ceil(percentage * TOTAL_NUMBER_OF_DOTS), TOTAL_NUMBER_OF_DOTS), 0);
final var result = new StringBuilder(10);
for (int i = 0; i < 10; ++i) {
result.append(i < blueCircles ? "🔵" : "⚪");
}
return result.toString();
}
private static String getPercentageRounds_AllenHolub_JeffGrigg(final double percentage) {
final String[] dots = new String[]{
"⚪⚪⚪⚪⚪⚪⚪⚪⚪⚪",
"🔵⚪⚪⚪⚪⚪⚪⚪⚪⚪",
"🔵🔵⚪⚪⚪⚪⚪⚪⚪⚪",
"🔵🔵🔵⚪⚪⚪⚪⚪⚪⚪",
"🔵🔵🔵🔵⚪⚪⚪⚪⚪⚪",
"🔵🔵🔵🔵🔵⚪⚪⚪⚪⚪",
"🔵🔵🔵🔵🔵🔵⚪⚪⚪⚪",
"🔵🔵🔵🔵🔵🔵🔵⚪⚪⚪",
"🔵🔵🔵🔵🔵🔵🔵🔵⚪⚪",
"🔵🔵🔵🔵🔵🔵🔵🔵🔵⚪",
"🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵"
};
final var percentageAsIntBetween0And10 = max(min((int) ceil(percentage * 10), 10), 0);
return dots[percentageAsIntBetween0And10];
}
public void testZero() {
assertEquals("⚪⚪⚪⚪⚪⚪⚪⚪⚪⚪", getPercentageRounds(0.00));
}
public void testJustOverZero() {
assertEquals("🔵⚪⚪⚪⚪⚪⚪⚪⚪⚪", getPercentageRounds(0.00001));
}
public void test10Percent() {
assertEquals("🔵⚪⚪⚪⚪⚪⚪⚪⚪⚪", getPercentageRounds(0.10));
}
public void testJustOver10Percent() {
assertEquals("🔵🔵⚪⚪⚪⚪⚪⚪⚪⚪", getPercentageRounds(0.100001));
}
public void test20Percent() {
assertEquals("🔵🔵⚪⚪⚪⚪⚪⚪⚪⚪", getPercentageRounds(0.20));
}
public void testJustOver20Percent() {
assertEquals("🔵🔵🔵⚪⚪⚪⚪⚪⚪⚪", getPercentageRounds(0.200001));
}
public void test30Percent() {
assertEquals("🔵🔵🔵⚪⚪⚪⚪⚪⚪⚪", getPercentageRounds(0.30));
}
public void testJustOver30Percent() {
assertEquals("🔵🔵🔵🔵⚪⚪⚪⚪⚪⚪", getPercentageRounds(0.300001));
}
public void test40Percent() {
assertEquals("🔵🔵🔵🔵⚪⚪⚪⚪⚪⚪", getPercentageRounds(0.40));
}
public void testJustOver40Percent() {
assertEquals("🔵🔵🔵🔵🔵⚪⚪⚪⚪⚪", getPercentageRounds(0.400001));
}
public void test50Percent() {
assertEquals("🔵🔵🔵🔵🔵⚪⚪⚪⚪⚪", getPercentageRounds(0.50));
}
public void testJustOver50Percent() {
assertEquals("🔵🔵🔵🔵🔵🔵⚪⚪⚪⚪", getPercentageRounds(0.500001));
}
public void test60Percent() {
assertEquals("🔵🔵🔵🔵🔵🔵⚪⚪⚪⚪", getPercentageRounds(0.60));
}
public void testJustOver60Percent() {
assertEquals("🔵🔵🔵🔵🔵🔵🔵⚪⚪⚪", getPercentageRounds(0.600001));
}
public void test70Percent() {
assertEquals("🔵🔵🔵🔵🔵🔵🔵⚪⚪⚪", getPercentageRounds(0.70));
}
public void testJustOver70Percent() {
assertEquals("🔵🔵🔵🔵🔵🔵🔵🔵⚪⚪", getPercentageRounds(0.700001));
}
public void test80Percent() {
assertEquals("🔵🔵🔵🔵🔵🔵🔵🔵⚪⚪", getPercentageRounds(0.80));
}
public void testJustOver80Percent() {
assertEquals("🔵🔵🔵🔵🔵🔵🔵🔵🔵⚪", getPercentageRounds(0.800001));
}
public void test90Percent() {
assertEquals("🔵🔵🔵🔵🔵🔵🔵🔵🔵⚪", getPercentageRounds(0.90));
}
public void testJustOver90Percent() {
assertEquals("🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵", getPercentageRounds(0.900001));
}
public void testAlmost100Percent() {
assertEquals("🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵", getPercentageRounds(0.999999));
}
public void test100Percent() {
assertEquals("🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵", getPercentageRounds(1.00));
}
public void testJustOver100Percent() {
assertEquals("🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵", getPercentageRounds(1.0000001));
}
public void test200Percent() {
assertEquals("🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵", getPercentageRounds(2.00));
}
public void testCrazyLargePercentage() {
assertEquals("🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵", getPercentageRounds(999999.999999));
}
public void testMaxIntegerValue() {
assertEquals("🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵", getPercentageRounds(Integer.MAX_VALUE));
}
public void testJustBelowZero() {
assertEquals("⚪⚪⚪⚪⚪⚪⚪⚪⚪⚪", getPercentageRounds(-0.0000001));
}
public void testNegative10Percent() {
assertEquals("⚪⚪⚪⚪⚪⚪⚪⚪⚪⚪", getPercentageRounds(-0.10));
}
public void testNegative20Percent() {
assertEquals("⚪⚪⚪⚪⚪⚪⚪⚪⚪⚪", getPercentageRounds(-0.20));
}
public void testCrazyLargeNegativePercentage() {
assertEquals("⚪⚪⚪⚪⚪⚪⚪⚪⚪⚪", getPercentageRounds(-999999.999999));
}
public void testMinIntegerValue() {
assertEquals("⚪⚪⚪⚪⚪⚪⚪⚪⚪⚪", getPercentageRounds(Integer.MIN_VALUE));
}
}
Comments
0 B
|👍
/👎
0 B
|👍
/👎
0 B
|👍
/👎