public void WildcardDigestReturnsFalseForNonMatches(string wildcard, string testString, bool maybeMatches) { WildcardDigest wildcardDigest = WildcardDigest.Create(wildcard); WildcardDigest testStringDigest = WildcardDigest.Create(testString); Assert.Equal(maybeMatches, testStringDigest.MaybeMatches(wildcardDigest)); }
/// <summary> /// Create a string digest /// </summary> /// <param name="s">The string to digest.</param> /// <returns>A digest which can be used to quickly eliminate /// strings which will not match a wildcard check.</returns> public static WildcardDigest Create(string s) { WildcardDigest digest = new WildcardDigest(); for (int index = 0; index < s.Length; ++index) { digest.value |= s[index] == '?' || s[index] == '*' ? 0 : s[index] > MaxAsciiValue ? 1 : Bits[s[index]]; } return(digest); }
/// <summary> /// Return true if the string which produced this digest might /// match the digest produced by the wildcard string. /// </summary> /// <param name="wildcard">The digest of the wildcard pattern</param> /// <returns>True, if but not only if the string is a match.</returns> public bool MaybeMatches(WildcardDigest wildcard) => wildcard.value == (value & wildcard.value);