5 types derived from Tests
Microsoft.CodeAnalysis.CSharp (5)
Binder\DecisionDagBuilder.cs (5)
2089public sealed class True : Tests 2110public sealed class False : Tests 2133public sealed class One : Tests 2278public sealed class Not : Tests 2323public abstract class SequenceTests : Tests
183 references to Tests
Microsoft.CodeAnalysis.CSharp (183)
Binder\DecisionDagBuilder.cs (175)
191Tests tests = MakeAndSimplifyTestsAndBindings(input, pattern, out ImmutableArray<BoundPatternBinding> bindings); 195private Tests MakeAndSimplifyTestsAndBindings( 201Tests tests = MakeTestsAndBindings(input, pattern, bindingsBuilder); 207private static Tests SimplifyTestsAndBindings( 208Tests tests, 224var result = scanAndSimplify(tests); 228Tests scanAndSimplify(Tests tests) 232case Tests.SequenceTests seq: 235var newSequence = ArrayBuilder<Tests>.GetInstance(length); 242case Tests.True _: 243case Tests.False _: 245case Tests.One(BoundDagEvaluation e): 254return Tests.True.Instance; 256case Tests.One(BoundDagTest d): 260case Tests.Not n: 261return Tests.Not.Create(scanAndSimplify(n.Negated)); 268private Tests MakeTestsAndBindings( 281private Tests MakeTestsAndBindings( 297return Tests.True.Instance; 318private Tests MakeTestsAndBindingsForITuplePattern( 332var tests = ArrayBuilder<Tests>.GetInstance(4 + patternLength * 2); 334tests.Add(new Tests.One(new BoundDagTypeTest(syntax, iTupleType, input))); 336tests.Add(new Tests.One(valueAsITupleEvaluation)); 341tests.Add(new Tests.One(lengthEvaluation)); 343tests.Add(new Tests.One(new BoundDagValueTest(syntax, ConstantValue.Create(patternLength), lengthTemp))); 349tests.Add(new Tests.One(indexEvaluation)); 354return Tests.AndSequence.Create(tests); 391private Tests MakeTestsAndBindingsForDeclarationPattern( 398var tests = ArrayBuilder<Tests>.GetInstance(1); 416return Tests.AndSequence.Create(tests); 419private Tests MakeTestsForTypePattern( 425var tests = ArrayBuilder<Tests>.GetInstance(4); 427return Tests.AndSequence.Create(tests); 434ArrayBuilder<Tests> tests) 441tests.Add(new Tests.One(new BoundDagNonNullTest(syntax, isExplicitTest, input))); 453ArrayBuilder<Tests> tests) 471tests.Add(new Tests.One(new BoundDagTypeTest(syntax, type, input))); 476tests.Add(new Tests.One(evaluation)); 482private Tests MakeTestsForConstantPattern( 490return new Tests.One(new BoundDagExplicitNullTest(constant.Syntax, input)); 495return new Tests.One(new BoundDagValueTest(constant.Syntax, constant.ConstantValue, input)); 499var tests = ArrayBuilder<Tests>.GetInstance(2); 506tests.Add(Tests.False.Instance); 510tests.Add(new Tests.One(new BoundDagValueTest(constant.Syntax, constant.ConstantValue, input))); 512return Tests.AndSequence.Create(tests); 516private Tests MakeTestsAndBindingsForRecursivePattern( 524var tests = ArrayBuilder<Tests>.GetInstance(5); 534tests.Add(new Tests.One(evaluation)); 564tests.Add(new Tests.One(evaluation)); 574tests.Add(new Tests.One(new BoundDagTypeTest(recursive.Syntax, ErrorType(), input, hasErrors: true))); 588tests.Add(new Tests.One(new BoundDagTypeTest(recursive.Syntax, ErrorType(), input, hasErrors: true))); 603return Tests.AndSequence.Create(tests); 630tests.Add(new Tests.One(evaluation)); 636private Tests MakeTestsAndBindingsForNegatedPattern(BoundDagTemp input, BoundNegatedPattern neg, ArrayBuilder<BoundPatternBinding> bindings) 638var tests = MakeTestsAndBindings(input, neg.Negated, bindings); 639return Tests.Not.Create(tests); 642private Tests MakeTestsAndBindingsForBinaryPattern( 660Tests result = MakeTestsAndBindings(input, currentNode.Left, out output, bindings); 671static Tests makeTestsAndBindingsForBinaryPattern(DecisionDagBuilder @this, Tests leftTests, BoundDagTemp leftOutput, BoundDagTemp input, BoundBinaryPattern bin, out BoundDagTemp output, ArrayBuilder<BoundPatternBinding> bindings) 673var builder = ArrayBuilder<Tests>.GetInstance(2); 678var result = Tests.OrSequence.Create(builder); 686builder = ArrayBuilder<Tests>.GetInstance(2); 690builder.Add(new Tests.One(evaluation)); 691return Tests.AndSequence.Create(builder); 700return Tests.AndSequence.Create(builder); 705private Tests MakeTestsAndBindingsForRelationalPattern( 713var tests = ArrayBuilder<Tests>.GetInstance(2); 719tests.Add(Tests.False.Instance); 723tests.Add(new Tests.One(new BoundDagRelationalTest(rel.Syntax, rel.Relation, rel.ConstantValue, output, rel.HasErrors))); 726return Tests.AndSequence.Create(tests); 1014RoslynDebug.Assert(!(first.RemainingTests is Tests.False)); 1081stateForCase.RemainingTests.Filter(this, test, state, whenTrueValues, whenFalseValues, out Tests whenTrueTests, out Tests whenFalseTests, ref foundExplicitNullTest); 1213var remainingTests = stateForCase.RemainingTests.RemoveEvaluation(e); 1214if (remainingTests is Tests.False) 1416out Tests relationCondition, 1417out Tests relationEffect) 1419relationCondition = Tests.True.Instance; 1420relationEffect = Tests.True.Instance; 1442ArrayBuilder<Tests>? conditions = null; 1456relationCondition = Tests.AndSequence.Create(conditions); 1460relationEffect = new Tests.One(new BoundDagAssignmentEvaluation(syntax, target: other.Input, input: test.Input)); 1504(conditions ??= ArrayBuilder<Tests>.GetInstance()).Add(new Tests.One(new BoundDagValueTest(syntax, ConstantValue.Create(lengthValue), s1LengthTemp))); 1991public readonly Tests RemainingTests; 1998Tests RemainingTests, 2014public bool IsFullyMatched => RemainingTests is Tests.True && (WhenClause is null || WhenClause.ConstantValueOpt == ConstantValue.True); 2019public bool PatternIsSatisfied => RemainingTests is Tests.True; 2025public bool IsImpossible => RemainingTests is Tests.False; 2045public StateForCase WithRemainingTests(Tests newRemainingTests) 2052/// <inheritdoc cref="Tests.RewriteNestedLengthTests"/> 2075out Tests whenTrue, 2076out Tests whenFalse, 2079public virtual Tests RemoveEvaluation(BoundDagEvaluation e) => this; 2083public virtual Tests RewriteNestedLengthTests() => this; 2099out Tests whenTrue, 2100out Tests whenFalse, 2120out Tests whenTrue, 2121out Tests whenFalse, 2144out Tests whenTrue, 2145out Tests whenFalse, 2152relationCondition: out Tests relationCondition, 2153relationEffect: out Tests relationEffect)) 2201static Tests rewrite(bool decisionImpliesTrueOther, bool decisionPermitsTrueOther, Tests relationCondition, Tests relationEffect, Tests other) 2211public override Tests RemoveEvaluation(BoundDagEvaluation e) => e.Equals(Test) ? Tests.True.Instance : (Tests)this; 2215public override Tests RewriteNestedLengthTests() 2254static Tests? knownResult(BinaryOperatorKind relation, ConstantValue constant, int offset) 2281public readonly Tests Negated; 2282private Not(Tests negated) => Negated = negated; 2283public static Tests Create(Tests negated) => negated switch 2285Tests.True _ => Tests.False.Instance, 2286Tests.False _ => Tests.True.Instance, 2287Tests.Not n => n.Negated, // double negative 2288Tests.AndSequence a => new Not(a), 2289Tests.OrSequence a => Tests.AndSequence.Create(NegateSequenceElements(a.RemainingTests)), // use demorgan to prefer and sequences 2290Tests.One o => new Not(o), 2293private static ArrayBuilder<Tests> NegateSequenceElements(ImmutableArray<Tests> seq) 2295var builder = ArrayBuilder<Tests>.GetInstance(seq.Length); 2296foreach (var t in seq) 2301public override Tests RemoveEvaluation(BoundDagEvaluation e) => Create(Negated.RemoveEvaluation(e)); 2302public override Tests RewriteNestedLengthTests() => Create(Negated.RewriteNestedLengthTests()); 2311out Tests whenTrue, 2312out Tests whenFalse, 2315Negated.Filter(builder, test, state, whenTrueValues, whenFalseValues, out var whenTestTrue, out var whenTestFalse, ref foundExplicitNullTest); 2325public readonly ImmutableArray<Tests> RemainingTests; 2326protected SequenceTests(ImmutableArray<Tests> remainingTests) 2331public abstract Tests Update(ArrayBuilder<Tests> remainingTests); 2338out Tests whenTrue, 2339out Tests whenFalse, 2342var trueBuilder = ArrayBuilder<Tests>.GetInstance(RemainingTests.Length); 2343var falseBuilder = ArrayBuilder<Tests>.GetInstance(RemainingTests.Length); 2344foreach (var other in RemainingTests) 2346other.Filter(builder, test, state, whenTrueValues, whenFalseValues, out Tests oneTrue, out Tests oneFalse, ref foundExplicitNullTest); 2354public sealed override Tests RemoveEvaluation(BoundDagEvaluation e) 2356var builder = ArrayBuilder<Tests>.GetInstance(RemainingTests.Length); 2357foreach (var test in RemainingTests) 2362public sealed override Tests RewriteNestedLengthTests() 2364var builder = ArrayBuilder<Tests>.GetInstance(RemainingTests.Length); 2365foreach (var test in RemainingTests) 2387private AndSequence(ImmutableArray<Tests> remainingTests) : base(remainingTests) { } 2388public override Tests Update(ArrayBuilder<Tests> remainingTests) => Create(remainingTests); 2389public static Tests Create(Tests t1, Tests t2) 2394var builder = ArrayBuilder<Tests>.GetInstance(2); 2399public static Tests Create(ArrayBuilder<Tests> remainingTests) 2419var result = remainingTests.Count switch 2466private OrSequence(ImmutableArray<Tests> remainingTests) : base(remainingTests) { } 2468public override Tests Update(ArrayBuilder<Tests> remainingTests) => Create(remainingTests); 2469public static Tests Create(Tests t1, Tests t2) 2474var builder = ArrayBuilder<Tests>.GetInstance(2); 2479public static Tests Create(ArrayBuilder<Tests> remainingTests) 2499var result = remainingTests.Count switch
Binder\DecisionDagBuilder_ListPatterns.cs (8)
14private Tests MakeTestsAndBindingsForListPattern(BoundDagTemp input, BoundListPattern list, out BoundDagTemp output, ArrayBuilder<BoundPatternBinding> bindings) 24var tests = ArrayBuilder<Tests>.GetInstance(4 + subpatterns.Length * 2); 29tests.Add(new Tests.One(new BoundDagTypeTest(list.Syntax, ErrorType(), input, hasErrors: true))); 43tests.Add(new Tests.One(lengthEvaluation)); 45tests.Add(new Tests.One(list.HasSlice 67tests.Add(new Tests.One(sliceEvaluation)); 82tests.Add(new Tests.One(indexEvaluation)); 93return Tests.AndSequence.Create(tests);