Example #1
0
        public void GetGroupsOfOrderFour()
        {
            NamedElement   identity = new NamedElement('e');
            NamedElement   aelement = new NamedElement('a');
            NamedElement   belement = new NamedElement('b');
            NamedElement   celement = new NamedElement('c');
            OperationTable table    = new OperationTable(new List <IElement>()
            {
                identity, aelement, belement, celement
            }, true);

            IList <OperationTable> solutions = table.GetSolutions().ToList();

            Assert.IsNotNull(solutions);
            Assert.AreEqual(4, solutions.Count);

            foreach (OperationTable solution in solutions)
            {
                Assert.IsTrue(solution.IsClosed);
                Assert.IsTrue(solution.IsCommutative);
            }

            IList <IGroup> groups = new List <IGroup>();

            foreach (OperationTable ot in solutions)
            {
                groups.Add(new TableGroup(ot));
            }

            IList <IGroup> dgroups = GroupUtilities.GetNonIsomorphic(groups);

            Assert.IsNotNull(dgroups);
            Assert.AreEqual(2, dgroups.Count);
        }
Example #2
0
        public void CreateWithNamedIdentityAndOneElement()
        {
            NamedElement identity = new NamedElement('e');
            NamedElement aelement = new NamedElement('a');
            OperationTable table = new OperationTable(new List<IElement>() { identity , aelement}, true);

            identity.OperationTable = table;
            aelement.OperationTable = table;

            table.SetValue(aelement, aelement, identity);

            Assert.IsTrue(table.HasIdentity);
            Assert.IsTrue(table.IsAssociative);
            Assert.IsTrue(table.IsClosed);
            Assert.IsTrue(table.IsCommutative);

            Assert.AreEqual(2, table.Elements.Count);

            Assert.AreEqual(identity, table.GetValue(identity, identity));
            Assert.AreEqual(aelement, table.GetValue(aelement, identity));
            Assert.AreEqual(aelement, table.GetValue(identity, aelement));
            Assert.AreEqual(identity, table.GetValue(aelement, aelement));

            Assert.AreEqual(1, identity.Order);
            Assert.AreEqual(2, aelement.Order);
        }
Example #3
0
        private static IList <IGroup> GetGroupsOfOrder(int order)
        {
            IList <IElement> elements = new List <IElement>();

            for (int k = 0; k < order; k++)
            {
                elements.Add(new NamedElement(k));
            }

            OperationTable         table     = new OperationTable(elements, true);
            IList <OperationTable> solutions = table.GetSolutions().ToList();

            foreach (OperationTable solution in solutions)
            {
                Assert.IsTrue(solution.HasIdentity);
                Assert.IsTrue(solution.IsAssociative);
                Assert.IsTrue(solution.IsClosed);
            }

            IList <IGroup> groups = new List <IGroup>();

            foreach (OperationTable ot in solutions)
            {
                groups.Add(new TableGroup(ot));
            }

            IList <IGroup> dgroups = GroupUtilities.GetNonIsomorphic(groups);

            return(dgroups);
        }
Example #4
0
        public void CreateWithNamedIdentityAndOneElement()
        {
            NamedElement   identity = new NamedElement('e');
            NamedElement   aelement = new NamedElement('a');
            OperationTable table    = new OperationTable(new List <IElement>()
            {
                identity, aelement
            }, true);

            identity.OperationTable = table;
            aelement.OperationTable = table;

            table.SetValue(aelement, aelement, identity);

            Assert.IsTrue(table.HasIdentity);
            Assert.IsTrue(table.IsAssociative);
            Assert.IsTrue(table.IsClosed);
            Assert.IsTrue(table.IsCommutative);

            Assert.AreEqual(2, table.Elements.Count);

            Assert.AreEqual(identity, table.GetValue(identity, identity));
            Assert.AreEqual(aelement, table.GetValue(aelement, identity));
            Assert.AreEqual(aelement, table.GetValue(identity, aelement));
            Assert.AreEqual(identity, table.GetValue(aelement, aelement));

            Assert.AreEqual(1, identity.Order);
            Assert.AreEqual(2, aelement.Order);
        }
