From a3a82c1c18869fc8f2f744d7edd4b24e2c50d1a6 Mon Sep 17 00:00:00 2001 From: hugogogo Date: Mon, 14 Mar 2022 17:42:07 +0100 Subject: [PATCH] check leaks on d02 ok --- d02/< | 17 +++++++++++++++ d02/README.md | 4 +--- d02/ex00/Makefile | 6 +++++- d02/ex00/colors.h | 25 ++++++++++++++++++++++ d02/ex00/main.cpp | 51 ++++++++++++++++++++++++++++++++++++++------- d02/ex01/Fixed.cpp | 16 ++++++++++++-- d02/ex01/Makefile | 3 +++ d02/ex01/fixed | Bin 19088 -> 14768 bytes d02/ex02/Makefile | 3 +++ d02/ex02/operators | Bin 44984 -> 0 bytes 10 files changed, 112 insertions(+), 13 deletions(-) create mode 100644 d02/< create mode 100644 d02/ex00/colors.h delete mode 100755 d02/ex02/operators diff --git a/d02/< b/d02/< new file mode 100644 index 0000000..d27328e --- /dev/null +++ b/d02/< @@ -0,0 +1,17 @@ +#include +#include +#include "colors.h" + +#define N_TEST "1" + +int main() { + int i = 0; + + std::cout << B_YELLOW "\n[" << ++i << "/" N_TEST "] " + << "tests :" RESET "\n"; + { + } + + return 0; +} + diff --git a/d02/README.md b/d02/README.md index 8697f02..74ded46 100644 --- a/d02/README.md +++ b/d02/README.md @@ -122,7 +122,7 @@ CONVERSIONS 1 / 2 = 0 -> 1 75 : .75 *2^2 = 2,88 ~= 3 - (*2^x parce que c le moyen dont fait "bouger" la virgule + (*2^x parce que c le moyen dont on fait "bouger" la virgule en base 2 (*10^x) en base 10) 3 / 2 = 1 -> 1 1 / 2 = 0 -> 1 @@ -312,5 +312,3 @@ integer = (integer << (30 - this->_frac - exponent)) | sign; // add sign integer >>= (30 - this->_frac - exponent); // align right std::cout << "integer : " << printBitsInt(integer) << " (" << integer << ")\n"; ``` - - diff --git a/d02/ex00/Makefile b/d02/ex00/Makefile index c79bfaa..9b0b398 100644 --- a/d02/ex00/Makefile +++ b/d02/ex00/Makefile @@ -20,7 +20,8 @@ SRCS = main.cpp \ Fixed.cpp D_HEADERS = . -HEADERS = Fixed.hpp +HEADERS = Fixed.hpp \ + colors.h D_OBJS = builds OBJS = $(SRCS:%.cpp=$(D_OBJS)/%.o) @@ -50,6 +51,9 @@ $(OBJS): $(HEADERS:%=$(D_HEADERS)/%) $(NAME): $(OBJS) $(CC) $(OBJS) -o $@ $(LIBS) +leaks: $(NAME) + valgrind --leak-check=full --show-leak-kinds=all ./$(NAME) + clean: rm -f $(OBJS) diff --git a/d02/ex00/colors.h b/d02/ex00/colors.h new file mode 100644 index 0000000..0374e42 --- /dev/null +++ b/d02/ex00/colors.h @@ -0,0 +1,25 @@ +#ifndef COLORS_H +# define COLORS_H + +# define GRAY "\e[0;30m" +# define RED "\e[0;31m" +# define GREEN "\e[0;32m" +# define YELLOW "\e[0;33m" +# define BLUE "\e[0;34m" +# define PURPLE "\e[0;35m" +# define CYAN "\e[0;36m" +# define WHITE "\e[0;37m" + +# define B_GRAY "\e[1;30m" +# define B_RED "\e[1;31m" +# define B_GREEN "\e[1;32m" +# define B_YELLOW "\e[1;33m" +# define B_BLUE "\e[1;34m" +# define B_PURPLE "\e[1;35m" +# define B_CYAN "\e[1;36m" +# define B_WHITE "\e[1;37m" + +# define RESET "\e[0m" + +#endif + diff --git a/d02/ex00/main.cpp b/d02/ex00/main.cpp index cc2bceb..17a405b 100644 --- a/d02/ex00/main.cpp +++ b/d02/ex00/main.cpp @@ -1,17 +1,54 @@ #include "Fixed.hpp" #include +#include "colors.h" + +#define N_TEST "1" int main( void ) { - Fixed a; - Fixed b( a ); - Fixed c; + int i = 0; - c = b; + std::cout << B_YELLOW "\n[" << ++i << "/" N_TEST "] " + << "tests subject :" RESET "\n"; + { + Fixed a; + Fixed b( a ); + Fixed c; + + c = b; + + std::cout << a.getRawBits() << std::endl; + std::cout << b.getRawBits() << std::endl; + std::cout << c.getRawBits() << std::endl; + } - std::cout << a.getRawBits() << std::endl; - std::cout << b.getRawBits() << std::endl; - std::cout << c.getRawBits() << std::endl; + std::cout << B_YELLOW "\n[" << ++i << "/" N_TEST "] " + << "tests sets :" RESET "\n"; + { + Fixed a; + Fixed b( a ); + Fixed c; + + c = b; + + std::cout << "\n" B_BLUE "sets a(4), b(6.3), c(-187)" RESET "\n"; + a.setRawBits(4); + b.setRawBits(6.3); + c.setRawBits(-187); + + std::cout << a.getRawBits() << std::endl; + std::cout << b.getRawBits() << std::endl; + std::cout << c.getRawBits() << std::endl; + + std::cout << "\n" B_BLUE "sets a(76.76), b(0), c(0.0)" RESET "\n"; + a.setRawBits(76.76); + b.setRawBits(0); + c.setRawBits(0.0); + + std::cout << a.getRawBits() << std::endl; + std::cout << b.getRawBits() << std::endl; + std::cout << c.getRawBits() << std::endl; + } return 0; } diff --git a/d02/ex01/Fixed.cpp b/d02/ex01/Fixed.cpp index 69954d3..077d89e 100644 --- a/d02/ex01/Fixed.cpp +++ b/d02/ex01/Fixed.cpp @@ -5,14 +5,14 @@ * statics variables initialisation * * for MAX integer : - * 00000000 01111111 11111111 11111111 ( 8388607) (-1U >> (this->_frac +1)) + * 00000000 01111111 11111111 11111111 ( 8388607) (-1U >> (this->_frac + 1)) * <= ... >= * 11111111 10000000 00000000 00000000 (-8388608) ~MAX * */ int const Fixed::_frac = 8; -int const Fixed::_max = -1U >> (_frac +1); +int const Fixed::_max = -1U >> (_frac + 1); int const Fixed::_min = ~_max; /* @@ -55,6 +55,18 @@ Fixed::Fixed(float const floater) { std::cout << "error: float out of range" << '\n'; else this->_value = roundf(floater * (1 << Fixed::_frac)); + +// this->_value = *((int *)&floater); // access float adress content as int +// int sign = this->_value & (1 << 31); // extract sign +// int exponent = ((unsigned int)(this->_value << 1) >> 24) - 127; // extract exponent +// int integer = (this->_value << 8) | (1 << 31); // add left 1 +// integer = (unsigned int)integer >> (31 - this->_frac - exponent);// align to right +// if (sign != 0) +// integer = (~integer + 1); // reverse negatif +// integer = (integer << (30 - this->_frac - exponent)) | sign; // add sign +// integer >>= (30 - this->_frac - exponent); // align right +// std::cout << "integer : " << printBitsInt(integer) << " (" << integer << ")\n"; + } /* diff --git a/d02/ex01/Makefile b/d02/ex01/Makefile index c79bfaa..5e07c7a 100644 --- a/d02/ex01/Makefile +++ b/d02/ex01/Makefile @@ -50,6 +50,9 @@ $(OBJS): $(HEADERS:%=$(D_HEADERS)/%) $(NAME): $(OBJS) $(CC) $(OBJS) -o $@ $(LIBS) +leaks: $(NAME) + valgrind --leak-check=full --show-leak-kinds=all ./$(NAME) + clean: rm -f $(OBJS) diff --git a/d02/ex01/fixed b/d02/ex01/fixed index ce8fca3114150c1932d46111ca1935732d801300..c23aec00f9cb2464379609765f9e83191d59eb1a 100755 GIT binary patch literal 14768 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 diff --git a/d02/ex02/Makefile b/d02/ex02/Makefile index 9b9e378..44ddf8f 100644 --- a/d02/ex02/Makefile +++ b/d02/ex02/Makefile @@ -50,6 +50,9 @@ $(OBJS): $(HEADERS:%=$(D_HEADERS)/%) $(NAME): $(OBJS) $(CC) $(OBJS) -o $@ $(LIBS) +leaks: $(NAME) + valgrind --leak-check=full --show-leak-kinds=all ./$(NAME) + clean: rm -f $(OBJS) diff --git a/d02/ex02/operators b/d02/ex02/operators deleted file mode 100755 index fc8998f311288bfda25f609aa29dbc429fd239a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44984 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