public MatchSymbols( IReadOnlyDictionary <AnonymousTypeKey, AnonymousTypeValue> anonymousTypeMap, SourceAssemblySymbol sourceAssembly, AssemblySymbol otherAssembly, ImmutableDictionary <ISymbol, ImmutableArray <ISymbol> > otherSynthesizedMembersOpt, DeepTranslator deepTranslatorOpt) { _anonymousTypeMap = anonymousTypeMap; _sourceAssembly = sourceAssembly; _otherAssembly = otherAssembly; _otherSynthesizedMembersOpt = otherSynthesizedMembersOpt; _comparer = new SymbolComparer(this, deepTranslatorOpt); _matches = new ConcurrentDictionary <Symbol, Symbol>(ReferenceEqualityComparer.Instance); _otherMembers = new ConcurrentDictionary <ISymbol, IReadOnlyDictionary <string, ImmutableArray <ISymbol> > >(ReferenceEqualityComparer.Instance); }
public void EqualsTest() { SymbolComparer sc = new SymbolComparer(); AbstractionSyntaxTree a = new AbstractionSyntaxTree(">(a,b)"); AbstractionSyntaxTree b = new AbstractionSyntaxTree(">(a,b)"); Assert.IsTrue(sc.Equals(a.Root, b.Root)); a = new AbstractionSyntaxTree("&(&(a,b), c)"); b = new AbstractionSyntaxTree("&(&(a,b), c)"); Assert.IsTrue(sc.Equals(a.Root, b.Root)); a = new AbstractionSyntaxTree(">(a,b)"); b = new AbstractionSyntaxTree("|(~(a), b)"); Assert.IsFalse(sc.Equals(a.Root, b.Root)); }
public static void Equals() { var syntaxTree = CSharpSyntaxTree.ParseText( @" namespace N { public class C { public int M(int i1, int i2) => 1; } }"); var compilation = CSharpCompilation.Create("test", new[] { syntaxTree }); var semanticModel = compilation.GetSemanticModel(syntaxTree); var parameters = syntaxTree.FindMethodDeclaration("M").ParameterList.Parameters; var symbol1 = semanticModel.GetDeclaredSymbol(parameters[0], CancellationToken.None); var symbol2 = semanticModel.GetDeclaredSymbol(parameters[1], CancellationToken.None); Assert.AreEqual(true, SymbolComparer.Equals((ISymbol)symbol1, (ISymbol)symbol1)); Assert.AreEqual(false, SymbolComparer.Equals((ISymbol)symbol1, (ISymbol)symbol2)); Assert.AreEqual(true, ParameterSymbolComparer.Equals(symbol1, symbol1)); Assert.AreEqual(false, ParameterSymbolComparer.Equals(symbol1, symbol2)); Assert.AreEqual(SymbolComparer.Default.GetHashCode(symbol1), ParameterSymbolComparer.Default.GetHashCode(symbol1)); Assert.AreNotEqual(SymbolComparer.Default.GetHashCode(symbol1), ParameterSymbolComparer.Default.GetHashCode(symbol2)); }
public static void RegisterCompilationStartAction(CompilationStartAnalysisContext csac) { var item = GetTypeSymbol(csac.Compilation); if (item.Item1 == null || item.Item2 == null || item.Item3 == null || item.Item4 == null || item.Item5 == null) { return; } var sta = csac.Compilation.Assembly.GetAttributes().FirstOrDefault(attr => SymbolComparer.Equals(attr.AttributeClass, item.Item5)); string startupName; #if DEBUG if (sta == null) { startupName = $"{csac.Compilation.Assembly.Name}.Startup"; } #else if (sta == null) { return; } #endif else if (sta.ConstructorArguments.Length == 1) { if (sta.ConstructorArguments[0].Value is INamedTypeSymbol st && SymbolComparer.Equals(st.ContainingAssembly, csac.Compilation.Assembly)) { startupName = $"{st.ContainingNamespace.Name}.{st.Name}"; } else { return; } }
public static void Equivalent() { var syntaxTree = CSharpSyntaxTree.ParseText( @" namespace N { public class C { public int P1 { get; } public int P2 { get; } } }"); var compilation = CSharpCompilation.Create("test", new[] { syntaxTree }); var semanticModel = compilation.GetSemanticModel(syntaxTree); var node1 = syntaxTree.FindPropertyDeclaration("P1"); var symbol1 = semanticModel.GetDeclaredSymbol(node1, CancellationToken.None); var node2 = syntaxTree.FindPropertyDeclaration("P2"); var symbol2 = semanticModel.GetDeclaredSymbol(node2, CancellationToken.None); Assert.AreEqual(true, SymbolComparer.Equivalent((ISymbol)symbol1, (ISymbol)symbol1)); Assert.AreEqual(false, SymbolComparer.Equivalent((ISymbol)symbol1, (ISymbol)symbol2)); Assert.AreEqual(true, PropertySymbolComparer.Equivalent(symbol1, symbol1)); Assert.AreEqual(false, PropertySymbolComparer.Equivalent(symbol1, symbol2)); }
public static void Equivalent() { var syntaxTree = CSharpSyntaxTree.ParseText( @" namespace N { public class C { private int f1; private int f2; } }"); var compilation = CSharpCompilation.Create("test", new[] { syntaxTree }); var semanticModel = compilation.GetSemanticModel(syntaxTree); var node1 = syntaxTree.FindFieldDeclaration("f1"); var symbol1 = semanticModel.GetDeclaredSymbol(node1.Declaration.Variables[0], CancellationToken.None); var node2 = syntaxTree.FindFieldDeclaration("f2"); var symbol2 = semanticModel.GetDeclaredSymbol(node2.Declaration.Variables[0], CancellationToken.None); Assert.AreEqual(true, SymbolComparer.Equivalent(symbol1, symbol1)); Assert.AreEqual(false, SymbolComparer.Equivalent(symbol1, symbol2)); Assert.AreEqual(true, FieldSymbolComparer.Equivalent((IFieldSymbol)symbol1, (IFieldSymbol)symbol1)); Assert.AreEqual(false, FieldSymbolComparer.Equivalent((IFieldSymbol)symbol1, (IFieldSymbol)symbol2)); }
public void Init() { rng = new Rng(); paylineEvaluator = new PaylineEvaluator(); paytable = new Paytable(); // Reels ReelGroup reels = new ReelGroup(); ReelStrip reel = new ReelStrip(); reel.AddSymbol(new Symbol(0, "AA")); reel.AddSymbol(new Symbol(1, "BB")); reel.AddSymbol(new Symbol(2, "CC")); reels.AddReel(reel); reels.AddReel(reel); reels.AddReel(reel); reels.AddReel(reel); reels.AddReel(reel); // Paylines PaylineGroup paylines = new PaylineGroup(); Payline payline1 = new Payline(); payline1.AddPaylineCoord(new PaylineCoord { ReelIndex = 0, Offset = 0 }); payline1.AddPaylineCoord(new PaylineCoord { ReelIndex = 1, Offset = 0 }); payline1.AddPaylineCoord(new PaylineCoord { ReelIndex = 2, Offset = 0 }); payline1.AddPaylineCoord(new PaylineCoord { ReelIndex = 3, Offset = 0 }); payline1.AddPaylineCoord(new PaylineCoord { ReelIndex = 4, Offset = 0 }); Payline payline2 = new Payline(); payline2.AddPaylineCoord(new PaylineCoord { ReelIndex = 0, Offset = 1 }); payline2.AddPaylineCoord(new PaylineCoord { ReelIndex = 1, Offset = 1 }); payline2.AddPaylineCoord(new PaylineCoord { ReelIndex = 2, Offset = 1 }); payline2.AddPaylineCoord(new PaylineCoord { ReelIndex = 3, Offset = 1 }); payline2.AddPaylineCoord(new PaylineCoord { ReelIndex = 4, Offset = 1 }); Payline payline3 = new Payline(); payline3.AddPaylineCoord(new PaylineCoord { ReelIndex = 0, Offset = 2 }); payline3.AddPaylineCoord(new PaylineCoord { ReelIndex = 1, Offset = 2 }); payline3.AddPaylineCoord(new PaylineCoord { ReelIndex = 2, Offset = 2 }); payline3.AddPaylineCoord(new PaylineCoord { ReelIndex = 3, Offset = 2 }); payline3.AddPaylineCoord(new PaylineCoord { ReelIndex = 4, Offset = 2 }); Payline payline4 = new Payline(); payline4.AddPaylineCoord(new PaylineCoord { ReelIndex = 0, Offset = 0 }); payline4.AddPaylineCoord(new PaylineCoord { ReelIndex = 1, Offset = 1 }); payline4.AddPaylineCoord(new PaylineCoord { ReelIndex = 2, Offset = 2 }); payline4.AddPaylineCoord(new PaylineCoord { ReelIndex = 3, Offset = 1 }); payline4.AddPaylineCoord(new PaylineCoord { ReelIndex = 4, Offset = 0 }); Payline payline5 = new Payline(); payline5.AddPaylineCoord(new PaylineCoord { ReelIndex = 0, Offset = 2 }); payline5.AddPaylineCoord(new PaylineCoord { ReelIndex = 1, Offset = 1 }); payline5.AddPaylineCoord(new PaylineCoord { ReelIndex = 2, Offset = 0 }); payline5.AddPaylineCoord(new PaylineCoord { ReelIndex = 3, Offset = 1 }); payline5.AddPaylineCoord(new PaylineCoord { ReelIndex = 4, Offset = 2 }); paylines.AddPayline(payline1); paylines.AddPayline(payline2); paylines.AddPayline(payline3); paylines.AddPayline(payline4); paylines.AddPayline(payline5); // PayCombos ISymbolComparer comparer = new SymbolComparer(); comparer.Substitute(new Symbol(0, "AA"), new Symbol(3, "MX")); comparer.Substitute(new Symbol(1, "BB"), new Symbol(3, "MX")); PayComboGroup payCombos = new PayComboGroup(comparer); // AA payCombos.AddPayCombo(new PayCombo(new Symbol(0, "AA"), 5, 200)); payCombos.AddPayCombo(new PayCombo(new Symbol(0, "AA"), 4, 150)); payCombos.AddPayCombo(new PayCombo(new Symbol(0, "AA"), 3, 100)); // BB payCombos.AddPayCombo(new PayCombo(new Symbol(1, "BB"), 5, 175)); payCombos.AddPayCombo(new PayCombo(new Symbol(1, "BB"), 4, 125)); payCombos.AddPayCombo(new PayCombo(new Symbol(1, "BB"), 3, 85)); // CC payCombos.AddPayCombo(new PayCombo(new Symbol(2, "CC"), 5, 130)); payCombos.AddPayCombo(new PayCombo(new Symbol(2, "CC"), 4, 80)); payCombos.AddPayCombo(new PayCombo(new Symbol(2, "CC"), 3, 30)); // MX payCombos.AddPayCombo(new PayCombo(new Symbol(3, "MX"), 5, 44)); payCombos.AddPayCombo(new PayCombo(new Symbol(3, "MX"), 4, 33)); payCombos.AddPayCombo(new PayCombo(new Symbol(3, "MX"), 3, 22)); paytable.BaseGameReelGroup = reels; paytable.PaylineGroup = paylines; paytable.PayComboGroup = payCombos; }
public void Init() { rng = new Rng(); paylineEvaluator = new PaylineEvaluator(); paytable = new Paytable(); // Reels ReelGroup reels = new ReelGroup(); ReelStrip reel = new ReelStrip(); reel.AddSymbol(new Symbol(0, "AA")); reel.AddSymbol(new Symbol(1, "BB")); reel.AddSymbol(new Symbol(2, "CC")); reel.AddSymbol(new Symbol(3, "WW")); reels.AddReel(reel); reels.AddReel(reel); reels.AddReel(reel); reels.AddReel(reel); reels.AddReel(reel); // Paylines PaylineGroup paylines = new PaylineGroup(); Payline payline1 = new Payline(); payline1.AddPaylineCoord(new PaylineCoord { ReelIndex = 0, Offset = 0 }); payline1.AddPaylineCoord(new PaylineCoord { ReelIndex = 1, Offset = 0 }); payline1.AddPaylineCoord(new PaylineCoord { ReelIndex = 2, Offset = 0 }); payline1.AddPaylineCoord(new PaylineCoord { ReelIndex = 3, Offset = 0 }); payline1.AddPaylineCoord(new PaylineCoord { ReelIndex = 4, Offset = 0 }); paylines.AddPayline(payline1); // PayCombos ISymbolComparer comparer = new SymbolComparer(); comparer.Substitute(new Symbol(3, "WW"), new Symbol(0, "AA")); comparer.Substitute(new Symbol(3, "WW"), new Symbol(0, "BB")); comparer.Substitute(new Symbol(3, "WW"), new Symbol(0, "CC")); PayComboGroup payCombos = new PayComboGroup(comparer); // WW payCombos.AddPayCombo(new PayCombo(new Symbol(3, "WW"), 5, 1000)); payCombos.AddPayCombo(new PayCombo(new Symbol(3, "WW"), 4, 500)); payCombos.AddPayCombo(new PayCombo(new Symbol(3, "WW"), 3, 100)); // AA payCombos.AddPayCombo(new PayCombo(new Symbol(0, "AA"), 5, 50)); payCombos.AddPayCombo(new PayCombo(new Symbol(0, "AA"), 4, 25)); payCombos.AddPayCombo(new PayCombo(new Symbol(0, "AA"), 3, 10)); // BB payCombos.AddPayCombo(new PayCombo(new Symbol(1, "BB"), 5, 15)); payCombos.AddPayCombo(new PayCombo(new Symbol(1, "BB"), 4, 10)); payCombos.AddPayCombo(new PayCombo(new Symbol(1, "BB"), 3, 5)); // CC payCombos.AddPayCombo(new PayCombo(new Symbol(2, "CC"), 5, 10)); payCombos.AddPayCombo(new PayCombo(new Symbol(2, "CC"), 4, 5)); payCombos.AddPayCombo(new PayCombo(new Symbol(2, "CC"), 3, 1)); paytable.BaseGameReelGroup = reels; paytable.PaylineGroup = paylines; paytable.PayComboGroup = payCombos; }
public override int GetHashCode() { return(base.GetHashCode() * -1521134295 + SymbolComparer.GetHashCode(Constructor)); }