Calculadora - static library - um exemplo completo
Agora vamos a um exemplo completo de uma calculadora de áreas com funções implementadas em uma static library.
Para esse exemplo, é necessário o foxmake instalado na sua máquina (ou ele incluído no seu projeto). Acesse a página do projeto em: documentação do foxmake.
Vamos lá:
- Crie um o arquivo "calc.h" com o seguinte conteúdo:
src/calc/calc.h
#ifndef CALC_H #define CALC_H namespace calc { double square_area( double side ); double rectangle_area( double base, double height ); double triangle_area( double base, double height ); double circle_area( double radius ); } #endif - Agora crie o seguinte arquivo "calc.cpp" o seguinte conteúdo:
src/calc/calc.cpp
#include "calc.h" #include <cmath> namespace calc { double square_area( double side ) { return side * side; } double rectangle_area( double base, double height ) { return base * height; } double triangle_area( double base, double height ) { return ( base * height ) / 2.0f; } double circle_area( double radius ) { return M_PI * pow( radius, 2.0f ); } } - Agora vamos criar os arquivos de teste.
Crie o arquivo "calctests.h" com o seguinte conteúdo:
test/calc/calctests.h
#include <xutest/xutest.h> #include "calc/calc.h" #include <cmath> TEST_CASE( square_area_test, CalcTests ) { ASSERT_EQUALS( calc::square_area( 10 ), 100, ); ASSERT_EQUALS( calc::square_area( -1 ), 1, ); ASSERT_EQUALS( calc::square_area( 0 ), 0, ); ASSERT_EQUALS( calc::square_area( 2.5 ), 6.25, ); } TEST_CASE( rectangle_area_test, CalcTests ) { ASSERT_EQUALS( calc::rectangle_area( 10, 10 ), 100, ); ASSERT_EQUALS( calc::rectangle_area( -1, 20 ), -20, ); ASSERT_EQUALS( calc::rectangle_area( 0, 10 ), 0, ); ASSERT_EQUALS( calc::rectangle_area( 2.5, 10 ), 25, ); } TEST_CASE( triangle_area_test, CalcTests ) { ASSERT_EQUALS( calc::triangle_area( 10, 10 ), 50, ); ASSERT_EQUALS( calc::triangle_area( -1, 20 ), -10, ); ASSERT_EQUALS( calc::triangle_area( 0, 10 ), 0, ); ASSERT_EQUALS( calc::triangle_area( 2.5, 10 ), 12.5, ); } TEST_CASE( circle_area_test, CalcTests ) { ASSERT_EQUALS( calc::circle_area( 10 ), M_PI * 100, ); ASSERT_EQUALS( calc::circle_area( -1 ), M_PI, ); ASSERT_EQUALS( calc::circle_area( 0 ), 0, ); ASSERT_EQUALS( calc::circle_area( 2.5 ), M_PI * 6.25, ); } - Agora crie o arquivo "main.cpp" na pasta "test" com o seguinte conteúdo:
test/main.cpp#include "calc/calctests.h" #include <xutest/xutest.h> int main() { RUN_ALL_TEST_CASES(); return 0; } - Agora só falta o arquivo FoxmakeFile. Crie ele com o seguinte conteúdo:
FoxmakeFile
output.file.name=libcalc.a src.dir=src test.dir=test build.dir=build obj.dir=obj bin.dir=bin IF os != "windows" test.linker.params=-ldl -rdynamic ENDIF test.libs=xutest
Feito isso você deve ter a seguinte estrutura de arquivos em seu projeto:
calculator
├── FoxMakefile
├── src
│ └── calc
│ ├── calc.cpp
│ └── calc.h
└── test
├── calc
│ └── calctests.h
└── main.cpp
Agora você pode executar o build com foxmake. Execute o seguinte:
foxmake testbuildall
Você deverá ver a seguinte saída:
Para baixar o exemplo desta página, acesse:
Download: calculator-static-library.zip.
Finalizando...
E assim chegamos ao final do exemplo de calculadora de áreas completo. Espero que tenha gostado das aulas e, agora, divirta-se com o xutest e, o foxmake combina muito bem com ele!