package com.kickstarter.libs.utils;
import com.kickstarter.libs.NumberOptions;
import junit.framework.TestCase;
import java.math.RoundingMode;
import java.util.Locale;
public final class NumberUtilsTest extends TestCase {
public void testFlooredPercentage() {
assertEquals("50%", NumberUtils.flooredPercentage(50.0f));
assertEquals("99%", NumberUtils.flooredPercentage(99.99f));
assertEquals("0%", NumberUtils.flooredPercentage(0.01f));
assertEquals("1,000%", NumberUtils.flooredPercentage(1000.0f));
}
public void testFlooredPercentage_withFrenchLocale() {
assertEquals("50 %", NumberUtils.flooredPercentage(50.0f, Locale.FRENCH));
}
public void testFlooredPercentage_withGermanLocale() {
assertEquals("1.000%", NumberUtils.flooredPercentage(1000.0f, Locale.GERMAN));
}
public void testFormatNumber_int() {
assertEquals("100", NumberUtils.format(100));
assertEquals("1,000", NumberUtils.format(1000));
}
public void testFormatNumber_intWithGermanyLocale() {
assertEquals("1.000", NumberUtils.format(1000, Locale.GERMANY));
}
public void testFormatNumber_float() {
assertEquals("100", NumberUtils.format(100.0f));
assertEquals("1,000", NumberUtils.format(1000.0f));
assertEquals("1,001", NumberUtils.format(1000.6f));
}
public void testFormatNumber_floatRounding() {
assertEquals("1", NumberUtils.format(1.1f));
assertEquals("1", NumberUtils.format(1.5f));
assertEquals("2", NumberUtils.format(2.5f));
assertEquals("2", NumberUtils.format(1.51f));
assertEquals("1", NumberUtils.format(1.9f, NumberOptions.builder().roundingMode(RoundingMode.DOWN).build()));
assertEquals("2", NumberUtils.format(1.1f, NumberOptions.builder().roundingMode(RoundingMode.UP).build()));
}
public void testFormatNumber_floatWithPrecision() {
assertEquals("100.12", NumberUtils.format(100.12f, NumberOptions.builder().precision(2).build()));
assertEquals("100.2", NumberUtils.format(100.16f, NumberOptions.builder().precision(1).build()));
assertEquals("100.00", NumberUtils.format(100.0f, NumberOptions.builder().precision(2).build()));
}
public void testFormatNumber_floatWithBucket() {
assertEquals("100", NumberUtils.format(100.0f, NumberOptions.builder().bucketAbove(100.0f).build()));
assertEquals("100", NumberUtils.format(100.0f, NumberOptions.builder().bucketAbove(1000.0f).build()));
assertEquals("1K", NumberUtils.format(1000.0f, NumberOptions.builder().bucketAbove(1000.0f).build()));
assertEquals("10K", NumberUtils.format(10000.0f, NumberOptions.builder().bucketAbove(1000.0f).build()));
assertEquals("100K", NumberUtils.format(100_000.0f, NumberOptions.builder().bucketAbove(1000.0f).build()));
assertEquals("1,000K", NumberUtils.format(1_000_000.0f, NumberOptions.builder().bucketAbove(1000.0f).build()));
assertEquals("100", NumberUtils.format(100.0f, NumberOptions.builder().bucketAbove(10000.0f).build()));
assertEquals("1,000", NumberUtils.format(1000.0f, NumberOptions.builder().bucketAbove(10000.0f).build()));
assertEquals("10K", NumberUtils.format(10000.0f, NumberOptions.builder().bucketAbove(10000.0f).build()));
assertEquals("100K", NumberUtils.format(100_000.0f, NumberOptions.builder().bucketAbove(10000.0f).build()));
assertEquals("1,000K", NumberUtils.format(1_000_000.0f, NumberOptions.builder().bucketAbove(10000.0f).build()));
assertEquals("100", NumberUtils.format(100.0f, NumberOptions.builder().bucketAbove(100_000.0f).build()));
assertEquals("1,000", NumberUtils.format(1000.0f, NumberOptions.builder().bucketAbove(100_000.0f).build()));
assertEquals("10,000", NumberUtils.format(10000.0f, NumberOptions.builder().bucketAbove(100_000.0f).build()));
assertEquals("100K", NumberUtils.format(100_000.0f, NumberOptions.builder().bucketAbove(100_000.0f).build()));
assertEquals("1,000K", NumberUtils.format(1_000_000.0f, NumberOptions.builder().bucketAbove(100_000.0f).build()));
assertEquals("100", NumberUtils.format(100.0f, NumberOptions.builder().bucketAbove(1_000_000.0f).build()));
assertEquals("1,000", NumberUtils.format(1000.0f, NumberOptions.builder().bucketAbove(1_000_000.0f).build()));
assertEquals("10,000", NumberUtils.format(10000.0f, NumberOptions.builder().bucketAbove(1_000_000.0f).build()));
assertEquals("100,000", NumberUtils.format(100_000.0f, NumberOptions.builder().bucketAbove(1_000_000.0f).build()));
assertEquals("1M", NumberUtils.format(1_000_000.0f, NumberOptions.builder().bucketAbove(1_000_000.0f).build()));
assertEquals("111", NumberUtils.format(111.0f, NumberOptions.builder().bucketAbove(1000.0f).bucketPrecision(1).build()));
assertEquals("111.00", NumberUtils.format(111.0f, NumberOptions.builder().bucketAbove(111.0f).bucketPrecision(1).precision(2).build()));
assertEquals("1.1K", NumberUtils.format(1111.0f, NumberOptions.builder().bucketAbove(1000.0f).bucketPrecision(1).build()));
assertEquals("1.1K", NumberUtils.format(1111.0f, NumberOptions.builder().bucketAbove(1000.0f).bucketPrecision(1).precision(2).build()));
assertEquals("11.1K", NumberUtils.format(11111.0f, NumberOptions.builder().bucketAbove(1000.0f).bucketPrecision(1).build()));
assertEquals("111.1K", NumberUtils.format(111_111.0f, NumberOptions.builder().bucketAbove(1000.0f).bucketPrecision(1).build()));
assertEquals("1,111.1K", NumberUtils.format(1_111_111.0f, NumberOptions.builder().bucketAbove(1000.0f).bucketPrecision(1).build()));
}
public void testFormatNumber_floatWithCurrency() {
assertEquals("$100", NumberUtils.format(100.0f, NumberOptions.builder().currencySymbol("$").build()));
assertEquals("€100", NumberUtils.format(100.0f, NumberOptions.builder().currencySymbol("€").build()));
assertEquals("$100 CAD", NumberUtils.format(100.0f, NumberOptions.builder().currencySymbol("$").currencyCode("CAD").build()));
}
public void testFormatNumber_floatWithCurrencyAndGermanyLocale() {
assertEquals("100 $", NumberUtils.format(100.0f, NumberOptions.builder().currencySymbol("$").build(), Locale.GERMANY));
assertEquals("1.000", NumberUtils.format(1000.0f, NumberOptions.builder().build(), Locale.GERMANY));
assertEquals("100,12", NumberUtils.format(100.12f, NumberOptions.builder().precision(2).build(), Locale.GERMANY));
}
}