public void TestIsElementForNeutralElementAndNoCofactor()
        {
            var groupAlgebra = new MultiplicativeGroupAlgebra(BigPrime.CreateWithoutChecks(11), BigPrime.CreateWithoutChecks(10), 2);

            Assert.That(groupAlgebra.IsPotentialElement(groupAlgebra.NeutralElement));
            Assert.That(!groupAlgebra.IsSafeElement(groupAlgebra.NeutralElement));
        }
        public void TestGetHashCodeSameForEqual()
        {
            var otherAlgebra = new MultiplicativeGroupAlgebra(
                prime, order, generator
                );

            Assert.That(groupAlgebra !.GetHashCode() == otherAlgebra.GetHashCode());
        }
        public void TestEqualsTrue()
        {
            var otherAlgebra = new MultiplicativeGroupAlgebra(
                prime, order, generator
                );

            Assert.That(groupAlgebra !.Equals(otherAlgebra));
        }
        public void TestEqualsFalseForOtherAlgebra()
        {
            var otherAlgebra = new MultiplicativeGroupAlgebra(
                BigPrime.CreateWithoutChecks(2 * 53 + 1),
                BigPrime.CreateWithoutChecks(53),
                4
                );

            Assert.IsFalse(groupAlgebra !.Equals(otherAlgebra));
        }
        public void TestCreateCryptoGroup()
        {
            var group = MultiplicativeGroupAlgebra.CreateCryptoGroup(
                prime, order, generator
                );
            var expectedGroupAlgebra = new MultiplicativeGroupAlgebra(
                prime, order, generator
                );

            Assert.That(group.Algebra.Equals(expectedGroupAlgebra));
        }
        public void TestDispose()
        {
            var algebra = new MultiplicativeGroupAlgebra(
                prime, order, generator
                );

            Assert.That(!algebra.Generator.Handle.IsClosed);

            algebra.Dispose();
            Assert.That(algebra.Generator.Handle.IsClosed);

            Assert.DoesNotThrow(algebra.Dispose);
        }