Example #5
0
        public void SymmetricGroupThreeOperationIsClosed()
        {
            OperationTable table = new OperationTable((new SymmetricGroup(3)).Elements);

            table.Calculate();

            Assert.IsTrue(table.IsClosed);
        }
Example #6
0
        public void SymmetricGroupThreeOperationHasIdentity()
        {
            OperationTable table = new OperationTable((new SymmetricGroup(3)).Elements);

            table.Calculate();

            Assert.IsTrue(table.HasIdentity);
        }
Example #7
0
        public void SymmetricGroupThreeOperationIsNotCommutative()
        {
            OperationTable table = new OperationTable((new SymmetricGroup(3)).Elements);

            table.Calculate();

            Assert.IsFalse(table.IsCommutative);
        }
Example #8
0
        public void RotationGroupThreeOperationIsCommutative()
        {
            OperationTable table = new OperationTable((new GeneratedGroup(Element.CreateRotation(3))).Elements);

            table.Calculate();

            Assert.IsTrue(table.IsCommutative);
        }
Example #9
0
        public void CalculateSymmetricGroupTable()
        {
            IGroup group = new SymmetricGroup(3);

            OperationTable table = new OperationTable(group.Elements);

            table.Calculate();

            foreach (IElement left in group.Elements)
                foreach (IElement right in group.Elements)
                    Assert.AreEqual(left.Multiply(right), table.GetValue(left, right));
        }
Example #10
0
        public void GetCompatibleOperationTable()
        {
            NamedElement identity = new NamedElement('e');
            NamedElement aelement = new NamedElement('a');
            OperationTable table = new OperationTable(new List<IElement>() { identity, aelement }, true);

            identity.OperationTable = table;
            aelement.OperationTable = table;

            OperationTable table2 = table.GetCompatibleTable(aelement, aelement, identity);
            Assert.IsNotNull(table2);
            Assert.AreNotSame(table2, table);
        }
Example #11
0
        public void GetIncompatibleOperationTableIfValueIsAlreadyInRowOrColumn()
        {
            NamedElement   identity = new NamedElement('e');
            NamedElement   aelement = new NamedElement('a');
            OperationTable table    = new OperationTable(new List <IElement>()
            {
                identity, aelement
            }, true);

            identity.OperationTable = table;
            aelement.OperationTable = table;

            Assert.IsNull(table.GetCompatibleTable(aelement, aelement, aelement));
        }
Example #12
0
        public void CalculateSymmetricGroupTable()
        {
            IGroup group = new SymmetricGroup(3);

            OperationTable table = new OperationTable(group.Elements);

            table.Calculate();

            foreach (IElement left in group.Elements)
            {
                foreach (IElement right in group.Elements)
                {
                    Assert.AreEqual(left.Multiply(right), table.GetValue(left, right));
                }
            }
        }
Example #13
0
        public void GetGroupsOfOrderThree()
        {
            NamedElement   identity = new NamedElement('e');
            NamedElement   aelement = new NamedElement('a');
            NamedElement   belement = new NamedElement('b');
            OperationTable table    = new OperationTable(new List <IElement>()
            {
                identity, aelement, belement
            }, true);

            IList <OperationTable> solutions = table.GetSolutions().ToList();

            Assert.IsNotNull(solutions);
            Assert.AreEqual(1, solutions.Count);
            Assert.IsTrue(solutions[0].IsClosed);
        }
Example #14
0
        public void CreateWithNamedIdentity()
        {
            NamedElement identity = new NamedElement('e');
            OperationTable table = new OperationTable(new List<IElement>() { identity }, true);

            identity.OperationTable = table;

            Assert.IsTrue(table.HasIdentity);
            Assert.IsTrue(table.IsAssociative);
            Assert.IsTrue(table.IsClosed);
            Assert.IsTrue(table.IsCommutative);

            Assert.AreEqual(identity, table.GetValue(identity, identity));

            Assert.AreEqual(1, identity.Order);
        }
