public void Interesection() { var mo = new InversionListCodePointSet('m', 'o'); var ao = new InversionListCodePointSet('a', 'o'); var mx = new InversionListCodePointSet('m', 'z'); Assert.AreEqual(mo, ao.Intersect(mx)); }
public void Identities() { var a = new InversionListCodePointSet('a'); var b = new InversionListCodePointSet('b'); var x = new InversionListCodePointSet('x'); Assert.AreEqual(a.Union(b).Complement(), a.Complement().Intersect(b.Complement()), "!(a|b) == !a & !b"); Assert.AreEqual(a.Union(x).Complement(), a.Complement().Intersect(x.Complement()), "!(a|x) == !a & !x"); }
public void Union() { var eg = new InversionListCodePointSet('e', 'g'); var xz = new InversionListCodePointSet('x', 'z'); var fhxz = new InversionListCodePointSet('f', 'h').Union(xz); var ehxz = new InversionListCodePointSet('e', 'h').Union(xz); Assert.AreEqual(ehxz, eg.Union(fhxz)); }
public IEnumerable <Input> GetClasses(InversionListCodePointSet codePoints) { var result = new List <Input>(); for (var i = 0; i < classes.Count; i++) { if (!classes[i].Intersect(codePoints).IsEmpty()) // TODO an overlaps method would optimize this { result.Add(new Input(i)); } } return(result); }
/** * The effect of this method is to ensure that all characters in the * set are not in the same equivalece class with any characters not * in the set. */ public void MakeClasses(InversionListCodePointSet set) { var oldCount = Count; for (var i = 0; i < oldCount; i++) { if (classes[i].Equals(set)) { return; // A class for exactly this set already exists } var intersection = classes[i].Intersect(set); var intersectionComplement = intersection.Complement(); // used for difference later if (intersection.IsEmpty()) { continue; } if (intersection.Equals(classes[i])) // i.e. classes[i] is subset of set { set = set.Intersect(intersectionComplement); // set -= intersection continue; } if (intersection.Equals(set)) // i.e. set is subset of classes[i] { classes[i] = classes[i].Intersect(intersectionComplement); // classes[i] -= intersection classes.Add(intersection); return; } set = set.Intersect(intersectionComplement); // set -= intersection classes[i] = classes[i].Intersect(intersectionComplement); // classes[i] -= intersection classes.Add(intersection); } }
public CharClassSpec(InversionListCodePointSet codePoints) { CodePoints = codePoints; }