コード例 #1
0
        public void TestModularRing()
        {
            ModularRing R = new ModularRing(12);

            // Ensure addution and multiplication work correctly
            for (int i = 0; i < R.Modulus; i++)
            {
                Assert.AreEqual(R.Add(i, R.AdditiveStructure.Inverse(i)), R.AdditiveIdentity);
                Assert.AreEqual(R.Add(i, R.AdditiveIdentity), i);

                // While modular rings may have multiplicative inverses, it is only the case if the modulus is prime
                // We can't ask for a ring to have this -> included in Field interface
                Assert.AreEqual(R.Multiply(i, R.MultiplicativeIdentity), i);
            }
        }
コード例 #2
0
        public void TestModularGroup()
        {
            // G = Z10
            ModularGroup G = new ModularGroup(10);

            // Make sure every element has an inverse, and is unchanged by the identity under the operation
            for (int i = 0; i < G.Modulus; i++)
            {
                Assert.AreEqual(G.Identity, G.Operation(i, G.Inverse(i)));
                Assert.AreEqual(G.Operation(G.Identity, i), i);
            }

            ModularMonoid M = G;
            ModularRing   R = G;

            // Ensure casts are working properly
            Assert.AreEqual(M, (ModularMonoid)R);
            Assert.AreEqual(M, (ModularMonoid)G);
            Assert.AreEqual(R, (ModularRing)G);
            Assert.AreEqual(R, (ModularRing)M);
            Assert.AreEqual(G, (ModularGroup)R);
            Assert.AreEqual(G, (ModularGroup)M);
        }