/// <summary> /// Creates a uniform distribution over all digits from 0 to <paramref name="maxDigit"/> (inclusive), /// excluding <paramref name="digit"/>. /// </summary> /// <param name="digit">The digit to exclude.</param> /// <param name="maxDigit">The maximum digit.</param> /// <returns>The created distribution.</returns> private static DiscreteChar AllDigitsExcept(int digit, int maxDigit) { Debug.Assert(maxDigit >= 0 && maxDigit <= 9 && digit >= 0 && digit <= 9, "The parameters must represent digits."); Debug.Assert(digit <= maxDigit, "digit must be between 0 and maxDigit."); Debug.Assert(maxDigit > 0, "The distribution must cover at least one digit."); if (digit == 0) { return(DiscreteChar.InRange('1', (char)('0' + maxDigit))); } if (digit == maxDigit) { return(DiscreteChar.InRange('0', (char)('0' + maxDigit - 1))); } return(DiscreteChar.InRanges('0', (char)('0' + digit - 1), (char)('0' + digit + 1), (char)('0' + maxDigit))); }
public void Char() { var charDist1 = StringDistribution.Char('a'); StringInferenceTestUtilities.TestProbability(charDist1, 1.0, "a"); StringInferenceTestUtilities.TestProbability(charDist1, 0.0, "aa", string.Empty); var charDist2 = StringDistribution.Char(DiscreteChar.InRange('a', 'c')); StringInferenceTestUtilities.TestProbability(charDist2, 1.0 / 3.0, "a", "b", "c"); StringInferenceTestUtilities.TestProbability(charDist2, 0.0, "ab", string.Empty); Vector charProbs3 = PiecewiseVector.Zero(char.MaxValue + 1); charProbs3['a'] = 0.1; charProbs3['b'] = 0.9; var charDist3 = StringDistribution.SingleElement(DiscreteChar.FromVector(charProbs3)); StringInferenceTestUtilities.TestProbability(charDist3, 0.1, "a"); StringInferenceTestUtilities.TestProbability(charDist3, 0.9, "b"); StringInferenceTestUtilities.TestProbability(charDist3, 0.0, "c", "ab", string.Empty); }