* @param probability 0 <= probability <=1
     * @param decimalPlaces
     * @param a_RoundingMode
     * @return true or false based on a random uniform test of probability
     */
    public static boolean randomUniformTest(
            Random a_Random,
            BigDecimal probability,
            int decimalPlaces,
            RoundingMode a_RoundingMode) {
        // 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;
            }
        }
        // Set decimalPlace precision to maximum of decimalPlaces and
        // probability.scale();
        int probabilityScale = probability.scale();
        if (decimalPlaces < probabilityScale) {
//            System.out.println(
//                    "Input decimalPlaces < probabilty.scale() in "
//                    + Generic_BigDecimal.class
//                    + ".randomUniformTest(Random,BigDecimal). "
//                    + "Set decimalPlaces = probabilty.scale().");
            decimalPlaces = probabilityScale;
        }
        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,
                    decimalPlaces,
                    a_RoundingMode);
        } else {
            return !randomTest(
                    a_Random,
                    BigDecimal.ONE.subtract(probability),
                    BigDecimal.ZERO,
                    BigDecimal.ONE,
                    midTestValue,
                    half_BigDecimal,
                    two_BigDecimal,
                    decimalPlaces,
                    a_RoundingMode);
        }
    }