* @param probability 0 <= probability <=1
     * @param a_MathContext
     * @return true or false based on a random uniform test of probability
     */
    public static boolean randomUniformTest(
            Random a_Random,
            BigDecimal probability,
            MathContext a_MathContext) {
        // Special case probability <= 0
        if (probability.compareTo(BigDecimal.ZERO) != 1) {
            if (probability.compareTo(BigDecimal.ZERO) == 0) {
                return false;
            } else {
                System.out.println(
                        "Warning probabilty negative in "
                        + Generic_BigDecimal.class
                        + ".randomUniformTest(Random,BigDecimal). "
                        + "Returning false.");
                return false;
            }
        }
        // Special case probability >= 1
        if (probability.compareTo(BigDecimal.ONE) != -1) {
            if (probability.compareTo(BigDecimal.ONE) == 0) {
                return true;
            } else {
                System.out.println(
                        "Warning probabilty greater > 1 in "
                        + Generic_BigDecimal.class
                        + ".randomUniformTest(Random,BigDecimal). "
                        + "Returning true.");
                return true;
            }
        }
        BigDecimal midTestValue = new BigDecimal("0.5");
        BigDecimal half_BigDecimal = new BigDecimal("0.5");
        BigDecimal two_BigDecimal = new BigDecimal("2.0");
        if (probability.compareTo(midTestValue) == 0) {
            return a_Random.nextBoolean();
        }
        if (probability.compareTo(midTestValue) == -1) {
            return randomTest(
                    a_Random,
                    probability,
                    BigDecimal.ZERO,
                    BigDecimal.ONE,
                    midTestValue,
                    half_BigDecimal,
                    two_BigDecimal,
                    a_MathContext);
        } else {
            return !randomTest(
                    a_Random,
                    BigDecimal.ONE.subtract(probability),
                    BigDecimal.ZERO,
                    BigDecimal.ONE,
                    midTestValue,
                    half_BigDecimal,
                    two_BigDecimal,
                    a_MathContext);
        }
    }