diff --git a/tests/Phpml/NeuralNetwork/Network/MultilayerPerceptronTest.php b/tests/Phpml/NeuralNetwork/Network/MultilayerPerceptronTest.php new file mode 100644 index 0000000..1ac1621 --- /dev/null +++ b/tests/Phpml/NeuralNetwork/Network/MultilayerPerceptronTest.php @@ -0,0 +1,73 @@ +assertCount(3, $mlp->getLayers()); + + $layers = $mlp->getLayers(); + + // input layer + $this->assertCount(3, $layers[0]->getNodes()); + $this->assertNotContainsOnly(Neuron::class, $layers[0]->getNodes()); + + // hidden layer + $this->assertCount(3, $layers[1]->getNodes()); + $this->assertNotContainsOnly(Neuron::class, $layers[0]->getNodes()); + + // output layer + $this->assertCount(1, $layers[2]->getNodes()); + $this->assertContainsOnly(Neuron::class, $layers[2]->getNodes()); + } + + public function testSynapsesGeneration() + { + $mlp = new MultilayerPerceptron([2, 2, 1]); + $layers = $mlp->getLayers(); + + foreach ($layers[1]->getNodes() as $node) { + if ($node instanceof Neuron) { + $synapses = $node->getSynapses(); + $this->assertCount(3, $synapses); + + $synapsesNodes = $this->getSynapsesNodes($synapses); + foreach ($layers[0]->getNodes() as $prevNode) { + $this->assertContains($prevNode, $synapsesNodes); + } + } + } + } + + /** + * @param array $synapses + * + * @return array + */ + private function getSynapsesNodes(array $synapses): array + { + $nodes = []; + foreach ($synapses as $synapse) { + $nodes[] = $synapse->getNode(); + } + + return $nodes; + } + + /** + * @expectedException \Phpml\Exception\InvalidArgumentException + */ + public function testThrowExceptionOnInvalidLayersNumber() + { + new MultilayerPerceptron([2]); + } +}