Skip to content

Commit

Permalink
added layer tests and updated tests configs
Browse files Browse the repository at this point in the history
  • Loading branch information
Dpbm committed Jan 29, 2024
1 parent 2ec7e76 commit f4caf31
Show file tree
Hide file tree
Showing 8 changed files with 109 additions and 37 deletions.
18 changes: 4 additions & 14 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -48,19 +48,9 @@ target_link_libraries(ga.out PRIVATE helpers game genetic matrix machine ${SDL2_

enable_testing()

file(GLOB MATRIX_TEST "./tests/matrix_test.cc")
add_executable(matrix_test ${MATRIX_TEST})
target_link_libraries(matrix_test matrix GTest::gtest_main)

file(GLOB CHROMOSOME_TEST "./tests/chromosome_test.cc")
add_executable(chromosome_test ${CHROMOSOME_TEST})
target_link_libraries(chromosome_test helpers genetic ${SDL2_LIBRARIES} GTest::gtest_main)

file(GLOB POPUALTION_TEST "./tests/population_test.cc")
add_executable(population_test ${POPUALTION_TEST})
target_link_libraries(population_test genetic helpers ${SDL2_LIBRARIES} GTest::gtest_main)
file(GLOB TESTS "tests/*_test.cc")
add_executable(tests ${TESTS})
target_link_libraries(tests matrix helpers genetic machine ${SDL2_LIBRARIES} GTest::gtest_main GTest::gmock)

include(GoogleTest)
gtest_discover_tests(matrix_test)
gtest_discover_tests(chromosome_test)
gtest_discover_tests(population_test)
gtest_discover_tests(tests)
2 changes: 1 addition & 1 deletion clean.sh
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
#!/usr/bin/sh

rm -rf *.a *.o *.out
rm -rf *.a *.o *.out ./build/
25 changes: 20 additions & 5 deletions machine/layer.cpp
Original file line number Diff line number Diff line change
@@ -1,24 +1,39 @@
#include "layer.h"
#include "../helpers/utils.h"
#include <stdexcept>

using Matrices::Matrix;
using std::invalid_argument;
using Utils::random;

namespace Layers {
unsigned int size;
Matrix *values;

InputLayer::InputLayer(unsigned int size){
Layer::Layer(unsigned int size){
this->size = size;
this->values = new Matrix(1, size);
for(unsigned int i = 0; i < size; i++)
this->values->update_value(i, 0, random(-1, 1));
}

void InputLayer::set_node_values(Matrix *values){
if(values->get_width() != 1 || values->get_height() != this->size)
throw std::invalid_argument("Invalid values dimensions!");
Layer::Layer(Matrix *values){
if(values->get_width() != 1)
throw invalid_argument("Invalid values dimensions!");

this->size = values->get_height();
this->values = values;
}

InputLayer::~InputLayer(){
Matrix* Layer::get_values(){
return this->values;
}

Layer::~Layer(){
delete this->values;
}

unsigned int Layer::get_size() const {
return this->size;
}
}
15 changes: 6 additions & 9 deletions machine/layer.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,13 @@
using Matrices::Matrix;

namespace Layers{

struct Layer{
virtual void set_node_values(Matrix *values);
};

class InputLayer: Layer{
class Layer{
public:
InputLayer(unsigned int size);
void set_node_values(Matrix *values);
~InputLayer();
Layer(unsigned int size);
Layer(Matrix *values);
Matrix* get_values();
unsigned int get_size() const;
~Layer();
private:
unsigned int size;
Matrix *values;
Expand Down
17 changes: 15 additions & 2 deletions machine/machine.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,18 @@
#include "machine.h"
#include "layer.h"
#include <vector>

using Machine::NN;
using Layers::Layer;
using std::vector;

NN::NN(){}
namespace Machine {
vector<Layer*>* layers;

void NN::add_layer(unsigned int size){
layers->push_back(new Layer(size));
}

void NN::add_layer(Layer* layer){
layers->push_back(layer);
}
}
12 changes: 10 additions & 2 deletions machine/machine.h
Original file line number Diff line number Diff line change
@@ -1,13 +1,21 @@
#pragma once

#include <iostream>
#include <vector>
#include "layer.h"

using Layers::Layer;
using std::vector;

namespace Machine {

class NN{

public:
NN();
void add_layer(unsigned int size);
void add_layer(Layer* layer);

private:

vector<Layer*>* layers = new vector<Layer*>;
};
};
9 changes: 5 additions & 4 deletions tests/gene_test.cc
Original file line number Diff line number Diff line change
@@ -1,16 +1,18 @@
#include <gtest/gtest.h>
#include <gmock/gmock.h>
#include <stdexcept>
#include "../genetic/gene.h"

using ::testing::AllOf;
using ::testing::Ge;
using ::testing::Le;
using Genes::Gene;
using std::invalid_argument;

namespace {
TEST(CreationTest, CreateGeneTest){
Gene *gene = new Gene();
ASSERT_THAT(gene->get_gene_value(), AllOf(Ge(-1), Le(1));
ASSERT_THAT(gene->get_gene_value(), AllOf(Ge(-1), Le(1)));
delete gene;
}

Expand All @@ -23,13 +25,13 @@ namespace {

TEST(UpdateTest, MutationLesserThanZeroRateTest){
Gene *gene = new Gene();
EXPECT_THROW({ gene->mutate(-1); }, std::invalid_argument);
EXPECT_THROW({ gene->mutate(-1); }, invalid_argument);
delete gene;
}

TEST(UpdateTest, MutationGreaterThanOneRateTest){
Gene *gene = new Gene();
EXPECT_THROW({ gene->mutate(2); }, std::invalid_argument);
EXPECT_THROW({ gene->mutate(2); }, invalid_argument);
delete gene;
}

Expand Down Expand Up @@ -61,7 +63,6 @@ namespace {

delete gene;
delete copy_gene;

}
}

48 changes: 48 additions & 0 deletions tests/layer_test.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
#include "../machine/layer.h"
#include <stdexcept>
#include "../matrix/matrix.h"
#include <gmock/gmock.h>
#include <gtest/gtest.h>

using Matrices::Matrix;
using Layers::Layer;
using std::invalid_argument;
using ::testing::AllOf;
using ::testing::Ge;
using ::testing::Le;

namespace {

TEST(CreationTest, CreateLayerBySizeTest){
Layer* layer = new Layer(3);
ASSERT_EQ(layer->get_size(), 3);
ASSERT_EQ(layer->get_values()->get_width(), 1);
ASSERT_EQ(layer->get_values()->get_height(), 3);
delete layer;
}

TEST(CreationTest, CreateLayerByMatrixTest){
Matrix* values = new Matrix(1, 3);
Layer* layer = new Layer(values);

ASSERT_EQ(layer->get_size(), 3);
ASSERT_EQ(layer->get_values(), values);
ASSERT_EQ(layer->get_values()->get_width(), 1);
ASSERT_EQ(layer->get_values()->get_height(), 3);

delete layer;
}

TEST(CreationTest, CreateLayerWithInvalidWidhtTest){
Matrix* values = new Matrix(3, 3);
EXPECT_THROW({ new Layer(values); }, invalid_argument);
delete values;
}

TEST(ValuesTest, GetValuesTest){
Layer *layer = new Layer(1);
ASSERT_THAT(layer->get_values()->get_position_value(0, 0), AllOf(Ge(-1), Le(1)));
delete layer;
}

}

0 comments on commit f4caf31

Please sign in to comment.