From 5d2fb98afa41c9161453edabcb37bfae14638d66 Mon Sep 17 00:00:00 2001 From: levdoescode Date: Thu, 15 Dec 2022 23:54:42 -0500 Subject: [PATCH] TDD tests for the genome class --- .../Week 8/Files/test_genome.py | 109 ++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 CM3020 Artificial Intelligence/Week 8/Files/test_genome.py diff --git a/CM3020 Artificial Intelligence/Week 8/Files/test_genome.py b/CM3020 Artificial Intelligence/Week 8/Files/test_genome.py new file mode 100644 index 0000000..40e3737 --- /dev/null +++ b/CM3020 Artificial Intelligence/Week 8/Files/test_genome.py @@ -0,0 +1,109 @@ +import unittest +import genome +import numpy as np +from xml.dom.minidom import getDOMImplementation + + +class GenomeTest (unittest.TestCase): + + # Class + def testClassExists(self): + self.assertIsNotNone(genome.Genome) + + # Gene + def testRandomGene(self): + self.assertIsNotNone(genome.Genome.get_random_gene) + + def testRandomGeneNotNone(self): + self.assertIsNotNone(genome.Genome.get_random_gene(1)) + + def testRandomGeneHasValues(self): + gene = genome.Genome.get_random_gene(1) + self.assertIsNotNone(gene[0]) + + def testRandomGeneLength(self): + gene = genome.Genome.get_random_gene(20) + self.assertEqual(len(gene), 20) + + def testRandGeneIsNumpyArrays(self): + gene = genome.Genome.get_random_gene(1) + self.assertEqual(type(gene), np.ndarray) + + # Genome + def testRandomGenomeExists(self): + data = genome.Genome.get_random_genome(20, 5) + self.assertIsNotNone(data) + + def testGeneSpecExists(self): + spec = genome.Genome.get_gene_spec() + self.assertIsNotNone(spec) + + def testGeneSpecHasLinkLength(self): + spec = genome.Genome.get_gene_spec() + self.assertIsNotNone(spec['link-length']) + + def testGeneSpecHasLinkIndex(self): + spec = genome.Genome.get_gene_spec() + self.assertIsNotNone(spec['link-length']["ind"]) + + def testGeneSpecScale(self): + spec = genome.Genome.get_gene_spec() + gene = genome.Genome.get_random_gene(len(spec)) + # print(spec) + # print(gene) + self.assertGreater(gene[spec["link-length"]["ind"]], 0) + + def testFlatLinks(self): + links = [ + genome.URDFLink(name="A", parent_name=None, recur=1), + genome.URDFLink(name="B", parent_name="A", recur=1), + genome.URDFLink(name="C", parent_name="B", recur=2), + genome.URDFLink(name="D", parent_name="C", recur=1), + ] + self.assertIsNotNone(links) + + def testExpandLink(self): + links = [ + genome.URDFLink(name="A", parent_name="None", recur=1), + genome.URDFLink(name="B", parent_name="A", recur=1), + genome.URDFLink(name="C", parent_name="B", recur=2), + genome.URDFLink(name="D", parent_name="C", recur=1), + ] + expanded_links = [links[0]] + genome.Genome.expandLinks( + links[0], links[0].name, links, expanded_links) + names = [l.name + "-parent-is-" + + l.parent_name for l in expanded_links] + print(names) + self.assertEqual(len(expanded_links), 6) + + def testGeneToGeneDict(self): + spec = genome.Genome.get_gene_spec() + gene = genome.Genome.get_random_gene(len(spec)) + gene_dict = genome.Genome.get_gene_dict(gene, spec) + self.assertIn("link-recurrence", gene_dict) + + def testGenomeToDict(self): + spec = genome.Genome.get_gene_spec() + dna = genome.Genome.get_random_genome(len(spec), 3) + genome_dicts = genome.Genome.get_genome_dicts(dna, spec) + self.assertEqual(len(genome_dicts), 3) + + def testGetLinks(self): + spec = genome.Genome.get_gene_spec() + dna = genome.Genome.get_random_genome(len(spec), 3) + genome_dicts = genome.Genome.get_genome_dicts(dna, spec) + links = genome.Genome.genome_to_links(genome_dicts) + self.assertEqual(len(genome_dicts), 3) + + def testLinkToXML(self): + link = genome.URDFLink(name="A", parent_name="None", recur=1) + domimpl = getDOMImplementation() + adom = domimpl.createDocument(None, "robot", None) + xml_str = link.to_link_element(adom) + print(xml_str) + self.assertIsNotNone(xml_str) + + +if __name__ == '__main__': + unittest.main(argv=['first-arg-is-ignored'], exit=False)