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);
 }
Beispiel #2
0
        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));
        }
Beispiel #3
0
        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));
        }
Beispiel #4
0
        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;
                }
            }
Beispiel #5
0
        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));
        }
Beispiel #7
0
    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;
    }
Beispiel #8
0
    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;
    }
Beispiel #9
0
 public override int GetHashCode()
 {
     return(base.GetHashCode() * -1521134295 +
            SymbolComparer.GetHashCode(Constructor));
 }