public void EmptyCharSet_RemoveCharacterRange_Success() { var charset = new CharSet(); charset.Remove('a', 'c'); Assert.AreEqual(0, charset.Length); }
public void ThreeCharsSet_RemoveCharacterRangeExact_Success() { var charset = new CharSet(); charset.Add('a', 'c'); charset.Remove('a', 'c'); Assert.AreEqual(0, charset.Length); }
public void OneCharSet_RemoveSingleCharacter_Success() { var charset = new CharSet(); charset.Add('a'); charset.Remove('a'); Assert.AreEqual(0, charset.Length); }
public void ThreeCharsSet_RemoveCharacterRangeOverlapRight_Success() { var charset = new CharSet(); charset.Add('a', 'c'); charset.Remove('b', 'd'); Assert.AreEqual(1, charset.Length); Assert.IsTrue(charset.Includes('a')); }
public void ThreeCharsSet_RemoveSingleCharacterRight_Success() { var charset = new CharSet(); charset.Add('a', 'c'); charset.Remove('c'); Assert.AreEqual(2, charset.Length); Assert.IsTrue(charset.Includes('a')); Assert.IsTrue(charset.Includes('b')); }
/// <summary> /// 返回指定的字符对应的字符类索引。 /// </summary> /// <param name="ch">要获取字符类索引的字符。</param> /// <returns>字符对应的字符类索引。</returns> public HashSet <int> GetCharClass(char ch) { int cnt = charClassList.Count; HashSet <int> result = new HashSet <int>(); for (int i = 0; i < cnt; i++) { CharSet cc = charClassList[i]; if (cc.Contains(ch)) { if (cc.Count == 1) { // 完全包含当前字符类,直接添加。 result.Add(i); } else { // 当前的字符类需要被分割,从当前的字符类中剔除被分割的部分。 cc.Remove(ch); // 添加新字符类。 int newCC = charClassList.Count; result.Add(newCC); charClassList.Add(new CharSet() { ch }); // 这里虽然在 charClassRecord 里添加了新的项,但完全没有必要记录。 // 因为当前的字符类只包含一个字符,不可能再被分割了。 charClassRecord.Add(null); // 更新旧的字符类。 List <HashSet <int> > record = charClassRecord[i]; int rCnt = record.Count; for (int j = 0; j < rCnt; j++) { record[j].Add(newCC); } } } } return(result); }
/// <summary> /// Static constructor. /// </summary> static SubFieldCode() { _validCodes = new CharSet(); _validCodes.AddRange(DefaultFirstCode, DefaultLastCode); _validCodes.Remove('^'); }