public void ApiDesign() { var query = new DataQuery(); var and = new AndCriterion(); and.Add(new DimensionCriterion() { Name = "JD_CATEGORY", Value = "A" }); and.Add(new DimensionCriterion() { Name = "FREQ", Value = "A" }); and.Add(new DimensionCriterion() { Name = "FREQ", Value = "M" }); and.Add(new TimePeriodCriterion() { StartTime = TimePeriod.FromDate(new DateTime(2000, 1, 1)), EndTime = TimePeriod.FromDate(new DateTime(2000, 12, 31)) }); var or = new OrCriterion(); or.Add(new DataSetCriterion() { Name = "JD014" }); and.Add(or); query.Criterion = and; }
internal TestRun And(ICriterion criterion) { var andCriterion = new AndCriterion(); andCriterion.Add(criterion); andCriterion.Add(_criterion); return(new TestRun(andCriterion)); }
public void Find_Matching_Frames_Complex() { var frameAccess = new FrameAccess(); var builder = new ContextFactoryBuilder(); builder.WithFrame(new FrameEntity { PosHi = 0, PosLo = 0, ThreadId = 1, Rax = ((ulong)1).ToHexString() }).WithFrame(new FrameEntity { PosHi = 0, PosLo = 0, ThreadId = 2, Rax = ((ulong)2).ToHexString() }).WithFrame(new FrameEntity { PosHi = 1, PosLo = 0, ThreadId = 2, Rax = ((ulong)2).ToHexString() }).WithFrame(new FrameEntity { PosHi = 1, PosLo = 1, ThreadId = 2, Rax = ((ulong)1).ToHexString(), Rbx = ((ulong)2).ToHexString() }); frameAccess.ContextFactory = builder.Build(); var rax = new RegisterEqualsCriterion(Register.Rax, ((ulong)1).ToHexString()); var rbx = new RegisterEqualsCriterion(Register.Rbx, ((ulong)2).ToHexString()); var and = new AndCriterion(new[] { rax, rbx }); var or = new OrCriterion(new[] { rax, rbx }); var not = new NotCriterion(rax); var all = new OrCriterion(new ICriterion[] { not, rax }); var none = new AndCriterion(new ICriterion[] { not, rax }); var andAll = new AndCriterion(new ICriterion[] { and, all }); var andResults = frameAccess.Search("", and); var orResults = frameAccess.Search("", or); var notResults = frameAccess.Search("", not); var allResults = frameAccess.Search("", all); var noneResults = frameAccess.Search("", none); var andAllResults = frameAccess.Search("", andAll); andResults.Single().RegisterSet.Rax.Should().Be(1); andResults.Single().RegisterSet.Rbx.Should().Be(2); orResults.Should().HaveCount(2); notResults.Should().HaveCount(2); allResults.Should().HaveCount(4); noneResults.Should().HaveCount(0); andAllResults.Should().HaveCount(1); }
/// <summary> /// Visits the specified and criterion. /// </summary> /// <param name="andCriterion">The and criterion.</param> /// <returns>FramePredicateExpression.</returns> public object Visit(AndCriterion andCriterion) { FramePredicateExpression result = null; foreach (var c in andCriterion.Criteria) { var f = (FramePredicateExpression)c.Accept(this); if (result == null) { result = f; continue; } result = result.And(f); } return(result); }
public void Create_The_Correct_Expression_Tree_For_And() { var visitor = new FrameCriterionVisitor(); var criteria1 = new RegisterEqualsCriterion(Register.Rax, ((ulong)0).ToHexString()); var criteria2 = new RegisterEqualsCriterion(Register.Rbx, ((ulong)1).ToHexString()); var and = new AndCriterion(new[] { criteria1, criteria2 }); var f = visitor.Visit(and); var frame = new FrameEntity { Rax = ((ulong)0).ToHexString(), Rbx = ((ulong)1).ToHexString() }; var frame2 = new FrameEntity { Rax = ((ulong)1).ToHexString(), Rbx = ((ulong)1).ToHexString() }; var method = ((FramePredicateExpression)f).Compile(); new[] { frame, frame2 }.Single(x => method(x)).Should().Be(frame); }