Example #15
0
        public void GetCompatibleOperationTable()
        {
            NamedElement   identity = new NamedElement('e');
            NamedElement   aelement = new NamedElement('a');
            OperationTable table    = new OperationTable(new List <IElement>()
            {
                identity, aelement
            }, true);

            identity.OperationTable = table;
            aelement.OperationTable = table;

            OperationTable table2 = table.GetCompatibleTable(aelement, aelement, identity);

            Assert.IsNotNull(table2);
            Assert.AreNotSame(table2, table);
        }
Example #16
0
        public void CreateWithNamedIdentity()
        {
            NamedElement   identity = new NamedElement('e');
            OperationTable table    = new OperationTable(new List <IElement>()
            {
                identity
            }, true);

            identity.OperationTable = table;

            Assert.IsTrue(table.HasIdentity);
            Assert.IsTrue(table.IsAssociative);
            Assert.IsTrue(table.IsClosed);
            Assert.IsTrue(table.IsCommutative);

            Assert.AreEqual(identity, table.GetValue(identity, identity));

            Assert.AreEqual(1, identity.Order);
        }
Example #17
0
        public void GetCompatibleOperationTableUsingAssociationExpansion()
        {
            NamedElement identity = new NamedElement('e');
            NamedElement aelement = new NamedElement('a');
            NamedElement belement = new NamedElement('b');
            NamedElement celement = new NamedElement('c');

            OperationTable table = new OperationTable(new List <IElement>()
            {
                identity, aelement, belement, celement
            }, true);

            identity.OperationTable = table;
            aelement.OperationTable = table;
            belement.OperationTable = table;
            celement.OperationTable = table;

            table = table.GetCompatibleTable(aelement, belement, celement);
            Assert.IsNotNull(table);

            table = table.GetCompatibleTable(belement, aelement, celement);
            Assert.IsNotNull(table);

            // bc undefined
            Assert.IsNull(table.GetValue(belement, celement));

            table = table.GetCompatibleTable(belement, celement, identity);

            Assert.IsNotNull(table);

            // bc = e, ba = c = ab -> cb = e
            Assert.AreEqual(identity, table.GetValue(celement, belement));

            // but is not complete, yet
            Assert.IsFalse(table.IsClosed);

            IList <OperationTable> solutions = table.GetSolutions().ToList();

            Assert.IsNotNull(solutions);
            Assert.AreEqual(1, solutions.Count);
            Assert.IsTrue(solutions[0].IsClosed);
        }
Example #18
0
        public void GetGroupsOfOrderTwo()
        {
            NamedElement identity = new NamedElement('e');
            NamedElement aelement = new NamedElement('a');
            OperationTable table = new OperationTable(new List<IElement>() { identity, aelement }, true);

            IList<OperationTable> solutions = table.GetSolutions().ToList();

            Assert.IsNotNull(solutions);
            Assert.AreEqual(1, solutions.Count);
            Assert.IsTrue(solutions[0].IsClosed);
            Assert.IsTrue(solutions[0].IsAssociative);
        }
Example #19
0
        private static IList<IGroup> GetGroupsOfOrder(int order)
        {
            IList<IElement> elements = new List<IElement>();

            for (int k = 0; k < order; k++)
                elements.Add(new NamedElement(k));

            OperationTable table = new OperationTable(elements, true);
            IList<OperationTable> solutions = table.GetSolutions().ToList();

            foreach (OperationTable solution in solutions)
            {
                Assert.IsTrue(solution.HasIdentity);
                Assert.IsTrue(solution.IsAssociative);
                Assert.IsTrue(solution.IsClosed);
            }

            IList<IGroup> groups = new List<IGroup>();

            foreach (OperationTable ot in solutions)
                groups.Add(new TableGroup(ot));

            IList<IGroup> dgroups = GroupUtilities.GetNonIsomorphic(groups);

            return dgroups;
        }
Example #20
0
        public void GetIncompatibleOperationTableIfValueIsAlreadyInRowOrColumn()
        {
            NamedElement identity = new NamedElement('e');
            NamedElement aelement = new NamedElement('a');
            OperationTable table = new OperationTable(new List<IElement>() { identity, aelement }, true);

            identity.OperationTable = table;
            aelement.OperationTable = table;

            Assert.IsNull(table.GetCompatibleTable(aelement, aelement, aelement));
        }
Example #21
0
        public void GetCompatibleOperationTableUsingAssociationExpansion()
        {
            NamedElement identity = new NamedElement('e');
            NamedElement aelement = new NamedElement('a');
            NamedElement belement = new NamedElement('b');
            NamedElement celement = new NamedElement('c');

            OperationTable table = new OperationTable(new List<IElement>() { identity, aelement, belement, celement }, true);

            identity.OperationTable = table;
            aelement.OperationTable = table;
            belement.OperationTable = table;
            celement.OperationTable = table;

            table = table.GetCompatibleTable(aelement, belement, celement);
            Assert.IsNotNull(table);

            table = table.GetCompatibleTable(belement, aelement, celement);
            Assert.IsNotNull(table);

            // bc undefined
            Assert.IsNull(table.GetValue(belement, celement));

            table = table.GetCompatibleTable(belement, celement, identity);

            Assert.IsNotNull(table);

            // bc = e, ba = c = ab -> cb = e
            Assert.AreEqual(identity, table.GetValue(celement, belement));

            // but is not complete, yet
            Assert.IsFalse(table.IsClosed);

            IList<OperationTable> solutions = table.GetSolutions().ToList();

            Assert.IsNotNull(solutions);
            Assert.AreEqual(1, solutions.Count);
            Assert.IsTrue(solutions[0].IsClosed);
        }
Example #22
0
        public void RotationGroupThreeOperationIsCommutative()
        {
            OperationTable table = new OperationTable((new GeneratedGroup(Element.CreateRotation(3))).Elements);
            table.Calculate();

            Assert.IsTrue(table.IsCommutative);
        }
Example #23
0
        public void SymmetricGroupThreeOperationHasIdentity()
        {
            OperationTable table = new OperationTable((new SymmetricGroup(3)).Elements);
            table.Calculate();

            Assert.IsTrue(table.HasIdentity);
        }
Example #24
0
        public void SymmetricGroupThreeOperationIsClosed()
        {
            OperationTable table = new OperationTable((new SymmetricGroup(3)).Elements);
            table.Calculate();

            Assert.IsTrue(table.IsClosed);
        }
Example #25
0
        public void GetGroupsOfOrderFour()
        {
            NamedElement identity = new NamedElement('e');
            NamedElement aelement = new NamedElement('a');
            NamedElement belement = new NamedElement('b');
            NamedElement celement = new NamedElement('c');
            OperationTable table = new OperationTable(new List<IElement>() { identity, aelement, belement, celement }, true);

            IList<OperationTable> solutions = table.GetSolutions().ToList();

            Assert.IsNotNull(solutions);
            Assert.AreEqual(4, solutions.Count);

            foreach (OperationTable solution in solutions)
            {
                Assert.IsTrue(solution.IsClosed);
                Assert.IsTrue(solution.IsCommutative);
            }

            IList<IGroup> groups = new List<IGroup>();

            foreach (OperationTable ot in solutions)
                groups.Add(new TableGroup(ot));

            IList<IGroup> dgroups = GroupUtilities.GetNonIsomorphic(groups);

            Assert.IsNotNull(dgroups);
            Assert.AreEqual(2, dgroups.Count);
        }
Example #26
0
        public void SymmetricGroupThreeOperationIsNotCommutative()
        {
            OperationTable table = new OperationTable((new SymmetricGroup(3)).Elements);
            table.Calculate();

            Assert.IsFalse(table.IsCommutative);
        }