From 2941c1d2982177f40a8dab2bd0b9bdcd40630943 Mon Sep 17 00:00:00 2001 From: Alessandro Ferro <49845537+xfarrow@users.noreply.github.com> Date: Sat, 10 Apr 2021 13:34:50 +0200 Subject: [PATCH] Library 2 Added template --- ...Ferro-Alessandro-N86002853(Esercizio1).zip | Bin 18372 -> 0 bytes librerie/exercise2/Exercise2.pdf | Bin 0 -> 37792 bytes librerie/exercise2/build.sh | 8 + librerie/exercise2/container/container.cpp | 10 + librerie/exercise2/container/container.hpp | 318 +++++++++++++ librerie/exercise2/list/list.cpp | 10 + librerie/exercise2/list/list.hpp | 169 +++++++ librerie/exercise2/main.cpp | 16 + librerie/exercise2/queue/lst/queuelst.cpp | 10 + librerie/exercise2/queue/lst/queuelst.hpp | 90 ++++ librerie/exercise2/queue/queue.hpp | 61 +++ librerie/exercise2/queue/vec/queuevec.cpp | 10 + librerie/exercise2/queue/vec/queuevec.hpp | 102 ++++ librerie/exercise2/stack/lst/stacklst.cpp | 10 + librerie/exercise2/stack/lst/stacklst.hpp | 90 ++++ librerie/exercise2/stack/stack.hpp | 61 +++ librerie/exercise2/stack/vec/stackvec.cpp | 10 + librerie/exercise2/stack/vec/stackvec.hpp | 101 ++++ librerie/exercise2/vector/vector.cpp | 10 + librerie/exercise2/vector/vector.hpp | 113 +++++ .../zlasdtest/container/container.cpp | 49 ++ .../zlasdtest/container/container.hpp | 301 ++++++++++++ .../zlasdtest/exercise1/fulltest.cpp | 3 + .../zlasdtest/exercise1/simpletest.cpp | 447 ++++++++++++++++++ .../exercise2/zlasdtest/exercise1/test.hpp | 13 + .../zlasdtest/exercise2/fulltest.cpp | 3 + .../zlasdtest/exercise2/simpletest.cpp | 359 ++++++++++++++ .../exercise2/zlasdtest/exercise2/test.hpp | 13 + librerie/exercise2/zlasdtest/list/list.hpp | 98 ++++ librerie/exercise2/zlasdtest/queue/queue.hpp | 116 +++++ librerie/exercise2/zlasdtest/stack/stack.hpp | 116 +++++ librerie/exercise2/zlasdtest/test.cpp | 21 + librerie/exercise2/zlasdtest/test.hpp | 11 + .../exercise2/zlasdtest/vector/vector.hpp | 37 ++ librerie/exercise2/zmytest/test.cpp | 2 + librerie/exercise2/zmytest/test.hpp | 11 + 36 files changed, 2799 insertions(+) delete mode 100644 librerie/Ferro-Alessandro-N86002853(Esercizio1).zip create mode 100755 librerie/exercise2/Exercise2.pdf create mode 100755 librerie/exercise2/build.sh create mode 100755 librerie/exercise2/container/container.cpp create mode 100755 librerie/exercise2/container/container.hpp create mode 100755 librerie/exercise2/list/list.cpp create mode 100755 librerie/exercise2/list/list.hpp create mode 100755 librerie/exercise2/main.cpp create mode 100755 librerie/exercise2/queue/lst/queuelst.cpp create mode 100755 librerie/exercise2/queue/lst/queuelst.hpp create mode 100755 librerie/exercise2/queue/queue.hpp create mode 100755 librerie/exercise2/queue/vec/queuevec.cpp create mode 100755 librerie/exercise2/queue/vec/queuevec.hpp create mode 100755 librerie/exercise2/stack/lst/stacklst.cpp create mode 100755 librerie/exercise2/stack/lst/stacklst.hpp create mode 100755 librerie/exercise2/stack/stack.hpp create mode 100755 librerie/exercise2/stack/vec/stackvec.cpp create mode 100755 librerie/exercise2/stack/vec/stackvec.hpp create mode 100755 librerie/exercise2/vector/vector.cpp create mode 100755 librerie/exercise2/vector/vector.hpp create mode 100755 librerie/exercise2/zlasdtest/container/container.cpp create mode 100755 librerie/exercise2/zlasdtest/container/container.hpp create mode 100755 librerie/exercise2/zlasdtest/exercise1/fulltest.cpp create mode 100755 librerie/exercise2/zlasdtest/exercise1/simpletest.cpp create mode 100755 librerie/exercise2/zlasdtest/exercise1/test.hpp create mode 100755 librerie/exercise2/zlasdtest/exercise2/fulltest.cpp create mode 100755 librerie/exercise2/zlasdtest/exercise2/simpletest.cpp create mode 100755 librerie/exercise2/zlasdtest/exercise2/test.hpp create mode 100755 librerie/exercise2/zlasdtest/list/list.hpp create mode 100755 librerie/exercise2/zlasdtest/queue/queue.hpp create mode 100755 librerie/exercise2/zlasdtest/stack/stack.hpp create mode 100755 librerie/exercise2/zlasdtest/test.cpp create mode 100755 librerie/exercise2/zlasdtest/test.hpp create mode 100755 librerie/exercise2/zlasdtest/vector/vector.hpp create mode 100755 librerie/exercise2/zmytest/test.cpp create mode 100755 librerie/exercise2/zmytest/test.hpp diff --git a/librerie/Ferro-Alessandro-N86002853(Esercizio1).zip b/librerie/Ferro-Alessandro-N86002853(Esercizio1).zip deleted file mode 100644 index 983b088ff2748a867256084cbf0d406fa74efd88..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18372 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 diff --git a/librerie/exercise2/Exercise2.pdf b/librerie/exercise2/Exercise2.pdf new file mode 100755 index 0000000000000000000000000000000000000000..6c07004c6ef392f7c86e181feec8de38a57956ef GIT binary patch literal 37792 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 +#include + +/* ************************************************************************** */ + +namespace lasd { + +/* ************************************************************************** */ + +class Container { + +private: + + // ... + +protected: + + // ... + +public: + + // Destructor + // ~Container() specifiers + + /* ************************************************************************ */ + + // Copy assignment + // type operator=(argument); // Copy assignment of abstract types should not be possible. + + // Move assignment + // type operator=(argument); // Move assignment of abstract types should not be possible. + + /* ************************************************************************ */ + + // Comparison operators + // type operator==(argument) specifiers; // Comparison of abstract types might not be possible. + // type operator!=(argument) specifiers; // Comparison of abstract types might not be possible. + + /* ************************************************************************ */ + + // Specific member functions + + // type Empty() specifiers; // (concrete function should not throw exceptions) + + // type Size() specifiers; // (concrete function should not throw exceptions) + + // type Clear() specifiers; + +}; + +/* ************************************************************************** */ + +template +class LinearContainer { // Must extend Container + +private: + + // ... + +protected: + + // ... + +public: + + // Destructor + // ~LinearContainer() specifiers + + /* ************************************************************************ */ + + // Copy assignment + // type operator=(argument); // Copy assignment of abstract types should not be possible. + + // Move assignment + // type operator=(argument); // Move assignment of abstract types should not be possible. + + /* ************************************************************************ */ + + // Comparison operators + // type operator==(argument) specifiers; // Comparison of abstract types might not be possible. + // type operator!=(argument) specifiers; // Comparison of abstract types might not be possible. + + /* ************************************************************************ */ + + // Specific member functions + + // type Front() specifiers; // (concrete function must throw std::length_error when empty) + // type Back() specifiers; // (concrete function must throw std::length_error when empty) + + // type operator[](argument) specifiers; // (concrete function must throw std::out_of_range when out of range) + +}; + +/* ************************************************************************** */ + +template +class TestableContainer { // Must extend Container + +private: + + // ... + +protected: + + // ... + +public: + + // Destructor + // ~TestableContainer() specifiers + + /* ************************************************************************ */ + + // Copy assignment + // type operator=(argument); // Copy assignment of abstract types should not be possible. + + // Move assignment + // type operator=(argument); // Move assignment of abstract types should not be possible. + + /* ************************************************************************ */ + + // Comparison operators + // type operator==(argument) specifiers; // Comparison of abstract types might not be possible. + // type operator!=(argument) specifiers; // Comparison of abstract types might not be possible. + + /* ************************************************************************ */ + + // Specific member functions + + // type Exists(argument) specifiers; // (concrete function should not throw exceptions) + +}; + +/* ************************************************************************** */ + +template +class MappableContainer { // Must extend Container + +private: + + // ... + +protected: + + // ... + +public: + + // Destructor + // ~MappableContainer() specifiers + + /* ************************************************************************ */ + + // Copy assignment + // type operator=(argument); // Copy assignment of abstract types should not be possible. + + // Move assignment + // type operator=(argument); // Move assignment of abstract types should not be possible. + + /* ************************************************************************ */ + + // Comparison operators + // type operator==(argument) specifiers; // Comparison of abstract types might not be possible. + // type operator!=(argument) specifiers; // Comparison of abstract types might not be possible. + + /* ************************************************************************ */ + + // Specific member functions + + // typedef std::function MapFunctor; + + // type MapPreOrder(arguments) specifiers; + // type MapPostOrder(arguments) specifiers; + +}; + +/* ************************************************************************** */ + +template +class FoldableContainer { // Must extend TestableContainer + +private: + + // ... + +protected: + + // ... + +public: + + // Destructor + // ~FoldableContainer() specifiers + + /* ************************************************************************ */ + + // Copy assignment + // type operator=(argument); // Copy assignment of abstract types should not be possible. + + // Move assignment + // type operator=(argument); // Move assignment of abstract types should not be possible. + + /* ************************************************************************ */ + + // Comparison operators + // type operator==(argument) specifiers; // Comparison of abstract types might not be possible. + // type operator!=(argument) specifiers; // Comparison of abstract types might not be possible. + + /* ************************************************************************ */ + + // Specific member functions + + // typedef std::function FoldFunctor; + + // type FoldPreOrder(arguments) specifiers; + // type FoldPostOrder(arguments) specifiers; + + // type Exists(argument) specifiers; // Override TestableContainer member + +}; + +/* ************************************************************************** */ + +template +class BreadthMappableContainer { // Must extend MappableContainer + +private: + + // ... + +protected: + + // ... + +public: + + // Destructor + // ~BreadthMappableContainer() specifiers + + /* ************************************************************************ */ + + // Copy assignment + // type operator=(argument); // Copy assignment of abstract types should not be possible. + + // Move assignment + // type operator=(argument); // Move assignment of abstract types should not be possible. + + /* ************************************************************************ */ + + // Comparison operators + // type operator==(argument) specifiers; // Comparison of abstract types might not be possible. + // type operator!=(argument) specifiers; // Comparison of abstract types might not be possible. + + /* ************************************************************************ */ + + // Specific member functions + + // using typename MappableContainer::MapFunctor; + + // type MapBreadth(arguments) specifiers; + +}; + +/* ************************************************************************** */ + +template +class BreadthFoldableContainer { // Must extend FoldableContainer + +private: + + // ... + +protected: + + // ... + +public: + + // Destructor + // ~BreadthFoldableContainer() specifiers + + /* ************************************************************************ */ + + // Copy assignment + // type operator=(argument); // Copy assignment of abstract types should not be possible. + + // Move assignment + // type operator=(argument); // Move assignment of abstract types should not be possible. + + /* ************************************************************************ */ + + // Comparison operators + // type operator==(argument) specifiers; // Comparison of abstract types might not be possible. + // type operator!=(argument) specifiers; // Comparison of abstract types might not be possible. + + /* ************************************************************************ */ + + // Specific member functions + + // using typename FoldableContainer::FoldFunctor; + + // type FoldBreadth(arguments) specifiers; + +}; + +/* ************************************************************************** */ + +} + +#include "container.cpp" + +#endif diff --git a/librerie/exercise2/list/list.cpp b/librerie/exercise2/list/list.cpp new file mode 100755 index 0000000..d374ceb --- /dev/null +++ b/librerie/exercise2/list/list.cpp @@ -0,0 +1,10 @@ + +namespace lasd { + +/* ************************************************************************** */ + +// ... + +/* ************************************************************************** */ + +} diff --git a/librerie/exercise2/list/list.hpp b/librerie/exercise2/list/list.hpp new file mode 100755 index 0000000..c80e4df --- /dev/null +++ b/librerie/exercise2/list/list.hpp @@ -0,0 +1,169 @@ + +#ifndef LIST_HPP +#define LIST_HPP + +/* ************************************************************************** */ + +#include "../container/container.hpp" + +/* ************************************************************************** */ + +namespace lasd { + +/* ************************************************************************** */ + +template +class List { // Must extend LinearContainer, MappableContainer, and FoldableContainer + +private: + + // ... + +protected: + + // using LinearContainer::???; + + struct Node + { + + // Data + // ... + + /* ********************************************************************** */ + + // Specific constructors + // ... + + /* ********************************************************************** */ + + // Copy constructor + // ... + + // Move constructor + // ... + + /* ********************************************************************** */ + + // Destructor + // ... + + /* ********************************************************************** */ + + // Comparison operators + // ... + + /* ********************************************************************** */ + + // Specific member functions + + // ... + + }; + + // ... + +public: + + // Default constructor + // List() specifiers; + + /* ************************************************************************ */ + + // Specific constructor + // List(argument) specifiers; // A list obtained from a LinearContainer + + /* ************************************************************************ */ + + // Copy constructor + // List(argument) specifiers; + + // Move constructor + // List(argument) specifiers; + + /* ************************************************************************ */ + + // Destructor + // ~List() specifiers; + + /* ************************************************************************ */ + + // Copy assignment + // type operator=(argument) specifiers; + + // Move assignment + // type operator=(argument) specifiers; + + /* ************************************************************************ */ + + // Comparison operators + // type operator==(argument) specifiers; + // type operator!=(argument) specifiers; + + /* ************************************************************************ */ + + // Specific member functions + + // type InsertAtFront(argument) specifier; // Copy of the value + // type InsertAtFront(argument) specifier; // Move of the value + // type RemoveFromFront() specifier; // (must throw std::length_error when empty) + // type FrontNRemove() specifier; // (must throw std::length_error when empty) + + // type InsertAtBack(argument) specifier; // Copy of the value + // type InsertAtBack(argument) specifier; // Move of the value + + /* ************************************************************************ */ + + // Specific member functions (inherited from Container) + + // type Clear() specifiers; // Override Container member + + /* ************************************************************************ */ + + // Specific member functions (inherited from LinearContainer) + + // type Front() specifiers; // Override LinearContainer member (must throw std::length_error when empty) + // type Back() specifiers; // Override LinearContainer member (must throw std::length_error when empty) + + // type operator[](argument) specifiers; // Override LinearContainer member (must throw std::out_of_range when out of range) + + /* ************************************************************************ */ + + // Specific member functions (inherited from MappableContainer) + + // using typename MappableContainer::MapFunctor; + + // type MapPreOrder(arguments) specifiers; // Override MappableContainer member + // type MapPostOrder(arguments) specifiers; // Override MappableContainer member + + /* ************************************************************************ */ + + // Specific member functions (inherited from FoldableContainer) + + // using typename FoldableContainer::FoldFunctor; + + // type FoldPreOrder(arguments) specifiers; // Override FoldableContainer member + // type FoldPostOrder(arguments) specifiers; // Override FoldableContainer member + +protected: + + // Auxiliary member functions (for MappableContainer) + + // type MapPreOrder(arguments) specifiers; // Accessory function executing from one point of the list onwards + // type MapPostOrder(arguments) specifiers; // Accessory function executing from one point of the list onwards + + /* ************************************************************************ */ + + // Auxiliary member functions (for FoldableContainer) + + // type FoldPreOrder(arguments) specifiers; // Accessory function executing from one point of the list onwards + // type FoldPostOrder(arguments) specifiers; // Accessory function executing from one point of the list onwards + +}; + +/* ************************************************************************** */ + +} + +#include "list.cpp" + +#endif diff --git a/librerie/exercise2/main.cpp b/librerie/exercise2/main.cpp new file mode 100755 index 0000000..34faa12 --- /dev/null +++ b/librerie/exercise2/main.cpp @@ -0,0 +1,16 @@ + +#include "zlasdtest/test.hpp" + +#include "zmytest/test.hpp" + +/* ************************************************************************** */ + +#include + +/* ************************************************************************** */ + +int main() { + std::cout << "Lasd Libraries 2020" << std::endl; + lasdtest(); // To call in the menu of your library test! + return 0; +} diff --git a/librerie/exercise2/queue/lst/queuelst.cpp b/librerie/exercise2/queue/lst/queuelst.cpp new file mode 100755 index 0000000..d374ceb --- /dev/null +++ b/librerie/exercise2/queue/lst/queuelst.cpp @@ -0,0 +1,10 @@ + +namespace lasd { + +/* ************************************************************************** */ + +// ... + +/* ************************************************************************** */ + +} diff --git a/librerie/exercise2/queue/lst/queuelst.hpp b/librerie/exercise2/queue/lst/queuelst.hpp new file mode 100755 index 0000000..4f1954c --- /dev/null +++ b/librerie/exercise2/queue/lst/queuelst.hpp @@ -0,0 +1,90 @@ + +#ifndef QUEUELST_HPP +#define QUEUELST_HPP + +/* ************************************************************************** */ + +#include "../queue.hpp" +#include "../../list/list.hpp" + +/* ************************************************************************** */ + +namespace lasd { + +/* ************************************************************************** */ + +template +class QueueLst { // Must extend Queue and List + +private: + + // ... + +protected: + + // using List::???; + + // ... + +public: + + // Default constructor + // QueueLst() specifier; + + /* ************************************************************************ */ + + // Specific constructor + // QueueLst(argument) specifiers; // A queue obtained from a LinearContainer + + /* ************************************************************************ */ + + // Copy constructor + // QueueLst(argument); + + // Move constructor + // QueueLst(argument); + + /* ************************************************************************ */ + + // Destructor + // ~QueueLst() specifier; + + /* ************************************************************************ */ + + // Copy assignment + // type operator=(argument); + + // Move assignment + // type operator=(argument); + + /* ************************************************************************ */ + + // Comparison operators + // type operator==(argument) specifiers; + // type operator!=(argument) specifiers; + + /* ************************************************************************ */ + + // Specific member functions (inherited from Queue) + + // type Enqueue(argument) specifiers; // Override Queue member (copy of the value) + // type Enqueue(argument) specifiers; // Override Queue member (move of the value) + // type Head() specifiers; // Override Queue member (must throw std::length_error when empty) + // type Dequeue() specifiers; // Override Queue member (must throw std::length_error when empty) + // type HeadNDequeue() specifiers; // Override Queue member (must throw std::length_error when empty) + + /* ************************************************************************ */ + + // Specific member functions (inherited from Container) + + // type Clear() specifiers; // Override Container member + +}; + +/* ************************************************************************** */ + +} + +#include "queuelst.cpp" + +#endif diff --git a/librerie/exercise2/queue/queue.hpp b/librerie/exercise2/queue/queue.hpp new file mode 100755 index 0000000..6b612e4 --- /dev/null +++ b/librerie/exercise2/queue/queue.hpp @@ -0,0 +1,61 @@ + +#ifndef QUEUE_HPP +#define QUEUE_HPP + +/* ************************************************************************** */ + +#include "../container/container.hpp" + +/* ************************************************************************** */ + +namespace lasd { + +/* ************************************************************************** */ + +template +class Queue { // Must extend Container + +private: + + // ... + +protected: + + // ... + +public: + + // Destructor + // ~Queue() specifiers + + /* ************************************************************************ */ + + // Copy assignment + // type operator=(argument); // Copy assignment of abstract types should not be possible. + + // Move assignment + // type operator=(argument); // Move assignment of abstract types should not be possible. + + /* ************************************************************************ */ + + // Comparison operators + // type operator==(argument) specifiers; // Comparison of abstract types might not be possible. + // type operator!=(argument) specifiers; // Comparison of abstract types might not be possible. + + /* ************************************************************************ */ + + // Specific member functions + + // type Enqueue(argument) specifiers; // Copy of the value + // type Enqueue(argument) specifiers; // Move of the value + // type Head() specifiers; // (concrete function must throw std::length_error when empty) + // type Dequeue() specifiers; // (concrete function must throw std::length_error when empty) + // type HeadNDequeue() specifiers; // (concrete function must throw std::length_error when empty) + +}; + +/* ************************************************************************** */ + +} + +#endif diff --git a/librerie/exercise2/queue/vec/queuevec.cpp b/librerie/exercise2/queue/vec/queuevec.cpp new file mode 100755 index 0000000..d374ceb --- /dev/null +++ b/librerie/exercise2/queue/vec/queuevec.cpp @@ -0,0 +1,10 @@ + +namespace lasd { + +/* ************************************************************************** */ + +// ... + +/* ************************************************************************** */ + +} diff --git a/librerie/exercise2/queue/vec/queuevec.hpp b/librerie/exercise2/queue/vec/queuevec.hpp new file mode 100755 index 0000000..97b7e97 --- /dev/null +++ b/librerie/exercise2/queue/vec/queuevec.hpp @@ -0,0 +1,102 @@ + +#ifndef QUEUEVEC_HPP +#define QUEUEVEC_HPP + +/* ************************************************************************** */ + +#include "../queue.hpp" +#include "../../vector/vector.hpp" + +/* ************************************************************************** */ + +namespace lasd { + +/* ************************************************************************** */ + +template +class QueueVec { // Must extend Queue and Vector + +private: + + // ... + +protected: + + // using Vector::???; + + // ... + +public: + + // Default constructor + // QueueVec() specifier; + + /* ************************************************************************ */ + + // Specific constructor + // QueueVec(argument) specifiers; // A queue obtained from a LinearContainer + + /* ************************************************************************ */ + + // Copy constructor + // QueueVec(argument); + + // Move constructor + // QueueVec(argument); + + /* ************************************************************************ */ + + // Destructor + // ~QueueVec() specifier; + + /* ************************************************************************ */ + + // Copy assignment + // type operator=(argument); + + // Move assignment + // type operator=(argument); + + /* ************************************************************************ */ + + // Comparison operators + // type operator==(argument) specifiers; + // type operator!=(argument) specifiers; + + /* ************************************************************************ */ + + // Specific member functions (inherited from Queue) + + // type Enqueue(argument) specifiers; // Override Queue member (copy of the value) + // type Enqueue(argument) specifiers; // Override Queue member (move of the value) + // type Head() specifiers; // Override Queue member (must throw std::length_error when empty) + // type Dequeue() specifiers; // Override Queue member (must throw std::length_error when empty) + // type HeadNDequeue() specifiers; // Override Queue member (must throw std::length_error when empty) + + /* ************************************************************************ */ + + // Specific member functions (inherited from Container) + + // type Empty() specifiers; // Override Container member + + // type Size() specifiers; // Override Container member + + // type Clear() specifiers; // Override Container member + +protected: + + // Auxiliary member functions + + // type Expand() specifiers; + // type Reduce() specifiers; + // type SwapVectors(arguments) specifiers; + +}; + +/* ************************************************************************** */ + +} + +#include "queuevec.cpp" + +#endif diff --git a/librerie/exercise2/stack/lst/stacklst.cpp b/librerie/exercise2/stack/lst/stacklst.cpp new file mode 100755 index 0000000..d374ceb --- /dev/null +++ b/librerie/exercise2/stack/lst/stacklst.cpp @@ -0,0 +1,10 @@ + +namespace lasd { + +/* ************************************************************************** */ + +// ... + +/* ************************************************************************** */ + +} diff --git a/librerie/exercise2/stack/lst/stacklst.hpp b/librerie/exercise2/stack/lst/stacklst.hpp new file mode 100755 index 0000000..67fbb32 --- /dev/null +++ b/librerie/exercise2/stack/lst/stacklst.hpp @@ -0,0 +1,90 @@ + +#ifndef STACKLST_HPP +#define STACKLST_HPP + +/* ************************************************************************** */ + +#include "../stack.hpp" +#include "../../list/list.hpp" + +/* ************************************************************************** */ + +namespace lasd { + +/* ************************************************************************** */ + +template +class StackLst { // Must extend Stack and List + +private: + + // ... + +protected: + + // using List::???; + + // ... + +public: + + // Default constructor + // StackLst() specifier; + + /* ************************************************************************ */ + + // Specific constructor + // StackLst(argument) specifiers; // A stack obtained from a LinearContainer + + /* ************************************************************************ */ + + // Copy constructor + // StackLst(argument); + + // Move constructor + // StackLst(argument); + + /* ************************************************************************ */ + + // Destructor + // ~StackLst() specifier; + + /* ************************************************************************ */ + + // Copy assignment + // type operator=(argument); + + // Move assignment + // type operator=(argument); + + /* ************************************************************************ */ + + // Comparison operators + // type operator==(argument) specifiers; + // type operator!=(argument) specifiers; + + /* ************************************************************************ */ + + // Specific member functions (inherited from Stack) + + // type Push(argument) specifiers; // Override Stack member (copy of the value) + // type Push(argument) specifiers; // Override Stack member (move of the value) + // type Top() specifiers; // Override Stack member (must throw std::length_error when empty) + // type Pop() specifiers; // Override Stack member (must throw std::length_error when empty) + // type TopNPop() specifiers; // Override Stack member (must throw std::length_error when empty) + + /* ************************************************************************ */ + + // Specific member functions (inherited from Container) + + // type Clear() specifiers; // Override Container member + +}; + +/* ************************************************************************** */ + +} + +#include "stacklst.cpp" + +#endif diff --git a/librerie/exercise2/stack/stack.hpp b/librerie/exercise2/stack/stack.hpp new file mode 100755 index 0000000..73a3a7c --- /dev/null +++ b/librerie/exercise2/stack/stack.hpp @@ -0,0 +1,61 @@ + +#ifndef STACK_HPP +#define STACK_HPP + +/* ************************************************************************** */ + +#include "../container/container.hpp" + +/* ************************************************************************** */ + +namespace lasd { + +/* ************************************************************************** */ + +template +class Stack { // Must extend Container + +private: + + // ... + +protected: + + // ... + +public: + + // Destructor + // ~Stack() specifiers + + /* ************************************************************************ */ + + // Copy assignment + // type operator=(argument); // Copy assignment of abstract types should not be possible. + + // Move assignment + // type operator=(argument); // Move assignment of abstract types should not be possible. + + /* ************************************************************************ */ + + // Comparison operators + // type operator==(argument) specifiers; // Comparison of abstract types might not be possible. + // type operator!=(argument) specifiers; // Comparison of abstract types might not be possible. + + /* ************************************************************************ */ + + // Specific member functions + + // type Push(argument) specifiers; // Copy of the value + // type Push(argument) specifiers; // Move of the value + // type Top() specifiers; // (concrete function must throw std::length_error when empty) + // type Pop() specifiers; // (concrete function must throw std::length_error when empty) + // type TopNPop() specifiers; // (concrete function must throw std::length_error when empty) + +}; + +/* ************************************************************************** */ + +} + +#endif diff --git a/librerie/exercise2/stack/vec/stackvec.cpp b/librerie/exercise2/stack/vec/stackvec.cpp new file mode 100755 index 0000000..d374ceb --- /dev/null +++ b/librerie/exercise2/stack/vec/stackvec.cpp @@ -0,0 +1,10 @@ + +namespace lasd { + +/* ************************************************************************** */ + +// ... + +/* ************************************************************************** */ + +} diff --git a/librerie/exercise2/stack/vec/stackvec.hpp b/librerie/exercise2/stack/vec/stackvec.hpp new file mode 100755 index 0000000..5e65367 --- /dev/null +++ b/librerie/exercise2/stack/vec/stackvec.hpp @@ -0,0 +1,101 @@ + +#ifndef STACKVEC_HPP +#define STACKVEC_HPP + +/* ************************************************************************** */ + +#include "../stack.hpp" +#include "../../vector/vector.hpp" + +/* ************************************************************************** */ + +namespace lasd { + +/* ************************************************************************** */ + +template +class StackVec { // Must extend Stack and Vector + +private: + + // ... + +protected: + + // using Vector::???; + + // ... + +public: + + // Default constructor + // StackVec() specifier; + + /* ************************************************************************ */ + + // Specific constructor + // StackVec(argument) specifiers; // A stack obtained from a LinearContainer + + /* ************************************************************************ */ + + // Copy constructor + // StackVec(argument); + + // Move constructor + // StackVec(argument); + + /* ************************************************************************ */ + + // Destructor + // ~StackVec() specifier; + + /* ************************************************************************ */ + + // Copy assignment + // type operator=(argument); + + // Move assignment + // type operator=(argument); + + /* ************************************************************************ */ + + // Comparison operators + // type operator==(argument) specifiers; + // type operator!=(argument) specifiers; + + /* ************************************************************************ */ + + // Specific member functions (inherited from Stack) + + // type Push(argument) specifiers; // Override Stack member (copy of the value) + // type Push(argument) specifiers; // Override Stack member (move of the value) + // type Top() specifiers; // Override Stack member (must throw std::length_error when empty) + // type Pop() specifiers; // Override Stack member (must throw std::length_error when empty) + // type TopNPop() specifiers; // Override Stack member (must throw std::length_error when empty) + + /* ************************************************************************ */ + + // Specific member functions (inherited from Container) + + // type Empty() specifiers; // Override Container member + + // type Size() specifiers; // Override Container member + + // type Clear() specifiers; // Override Container member + +protected: + + // Auxiliary member functions + + // type Expand() specifiers; + // type Reduce() specifiers; + +}; + +/* ************************************************************************** */ + +} + +#include "stackvec.cpp" + +#endif diff --git a/librerie/exercise2/vector/vector.cpp b/librerie/exercise2/vector/vector.cpp new file mode 100755 index 0000000..d374ceb --- /dev/null +++ b/librerie/exercise2/vector/vector.cpp @@ -0,0 +1,10 @@ + +namespace lasd { + +/* ************************************************************************** */ + +// ... + +/* ************************************************************************** */ + +} diff --git a/librerie/exercise2/vector/vector.hpp b/librerie/exercise2/vector/vector.hpp new file mode 100755 index 0000000..6f127ff --- /dev/null +++ b/librerie/exercise2/vector/vector.hpp @@ -0,0 +1,113 @@ + +#ifndef VECTOR_HPP +#define VECTOR_HPP + +/* ************************************************************************** */ + +#include "../container/container.hpp" + +/* ************************************************************************** */ + +namespace lasd { + +/* ************************************************************************** */ + +template +class Vector { // Must extend LinearContainer, MappableContainer, and FoldableContainer + +private: + + // ... + +protected: + + // using LinearContainer::???; + + // ... + +public: + + // Default constructor + // Vector() specifiers; + + /* ************************************************************************ */ + + // Specific constructors + // Vector(argument) specifiers; // A vector with a given initial dimension + // Vector(argument) specifiers; // A vector obtained from a LinearContainer + + /* ************************************************************************ */ + + // Copy constructor + // Vector(argument) specifiers; + + // Move constructor + // Vector(argument) specifiers; + + /* ************************************************************************ */ + + // Destructor + // ~Vector() specifiers; + + /* ************************************************************************ */ + + // Copy assignment + // type operator=(argument) specifiers; + + // Move assignment + // type operator=(argument) specifiers; + + /* ************************************************************************ */ + + // Comparison operators + // type operator==(argument) specifiers; + // type operator!=(argument) specifiers; + + /* ************************************************************************ */ + + // Specific member functions + + // type Resize(argument) specifiers; // Resize the vector to a given size + + /* ************************************************************************ */ + + // Specific member functions (inherited from Container) + + // type Clear() specifiers; // Override Container member + + /* ************************************************************************ */ + + // Specific member functions (inherited from LinearContainer) + + // type Front() specifiers; // Override LinearContainer member (must throw std::length_error when empty) + // type Back() specifiers; // Override LinearContainer member (must throw std::length_error when empty) + + // type operator[](argument) specifiers; // Override LinearContainer member (must throw std::out_of_range when out of range) + + /* ************************************************************************ */ + + // Specific member functions (inherited from MappableContainer) + + // using typename MappableContainer::MapFunctor; + + // type MapPreOrder(arguments) specifiers; // Override MappableContainer member + // type MapPostOrder(arguments) specifiers; // Override MappableContainer member + + /* ************************************************************************ */ + + // Specific member functions (inherited from FoldableContainer) + + // using typename FoldableContainer::FoldFunctor; + + // type FoldPreOrder(arguments) specifiers; // Override FoldableContainer member + // type FoldPostOrder(arguments) specifiers; // Override FoldableContainer member + +}; + +/* ************************************************************************** */ + +} + +#include "vector.cpp" + +#endif diff --git a/librerie/exercise2/zlasdtest/container/container.cpp b/librerie/exercise2/zlasdtest/container/container.cpp new file mode 100755 index 0000000..0f37c81 --- /dev/null +++ b/librerie/exercise2/zlasdtest/container/container.cpp @@ -0,0 +1,49 @@ + +#include + +/* ************************************************************************** */ + +#include "../../container/container.hpp" + +/* ************************************************************************** */ + +// Container member functions! + +void Empty(uint& testnum, uint& testerr, const lasd::Container& con, bool chk) { + bool tst; + testnum++; + std::cout << " " << testnum << " The container is " << ((tst = con.Empty()) ? "" : "not ") << "empty: "; + std::cout << ((tst = (tst == chk)) ? "Correct" : "Error") << "!" << std::endl; + testerr += (1 - (uint) tst); +} + +void Size(uint& testnum, uint& testerr, const lasd::Container& con, bool chk, ulong siz) { + bool tst; + testnum++; + std::cout << " " << testnum << " The container has size " << con.Size() << ": "; + std::cout << ((tst = ((con.Size() == siz) == chk)) ? "Correct" : "Error") << "!" << std::endl; + testerr += (1 - (uint) tst); +} + +/* ************************************************************************** */ + +// Auxiliary functions for MappableContainer! + +void MapStringAppend(std::string& dat, void* par) { + dat.append(*((std::string*) par)); +} + +/* ************************************************************************** */ + +// Auxiliary functions for FoldableContainer! + +void FoldParity(const int& dat, const void* _, void* acc) { + *((int*) acc) += dat; + *((int*) acc) %= 2; +} + +void FoldStringConcatenate(const std::string& dat, const void* _, void* acc) { + ((std::string*) acc)->append(dat); +} + +/* ************************************************************************** */ diff --git a/librerie/exercise2/zlasdtest/container/container.hpp b/librerie/exercise2/zlasdtest/container/container.hpp new file mode 100755 index 0000000..d1503cc --- /dev/null +++ b/librerie/exercise2/zlasdtest/container/container.hpp @@ -0,0 +1,301 @@ + +#ifndef CONTAINERTEST_HPP +#define CONTAINERTEST_HPP + +#include "../../container/container.hpp" + +/* ************************************************************************** */ + +// Container member functions! + +void Empty(uint&, uint&, const lasd::Container&, bool); + +void Size(uint&, uint&, const lasd::Container&, bool, ulong); + +/* ************************************************************************** */ + +// LinearContainer member functions! + +template +void GetFront(uint& testnum, uint& testerr, const lasd::LinearContainer& con, bool chk, const Data& val) { + bool tst; + testnum++; + try { + std::cout << " " << testnum << " The front of the linear container is \"" << con.Front() << "\": "; + std::cout << ((tst = ((con.Front() == val) == chk)) ? "Correct" : "Error") << "!" << std::endl; + } catch(std::length_error exc) { + std::cout << exc.what() << "\": " << ((tst = !chk) ? "Correct" : "Error") << "!" << std::endl; + } catch(std::exception exc) { + tst = false; + std::cout << std::endl << "Wrong exception: " << exc.what() << "!" << std::endl; + } + testerr += (1 - (uint) tst); +} + +template +void SetFront(uint& testnum, uint& testerr, const lasd::LinearContainer& con, bool chk, const Data& val) { + bool tst; + testnum++; + try { + std::cout << " " << testnum << " Setting the front of the linear container to \"" << val << "\": "; + con.Front() = val; + std::cout << ((tst = chk) ? "Correct" : "Error") << "!" << std::endl; + } catch(std::length_error exc) { + std::cout << exc.what() << "\": " << ((tst = !chk) ? "Correct" : "Error") << "!" << std::endl; + } catch(std::exception exc) { + tst = false; + std::cout << std::endl << "Wrong exception: " << exc.what() << "!" << std::endl; + } + testerr += (1 - (uint) tst); +} + +template +void GetBack(uint& testnum, uint& testerr, const lasd::LinearContainer& con, bool chk, const Data& val) { + bool tst; + testnum++; + try { + std::cout << " " << testnum << " The back of the linear container is \"" << con.Back() << "\": "; + std::cout << ((tst = ((con.Back() == val) == chk)) ? "Correct" : "Error") << "!" << std::endl; + } catch(std::length_error exc) { + std::cout << exc.what() << "\": " << ((tst = !chk) ? "Correct" : "Error") << "!" << std::endl; + } catch(std::exception exc) { + tst = false; + std::cout << std::endl << "Wrong exception: " << exc.what() << "!" << std::endl; + } + testerr += (1 - (uint) tst); +} + +template +void SetBack(uint& testnum, uint& testerr, const lasd::LinearContainer& con, bool chk, const Data& val) { + bool tst; + testnum++; + try { + std::cout << " " << testnum << " Setting the back of the linear container to \"" << val << "\": "; + con.Back() = val; + std::cout << ((tst = chk) ? "Correct" : "Error") << "!" << std::endl; + } catch(std::length_error exc) { + std::cout << exc.what() << "\": " << ((tst = !chk) ? "Correct" : "Error") << "!" << std::endl; + } catch(std::exception exc) { + tst = false; + std::cout << std::endl << "Wrong exception: " << exc.what() << "!" << std::endl; + } + testerr += (1 - (uint) tst); +} + +template +void SetAt(uint& testnum, uint& testerr, lasd::LinearContainer& con, bool chk, const ulong& ind, const Data& val) { + bool tst; + testnum++; + try { + std::cout << " " << testnum << " Set of the linear container at index \"" << ind << "\" with value \"" << val << "\": "; + con[ind] = val; + std::cout << ((tst = chk) ? "Correct" : "Error") << "!" << std::endl; + } catch(std::out_of_range exc) { + std::cout << "\"" << exc.what() << "\": " << ((tst = !chk) ? "Correct" : "Error") << "!" << std::endl; + } catch(std::exception exc) { + tst = false; + std::cout << std::endl << "Wrong exception: " << exc.what() << "!" << std::endl; + } + testerr += (1 - (uint) tst); +} + +template +void GetAt(uint& testnum, uint& testerr, lasd::LinearContainer& con, bool chk, const ulong& ind, const Data& val) { + bool tst; + testnum++; + try { + std::cout << " " << testnum << " Get of the linear container at index \"" << ind << "\" with value \"" << con[ind] << "\": "; + std::cout << ((tst = ((con[ind] == val) == chk)) ? "Correct" : "Error") << "!" << std::endl; + } catch(std::out_of_range exc) { + std::cout << exc.what() << "\": " << ((tst = !chk) ? "Correct" : "Error") << "!" << std::endl; + } catch(std::exception exc) { + tst = false; + std::cout << std::endl << "Wrong exception: " << exc.what() << "!" << std::endl; + } + testerr += (1 - (uint) tst); +} + +/* ************************************************************************** */ + +// TestableContainer member functions! + +template +void Exists(uint& testnum, uint& testerr, const lasd::TestableContainer& con, bool chk, const Data& val) { + bool tst; + testnum++; + std::cout << " " << testnum << " Data \"" << val << "\" " << ((tst = con.Exists(val)) ? "does" : "does not") << " exist: "; + std::cout << ((tst = (tst == chk)) ? "Correct" : "Error") << "!" << std::endl; + testerr += (1 - (uint) tst); +} + +/* ************************************************************************** */ + +// MappableContainer member functions! + +template +void MapPreOrder(uint& testnum, uint& testerr, lasd::MappableContainer& con, bool chk, typename lasd::MappableContainer::MapFunctor fun, const Parameter& inipar) { + bool tst = true; + testnum++; + Parameter par = {inipar}; + try { + std::cout << " " << testnum << " Executing map in pre order - "; + con.MapPreOrder(fun, &par); + std::cout << ": " << ((tst = chk) ? "Correct" : "Error") << "!" << std::endl; + } catch(std::exception exc) { + std::cout << "\"" << exc.what() << "\": " << ((tst = !chk) ? "Correct" : "Error") << "!" << std::endl; + } + testerr += (1 - (uint) tst); +} + +template +void MapPostOrder(uint& testnum, uint& testerr, lasd::MappableContainer& con, bool chk, typename lasd::MappableContainer::MapFunctor fun, const Parameter& inipar) { + bool tst = true; + testnum++; + Parameter par = {inipar}; + try { + std::cout << " " << testnum << " Executing map in post order - "; + con.MapPostOrder(fun, &par); + std::cout << ": " << ((tst = chk) ? "Correct" : "Error") << "!" << std::endl; + } catch(std::exception exc) { + std::cout << "\"" << exc.what() << "\": " << ((tst = !chk) ? "Correct" : "Error") << "!" << std::endl; + } + testerr += (1 - (uint) tst); +} + +template +void MapPrint(const Data& dat, void* _) { + std::cout << dat << " "; +} + +template +void MapIncrement(Data& dat, void* _) { + dat++; +} + +template +void MapIncrementNPrint(Data& dat, void* _) { + std::cout << dat++ << "->" << dat << "; "; +} + +template +void MapDouble(Data& dat, void* _) { + dat *= 2; +} + +template +void MapDoubleNPrint(Data& dat, void* _) { + std::cout << dat << "->" << (dat *= 2) << "; "; +} + +template +void MapInvert(Data& dat, void* _) { + dat = -dat; +} + +template +void MapInvertNPrint(Data& dat, void* _) { + std::cout << dat << "->" << (dat = -dat) << "; "; +} + +template +void MapParityInvert(Data& dat, void* _) { + if (dat % 2 != 0) { dat = -dat; } +} + +void MapStringAppend(std::string&, void*); + +/* ************************************************************************** */ + +// FoldableContainer member functions! + +template +void FoldPreOrder(uint& testnum, uint& testerr, const lasd::FoldableContainer& con, bool chk, typename lasd::FoldableContainer::FoldFunctor fun, const Parameter& inipar, const Value& inival, const Value& finval) { + bool tst; + testnum++; + Parameter par = {inipar}; + Value val = inival; + try { + std::cout << " " << testnum << " Executing fold in pre order - "; + con.FoldPreOrder(fun, &par, &val); + std::cout << "obtained value is \"" << val << "\": "; + std::cout << ((tst = ((val == finval) == chk)) ? "Correct" : "Error") << "!" << std::endl; + } catch(std::exception exc) { + std::cout << "\"" << exc.what() << "\": " << ((tst = !chk) ? "Correct" : "Error") << "!" << std::endl; + } + testerr += (1 - (uint) tst); +} + +template +void FoldPostOrder(uint& testnum, uint& testerr, const lasd::FoldableContainer& con, bool chk, typename lasd::FoldableContainer::FoldFunctor fun, const Parameter& inipar, const Value& inival, const Value& finval) { + bool tst; + testnum++; + Parameter par = {inipar}; + Value val = inival; + try { + std::cout << " " << testnum << " Executing fold in post order - "; + con.FoldPostOrder(fun, &par, &val); + std::cout << "obtained value is \"" << val << "\": "; + std::cout << ((tst = ((val == finval) == chk)) ? "Correct" : "Error") << "!" << std::endl; + } catch(std::exception exc) { + std::cout << "\"" << exc.what() << "\": " << ((tst = !chk) ? "Correct" : "Error") << "!" << std::endl; + } + testerr += (1 - (uint) tst); +} + +template +void FoldAdd(const Data& dat, const void* _, void* acc) { + *((Data*) acc) += dat; +} + +template +void FoldMultiply(const Data& dat, const void* _, void* acc) { + *((Data*) acc) *= dat; +} + +void FoldParity(const int&, const void*, void*); + +void FoldStringConcatenate(const std::string&, const void*, void*); + +/* ************************************************************************** */ + +// BreadthMappableContainer member functions! + +template +void MapBreadth(uint& testnum, uint& testerr, lasd::BreadthMappableContainer& con, bool chk, typename lasd::BreadthMappableContainer::MapFunctor fun, const Parameter& inipar) { + bool tst = true; + testnum++; + Parameter par = {inipar}; + try { + std::cout << " " << testnum << " Executing map in pre order - "; + con.MapBreadth(fun, &par); + std::cout << ": " << ((tst = chk) ? "Correct" : "Error") << "!" << std::endl; + } catch(std::exception exc) { + std::cout << "\"" << exc.what() << "\": " << ((tst = !chk) ? "Correct" : "Error") << "!" << std::endl; + } + testerr += (1 - (uint) tst); +} + +/* ************************************************************************** */ + +// BreadthFoldableContainer member functions! + +template +void FoldBreadth(uint& testnum, uint& testerr, const lasd::BreadthFoldableContainer& con, bool chk, typename lasd::BreadthFoldableContainer::FoldFunctor fun, const Parameter& inipar, const Value& inival, const Value& finval) { + bool tst; + testnum++; + Parameter par = {inipar}; + Value val = inival; + try { + std::cout << " " << testnum << " Executing fold in post order - "; + con.FoldBreadth(fun, &par, &val); + std::cout << "obtained value is \"" << val << "\": "; + std::cout << ((tst = ((val == finval) == chk)) ? "Correct" : "Error") << "!" << std::endl; + } catch(std::exception exc) { + std::cout << "\"" << exc.what() << "\": " << ((tst = !chk) ? "Correct" : "Error") << "!" << std::endl; + } + testerr += (1 - (uint) tst); +} + +/* ************************************************************************** */ + +#endif diff --git a/librerie/exercise2/zlasdtest/exercise1/fulltest.cpp b/librerie/exercise2/zlasdtest/exercise1/fulltest.cpp new file mode 100755 index 0000000..27f84be --- /dev/null +++ b/librerie/exercise2/zlasdtest/exercise1/fulltest.cpp @@ -0,0 +1,3 @@ + +void testFullExercise1() { +} diff --git a/librerie/exercise2/zlasdtest/exercise1/simpletest.cpp b/librerie/exercise2/zlasdtest/exercise1/simpletest.cpp new file mode 100755 index 0000000..8fbc655 --- /dev/null +++ b/librerie/exercise2/zlasdtest/exercise1/simpletest.cpp @@ -0,0 +1,447 @@ + +#include + +/* ************************************************************************** */ + +#include "../container/container.hpp" + +#include "../vector/vector.hpp" + +#include "../list/list.hpp" + +/* ************************************************************************** */ + +using namespace std; + +/* ************************************************************************** */ + +void stestVectorInt(uint& testnum, uint& testerr) { + uint loctestnum = 0, loctesterr = 0; + cout << endl << "Begin of Vector Test:" << endl; + try { + { + lasd::Vector vec; + Empty(loctestnum, loctesterr, vec, true); + + GetFront(loctestnum, loctesterr, vec, false, 0); + GetBack(loctestnum, loctesterr, vec, false, 0); + SetAt(loctestnum, loctesterr, vec, false, 1, 0); + GetAt(loctestnum, loctesterr, vec, false, 2, 0); + + Exists(loctestnum, loctesterr, vec, false, 0); + + MapPreOrder(loctestnum, loctesterr, vec, true, &MapPrint, 0); + MapPostOrder(loctestnum, loctesterr, vec, true, &MapPrint, 0); + + FoldPreOrder(loctestnum, loctesterr, vec, true, &FoldAdd, 0, 0, 0); + FoldPostOrder(loctestnum, loctesterr, vec, true, &FoldAdd, 0, 0, 0); + } + { + lasd::Vector vec(3); + Empty(loctestnum, loctesterr, vec, false); + Size(loctestnum, loctesterr, vec, true, 3); + + SetAt(loctestnum, loctesterr, vec, true, 0, 4); + SetAt(loctestnum, loctesterr, vec, true, 1, 3); + SetAt(loctestnum, loctesterr, vec, true, 2, 1); + + GetFront(loctestnum, loctesterr, vec, true, 4); + GetBack(loctestnum, loctesterr, vec, true, 1); + + SetFront(loctestnum, loctesterr, vec, true, 5); + SetBack(loctestnum, loctesterr, vec, true, 4); + + Exists(loctestnum, loctesterr, vec, true, 4); + + MapPreOrder(loctestnum, loctesterr, vec, true, &MapPrint, 0); + MapPostOrder(loctestnum, loctesterr, vec, true, &MapPrint, 0); + FoldPreOrder(loctestnum, loctesterr, vec, true, &FoldAdd, 0, 0, 12); + FoldPostOrder(loctestnum, loctesterr, vec, true, &FoldMultiply, 0, 1, 60); + + vec.Resize(2); + FoldPostOrder(loctestnum, loctesterr, vec, true, &FoldMultiply, 0, 1, 15); + } + } catch(...) { + loctestnum++; loctesterr++; + cout << endl << "Unmanaged error! " << endl; + } + cout << "End of Vector Test! (Errors/Tests: " << loctesterr << "/" << loctestnum << ")" << endl; + testnum += loctestnum; + testerr += loctesterr; +} + +void stestVectorDouble(uint& testnum, uint& testerr) { + uint loctestnum = 0, loctesterr = 0; + cout << endl << "Begin of Vector Test:" << endl; + try { + lasd::Vector vec(3); + Empty(loctestnum, loctesterr, vec, false); + Size(loctestnum, loctesterr, vec, true, 3); + + SetAt(loctestnum, loctesterr, vec, true, 0, 5.5); + SetAt(loctestnum, loctesterr, vec, true, 1, 3.3); + SetAt(loctestnum, loctesterr, vec, true, 2, 1.1); + + GetFront(loctestnum, loctesterr, vec, true, 5.5); + GetBack(loctestnum, loctesterr, vec, true, 1.1); + + Exists(loctestnum, loctesterr, vec, true, 3.3); + + FoldPreOrder(loctestnum, loctesterr, vec, true, &FoldAdd, 0.0, 0.0, 9.9); + FoldPostOrder(loctestnum, loctesterr, vec, true, &FoldMultiply, 0.0, 1.0, 19.965); + } catch(...) { + loctestnum++; loctesterr++; + cout << endl << "Unmanaged error! " << endl; + } + cout << "End of Vector Test! (Errors/Tests: " << loctesterr << "/" << loctestnum << ")" << endl; + testnum += loctestnum; + testerr += loctesterr; +} + +void stestVectorString(uint& testnum, uint& testerr) { + uint loctestnum = 0, loctesterr = 0; + cout << endl << "Begin of Vector Test:" << endl; + try { + lasd::Vector vec(2); + Empty(loctestnum, loctesterr, vec, false); + Size(loctestnum, loctesterr, vec, true, 2); + + SetAt(loctestnum, loctesterr, vec, true, 0, string("A")); + SetAt(loctestnum, loctesterr, vec, true, 1, string("B")); + + GetFront(loctestnum, loctesterr, vec, true, string("A")); + GetBack(loctestnum, loctesterr, vec, true, string("B")); + + Exists(loctestnum, loctesterr, vec, true, string("A")); + + MapPreOrder(loctestnum, loctesterr, vec, true, &MapStringAppend, string(" ")); + MapPreOrder(loctestnum, loctesterr, vec, true, &MapPrint, 0); + FoldPreOrder(loctestnum, loctesterr, vec, true, &FoldStringConcatenate, string(""), string("X"), string("XA B ")); + FoldPostOrder(loctestnum, loctesterr, vec, true, &FoldStringConcatenate, string(""), string("X"), string("XB A ")); + + Exists(loctestnum, loctesterr, vec, false, string("A")); + + lasd::Vector copvec(vec); + EqualVector(loctestnum, loctesterr, vec, copvec, true); + MapPreOrder(loctestnum, loctesterr, vec, true, &MapStringAppend, string("!")); + NonEqualVector(loctestnum, loctesterr, vec, copvec, true); + + copvec = std::move(vec); + FoldPreOrder(loctestnum, loctesterr, copvec, true, &FoldStringConcatenate, string(""), string("?"), string("?A !B !")); + + lasd::Vector movvec(std::move(vec)); + FoldPreOrder(loctestnum, loctesterr, movvec, true, &FoldStringConcatenate, string(""), string("?"), string("?A B ")); + SetAt(loctestnum, loctesterr, vec, false, 1, string("")); + vec.Resize(1); + SetAt(loctestnum, loctesterr, vec, true, 0, string("X")); + + movvec.Clear(); + Empty(loctestnum, loctesterr, movvec, true); + } catch(...) { + loctestnum++; loctesterr++; + cout << endl << "Unmanaged error! " << endl; + } + cout << "End of Vector Test! (Errors/Tests: " << loctesterr << "/" << loctestnum << ")" << endl; + testnum += loctestnum; + testerr += loctesterr; +} + +void stestVector(uint& testnum, uint& testerr) { + uint loctestnum = 0, loctesterr = 0; + stestVectorInt(loctestnum, loctesterr); + stestVectorDouble(loctestnum, loctesterr); + stestVectorString(loctestnum, loctesterr); + testnum += loctestnum; + testerr += loctesterr; + cout << endl << "Exercise 1 - Vector (Errors/Tests: " << loctesterr << "/" << loctestnum << ")" << endl; +} + +/* ************************************************************************** */ + +void stestListInt(uint& testnum, uint& testerr) { + uint loctestnum = 0, loctesterr = 0; + cout << endl << "Begin of List Test:" << endl; + try { + lasd::List lst; + Empty(loctestnum, loctesterr, lst, true); + Size(loctestnum, loctesterr, lst, true, 0); + + GetFront(loctestnum, loctesterr, lst, false, 0); + GetBack(loctestnum, loctesterr, lst, false, 0); + + Exists(loctestnum, loctesterr, lst, false, 0); + + MapPreOrder(loctestnum, loctesterr, lst, true, &MapPrint, 0); + MapPostOrder(loctestnum, loctesterr, lst, true, &MapPrint, 0); + FoldPreOrder(loctestnum, loctesterr, lst, true, &FoldAdd, 0, 0, 0); + FoldPostOrder(loctestnum, loctesterr, lst, true, &FoldAdd, 0, 0, 0); + + RemoveFromFront(loctestnum, loctesterr, lst, false); + FrontNRemove(loctestnum, loctesterr, lst, false, 0); + + InsertAtBack(loctestnum, loctesterr, lst, true, 4); + InsertAtFront(loctestnum, loctesterr, lst, true, 5); + InsertAtFront(loctestnum, loctesterr, lst, true, 9); + InsertAtBack(loctestnum, loctesterr, lst, true, 2); + InsertAtFront(loctestnum, loctesterr, lst, true, 1); + + GetFront(loctestnum, loctesterr, lst, true, 1); + GetBack(loctestnum, loctesterr, lst, true, 2); + SetFront(loctestnum, loctesterr, lst, true, 2); + SetBack(loctestnum, loctesterr, lst, true, 6); + + GetAt(loctestnum, loctesterr, lst, true, 3, 4); + SetAt(loctestnum, loctesterr, lst, true, 3, 3); + + Exists(loctestnum, loctesterr, lst, false, 4); + + MapPreOrder(loctestnum, loctesterr, lst, true, &MapPrint, 0); + MapPostOrder(loctestnum, loctesterr, lst, true, &MapPrint, 0); + FoldPreOrder(loctestnum, loctesterr, lst, true, &FoldAdd, 0, 0, 25); + FoldPostOrder(loctestnum, loctesterr, lst, true, &FoldMultiply, 0, 1, 1620); + + RemoveFromFront(loctestnum, loctesterr, lst, true); + FrontNRemove(loctestnum, loctesterr, lst, true, 9); + FoldPostOrder(loctestnum, loctesterr, lst, true, &FoldMultiply, 0, 1, 90); + + lasd::List coplst(lst); + EqualList(loctestnum, loctesterr, lst, coplst, true); + MapPreOrder(loctestnum, loctesterr, lst, true, &MapIncrement, 0); + NonEqualList(loctestnum, loctesterr, lst, coplst, true); + + InsertAtFront(loctestnum, loctesterr, lst, true, 0); + InsertAtBack(loctestnum, loctesterr, lst, true, 0); + NonEqualList(loctestnum, loctesterr, lst, coplst, true); + coplst = lst; + EqualList(loctestnum, loctesterr, lst, coplst, true); + + RemoveFromFront(loctestnum, loctesterr, coplst, true); + FrontNRemove(loctestnum, loctesterr, coplst, true, 6); + coplst = std::move(lst); + FoldPreOrder(loctestnum, loctesterr, lst, true, &FoldAdd, 0, 0, 11); + FoldPreOrder(loctestnum, loctesterr, coplst, true, &FoldAdd, 0, 0, 17); + + lasd::List movlst(std::move(lst)); + MapPreOrder(loctestnum, loctesterr, movlst, true, &MapIncrement, 0); + FoldPreOrder(loctestnum, loctesterr, movlst, true, &FoldAdd, 0, 0, 14); + + movlst.Clear(); + Empty(loctestnum, loctesterr, movlst, true); + Size(loctestnum, loctesterr, movlst, true, 0); + } catch(...) { + loctestnum++; loctesterr++; + cout << endl << "Unmanaged error! " << endl; + } + cout << "End of List Test! (Errors/Tests: " << loctesterr << "/" << loctestnum << ")" << endl; + testnum += loctestnum; + testerr += loctesterr; +} + +void stestListDouble(uint& testnum, uint& testerr) { + uint loctestnum = 0, loctesterr = 0; + cout << endl << "Begin of List Test:" << endl; + try { + lasd::List lst; + Empty(loctestnum, loctesterr, lst, true); + Size(loctestnum, loctesterr, lst, true, 0); + + InsertAtBack(loctestnum, loctesterr, lst, true, -2.5); + InsertAtBack(loctestnum, loctesterr, lst, true, 2.5); + + lst.Clear(); + + InsertAtBack(loctestnum, loctesterr, lst, true, 0.5); + InsertAtFront(loctestnum, loctesterr, lst, true, 3.3); + InsertAtFront(loctestnum, loctesterr, lst, true, 5.5); + InsertAtBack(loctestnum, loctesterr, lst, true, 1.1); + + GetFront(loctestnum, loctesterr, lst, true, 5.5); + GetBack(loctestnum, loctesterr, lst, true, 1.1); + + Exists(loctestnum, loctesterr, lst, false, 0.0); + + MapPreOrder(loctestnum, loctesterr, lst, true, &MapPrint, 0); + MapPostOrder(loctestnum, loctesterr, lst, true, &MapPrint, 0); + FoldPreOrder(loctestnum, loctesterr, lst, true, &FoldAdd, 0.0, 0.0, 10.4); + FoldPostOrder(loctestnum, loctesterr, lst, true, &FoldMultiply, 0.0, 1.0, 9.9825); + } catch(...) { + loctestnum++; loctesterr++; + cout << endl << "Unmanaged error! " << endl; + } + cout << "End of List Test! (Errors/Tests: " << loctesterr << "/" << loctestnum << ")" << endl; + testnum += loctestnum; + testerr += loctesterr; +} + +void stestListString(uint& testnum, uint& testerr) { + uint loctestnum = 0, loctesterr = 0; + cout << endl << "Begin of List Test:" << endl; + try { + lasd::List lst; + Empty(loctestnum, loctesterr, lst, true); + Size(loctestnum, loctesterr, lst, true, 0); + + InsertAtFront(loctestnum, loctesterr, lst, true, string("A")); + InsertAtBack(loctestnum, loctesterr, lst, true, string("B")); + + GetFront(loctestnum, loctesterr, lst, true, string("A")); + GetBack(loctestnum, loctesterr, lst, true, string("B")); + + Exists(loctestnum, loctesterr, lst, true, string("B")); + + MapPreOrder(loctestnum, loctesterr, lst, true, &MapStringAppend, string(" ")); + MapPreOrder(loctestnum, loctesterr, lst, true, &MapPrint, 0); + FoldPreOrder(loctestnum, loctesterr, lst, true, &FoldStringConcatenate, string(""), string("X"), string("XA B ")); + FoldPostOrder(loctestnum, loctesterr, lst, true, &FoldStringConcatenate, string(""), string("X"), string("XB A ")); + + Exists(loctestnum, loctesterr, lst, false, string("B")); + + lasd::List coplst(lst); + EqualList(loctestnum, loctesterr, lst, coplst, true); + RemoveFromFront(loctestnum, loctesterr, coplst, true); + NonEqualList(loctestnum, loctesterr, lst, coplst, true); + + lst = coplst; + EqualList(loctestnum, loctesterr, lst, coplst, true); + InsertAtBack(loctestnum, loctesterr, lst, true, string("A")); + InsertAtFront(loctestnum, loctesterr, lst, true, string("C")); + NonEqualList(loctestnum, loctesterr, lst, coplst, true); + + coplst = std::move(lst); + FoldPreOrder(loctestnum, loctesterr, coplst, true, &FoldStringConcatenate, string(""), string("?"), string("?CB A")); + } catch(...) { + loctestnum++; loctesterr++; + cout << endl << "Unmanaged error! " << endl; + } + cout << "End of List Test! (Errors/Tests: " << loctesterr << "/" << loctestnum << ")" << endl; + testnum += loctestnum; + testerr += loctesterr; +} + +void stestList(uint& testnum, uint& testerr) { + uint loctestnum = 0, loctesterr = 0; + stestListInt(loctestnum, loctesterr); + stestListDouble(loctestnum, loctesterr); + stestListString(loctestnum, loctesterr); + testnum += loctestnum; + testerr += loctesterr; + cout << endl << "Exercise 1 - List (Errors/Tests: " << loctesterr << "/" << loctestnum << ")" << endl; +} + +/* ************************************************************************** */ + +void stestVectorListInt(uint& testnum, uint& testerr) { + uint loctestnum = 0, loctesterr = 0; + cout << endl << "Begin of Vector/List Test:" << endl; + try { + lasd::Vector vec(3); + SetAt(loctestnum, loctesterr, vec, true, 0, -1); + SetAt(loctestnum, loctesterr, vec, true, 1, 0); + SetAt(loctestnum, loctesterr, vec, true, 2, 1); + + lasd::List lst; + InsertAtFront(loctestnum, loctesterr, lst, true, 1); + InsertAtFront(loctestnum, loctesterr, lst, true, 0); + InsertAtFront(loctestnum, loctesterr, lst, true, -1); + + lasd::Vector copvec(lst); + EqualVector(loctestnum, loctesterr, vec, copvec, true); + lasd::Vector copvecx(vec); + EqualVector(loctestnum, loctesterr, copvecx, copvec, true); + + lasd::List coplst(vec); + EqualList(loctestnum, loctesterr, lst, coplst, true); + lasd::List coplstx(lst); + EqualList(loctestnum, loctesterr, coplstx, coplst, true); + } catch(...) { + loctestnum++; loctesterr++; + cout << endl << "Unmanaged error! " << endl; + } + cout << "End of Vector/List Test! (Errors/Tests: " << loctesterr << "/" << loctestnum << ")" << endl; + testnum += loctestnum; + testerr += loctesterr; +} + +void stestVectorListDouble(uint& testnum, uint& testerr) { + uint loctestnum = 0, loctesterr = 0; + cout << endl << "Begin of Vector/List Test:" << endl; + try { + lasd::Vector vec(3); + SetAt(loctestnum, loctesterr, vec, true, 0, -0.5); + SetAt(loctestnum, loctesterr, vec, true, 1, 0.0); + SetAt(loctestnum, loctesterr, vec, true, 2, 0.5); + + lasd::List lst; + InsertAtBack(loctestnum, loctesterr, lst, true, -0.5); + InsertAtBack(loctestnum, loctesterr, lst, true, 0.0); + InsertAtBack(loctestnum, loctesterr, lst, true, 0.5); + + lasd::Vector copvec(lst); + EqualVector(loctestnum, loctesterr, vec, copvec, true); + lasd::Vector copvecx(vec); + EqualVector(loctestnum, loctesterr, copvecx, copvec, true); + + lasd::List coplst(vec); + EqualList(loctestnum, loctesterr, lst, coplst, true); + lasd::List coplstx(lst); + EqualList(loctestnum, loctesterr, coplstx, coplst, true); + } catch(...) { + loctestnum++; loctesterr++; + cout << endl << "Unmanaged error! " << endl; + } + cout << "End of Vector/List Test! (Errors/Tests: " << loctesterr << "/" << loctestnum << ")" << endl; + testnum += loctestnum; + testerr += loctesterr; +} + +void stestVectorListString(uint& testnum, uint& testerr) { + uint loctestnum = 0, loctesterr = 0; + cout << endl << "Begin of Vector/List Test:" << endl; + try { + lasd::Vector vec(3); + SetAt(loctestnum, loctesterr, vec, true, 0, string("A")); + SetAt(loctestnum, loctesterr, vec, true, 1, string("B")); + SetAt(loctestnum, loctesterr, vec, true, 2, string("C")); + + lasd::List lst; + InsertAtFront(loctestnum, loctesterr, lst, true, string("B")); + InsertAtBack(loctestnum, loctesterr, lst, true, string("C")); + InsertAtFront(loctestnum, loctesterr, lst, true, string("A")); + + lasd::Vector copvec(lst); + EqualVector(loctestnum, loctesterr, vec, copvec, true); + lasd::Vector copvecx(vec); + EqualVector(loctestnum, loctesterr, copvecx, copvec, true); + + lasd::List coplst(vec); + EqualList(loctestnum, loctesterr, lst, coplst, true); + lasd::List coplstx(lst); + EqualList(loctestnum, loctesterr, coplstx, coplst, true); + } catch(...) { + loctestnum++; loctesterr++; + cout << endl << "Unmanaged error! " << endl; + } + cout << "End of Vector/List Test! (Errors/Tests: " << loctesterr << "/" << loctestnum << ")" << endl; + testnum += loctestnum; + testerr += loctesterr; +} + +void stestVectorList(uint& testnum, uint& testerr) { + uint loctestnum = 0, loctesterr = 0; + stestVectorListInt(loctestnum, loctesterr); + stestVectorListDouble(loctestnum, loctesterr); + stestVectorListString(loctestnum, loctesterr); + testnum += loctestnum; + testerr += loctesterr; + cout << endl << "Exercise 1 - Vector/List (Errors/Tests: " << loctesterr << "/" << loctestnum << ")" << endl; +} + +/* ************************************************************************** */ + +void testSimpleExercise1() { + uint testnum = 0, testerr = 0; + stestVector(testnum, testerr); + stestList(testnum, testerr); + stestVectorList(testnum, testerr); + cout << endl << "Exercise 1 (Simple Test) (Errors/Tests: " << testerr << "/" << testnum << ")" << endl; +} diff --git a/librerie/exercise2/zlasdtest/exercise1/test.hpp b/librerie/exercise2/zlasdtest/exercise1/test.hpp new file mode 100755 index 0000000..c151dcf --- /dev/null +++ b/librerie/exercise2/zlasdtest/exercise1/test.hpp @@ -0,0 +1,13 @@ + +#ifndef EX1TEST_HPP +#define EX1TEST_HPP + +/* ************************************************************************** */ + +void testSimpleExercise1(); + +void testFullExercise1(); + +/* ************************************************************************** */ + +#endif diff --git a/librerie/exercise2/zlasdtest/exercise2/fulltest.cpp b/librerie/exercise2/zlasdtest/exercise2/fulltest.cpp new file mode 100755 index 0000000..5d00543 --- /dev/null +++ b/librerie/exercise2/zlasdtest/exercise2/fulltest.cpp @@ -0,0 +1,3 @@ + +void testFullExercise2() { +} diff --git a/librerie/exercise2/zlasdtest/exercise2/simpletest.cpp b/librerie/exercise2/zlasdtest/exercise2/simpletest.cpp new file mode 100755 index 0000000..cbf8075 --- /dev/null +++ b/librerie/exercise2/zlasdtest/exercise2/simpletest.cpp @@ -0,0 +1,359 @@ + +#include + +/* ************************************************************************** */ + +#include "../container/container.hpp" + +#include "../stack/stack.hpp" +#include "../../stack/vec/stackvec.hpp" +#include "../../stack/lst/stacklst.hpp" + +#include "../queue/queue.hpp" +#include "../../queue/vec/queuevec.hpp" +#include "../../queue/lst/queuelst.hpp" + +/* ************************************************************************** */ + +using namespace std; + +/* ************************************************************************** */ + +template +void stestStackInt(Stk& stk, uint& testnum, uint& testerr) { + uint loctestnum = 0, loctesterr = 0; + try { + Empty(loctestnum, loctesterr, stk, true); + Size(loctestnum, loctesterr, stk, true, 0); + + Top(loctestnum, loctesterr, stk, false, 0); + TopNPop(loctestnum, loctesterr, stk, false, 0); + + PushC(loctestnum, loctesterr, stk, 4); + PushC(loctestnum, loctesterr, stk, 0); + PushC(loctestnum, loctesterr, stk, 3); + PushC(loctestnum, loctesterr, stk, 1); + PushC(loctestnum, loctesterr, stk, 2); + + Empty(loctestnum, loctesterr, stk, false); + Size(loctestnum, loctesterr, stk, true, 5); + + TopNPop(loctestnum, loctesterr, stk, true, 2); + Top(loctestnum, loctesterr, stk, true, 1); + + Stk copstk(stk); + EqualStack(loctestnum, loctesterr, stk, copstk, true); + PushC(loctestnum, loctesterr, stk, 5); + NonEqualStack(loctestnum, loctesterr, stk, copstk, true); + + copstk = stk; + EqualStack(loctestnum, loctesterr, stk, copstk, true); + PushC(loctestnum, loctesterr, copstk, 6); + NonEqualStack(loctestnum, loctesterr, stk, copstk, true); + + Top(loctestnum, loctesterr, copstk, true, 6); + copstk = std::move(stk); + TopNPop(loctestnum, loctesterr, copstk, true, 5); + Pop(loctestnum, loctesterr, copstk, true); + Top(loctestnum, loctesterr, copstk, true, 3); + + Stk movstk(std::move(stk)); + Top(loctestnum, loctesterr, stk, false, 0); + + movstk.Clear(); + Pop(loctestnum, loctesterr, movstk, false); + Empty(loctestnum, loctesterr, movstk, true); + Size(loctestnum, loctesterr, movstk, true, 0); + } catch(...) { + loctestnum++; loctesterr++; + cout << endl << "Unmanaged error! " << endl; + } + testnum += loctestnum; + testerr += loctesterr; + cout << "End of Stack Test! (Errors/Tests: " << loctesterr << "/" << loctestnum << ")" << endl; +} +void stestStackInt(uint& testnum, uint& testerr) { + uint loctestnum = 0, loctesterr = 0; + lasd::StackVec stkvec; + cout << endl << "Begin of StackVec Test:" << endl; + stestStackInt(stkvec, loctestnum, loctesterr); + lasd::StackLst stklst; + cout << endl << "Begin of StackLst Test:" << endl; + stestStackInt(stklst, loctestnum, loctesterr); + testnum += loctestnum; + testerr += loctesterr; +} + +template +void stestStackFloat(Stk& stk, uint& testnum, uint& testerr) { + uint loctestnum = 0, loctesterr = 0; + try { + PushC(loctestnum, loctesterr, stk, 5.9); + PushC(loctestnum, loctesterr, stk, 4.4); + PushC(loctestnum, loctesterr, stk, 9.5); + + Empty(loctestnum, loctesterr, stk, false); + Size(loctestnum, loctesterr, stk, true, 3); + + TopNPop(loctestnum, loctesterr, stk, true, 9.5); + Top(loctestnum, loctesterr, stk, true, 4.4); + Pop(loctestnum, loctesterr, stk, true); + TopNPop(loctestnum, loctesterr, stk, true, 5.9); + Pop(loctestnum, loctesterr, stk, false); + } catch(...) { + loctestnum++; loctesterr++; + cout << endl << "Unmanaged error! " << endl; + } + testnum += loctestnum; + testerr += loctesterr; + cout << "End of Stack Test! (Errors/Tests: " << loctesterr << "/" << loctestnum << ")" << endl; +} +void stestStackFloat(uint& testnum, uint& testerr) { + uint loctestnum = 0, loctesterr = 0; + lasd::StackVec stkvec; + cout << endl << "Begin of StackVec Test:" << endl; + stestStackFloat(stkvec, loctestnum, loctesterr); + lasd::StackLst stklst; + cout << endl << "Begin of StackLst Test:" << endl; + stestStackFloat(stklst, loctestnum, loctesterr); + testnum += loctestnum; + testerr += loctesterr; +} + +template +void stestStackString(Stk& stk, uint& testnum, uint& testerr) { + uint loctestnum = 0, loctesterr = 0; + try { + PushM(loctestnum, loctesterr, stk, string("A")); + PushM(loctestnum, loctesterr, stk, string("B")); + + Empty(loctestnum, loctesterr, stk, false); + Size(loctestnum, loctesterr, stk, true, 2); + + TopNPop(loctestnum, loctesterr, stk, true, string("B")); + Top(loctestnum, loctesterr, stk, true, string("A")); + Pop(loctestnum, loctesterr, stk, true); + Pop(loctestnum, loctesterr, stk, false); + } catch(...) { + loctestnum++; loctesterr++; + cout << endl << "Unmanaged error! " << endl; + } + testnum += loctestnum; + testerr += loctesterr; + cout << "End of Stack Test! (Errors/Tests: " << loctesterr << "/" << loctestnum << ")" << endl; +} +void stestStackString(uint& testnum, uint& testerr) { + uint loctestnum = 0, loctesterr = 0; + lasd::StackVec stkvec; + cout << endl << "Begin of StackVec Test:" << endl; + stestStackString(stkvec, loctestnum, loctesterr); + lasd::StackLst stklst; + cout << endl << "Begin of StackLst Test:" << endl; + stestStackString(stklst, loctestnum, loctesterr); + cout << endl; + try { + lasd::Vector vec(2); + SetAt(loctestnum, loctesterr, vec, true, 0, string("A")); + SetAt(loctestnum, loctesterr, vec, true, 1, string("B")); + + PushM(loctestnum, loctesterr, stkvec, string("A")); + PushM(loctestnum, loctesterr, stkvec, string("B")); + lasd::StackVec newstkvec(vec); + EqualStack(loctestnum, loctesterr, stkvec, newstkvec, true); + + PushM(loctestnum, loctesterr, stklst, string("B")); + PushM(loctestnum, loctesterr, stklst, string("A")); + lasd::StackLst newstklst(vec); + EqualStack(loctestnum, loctesterr, stklst, newstklst, true); + } catch(...) { + loctestnum++; loctesterr++; + cout << endl << "Unmanaged error! " << endl; + } + testnum += loctestnum; + testerr += loctesterr; +} + +void stestStack(uint& testnum, uint& testerr) { + uint loctestnum = 0, loctesterr = 0; + stestStackInt(loctestnum, loctesterr); + stestStackFloat(loctestnum, loctesterr); + stestStackString(loctestnum, loctesterr); + testnum += loctestnum; + testerr += loctesterr; + cout << endl << "Exercise 2 - Stack (Errors/Tests: " << loctesterr << "/" << loctestnum << ")" << endl; +} + +/* ************************************************************************** */ + +template +void stestQueueInt(Que& que, uint& testnum, uint& testerr) { + uint loctestnum = 0, loctesterr = 0; + try { + Empty(loctestnum, loctesterr, que, true); + Size(loctestnum, loctesterr, que, true, 0); + + Head(loctestnum, loctesterr, que, false, 0); + HeadNDequeue(loctestnum, loctesterr, que, false, 0); + + EnqueueC(loctestnum, loctesterr, que, 4); + EnqueueC(loctestnum, loctesterr, que, 0); + EnqueueC(loctestnum, loctesterr, que, 3); + EnqueueC(loctestnum, loctesterr, que, 1); + EnqueueC(loctestnum, loctesterr, que, 2); + + Empty(loctestnum, loctesterr, que, false); + Size(loctestnum, loctesterr, que, true, 5); + + HeadNDequeue(loctestnum, loctesterr, que, true, 4); + Head(loctestnum, loctesterr, que, true, 0); + + Que copque(que); + EqualQueue(loctestnum, loctesterr, que, copque, true); + EnqueueC(loctestnum, loctesterr, que, 5); + NonEqualQueue(loctestnum, loctesterr, que, copque, true); + + copque = que; + EqualQueue(loctestnum, loctesterr, que, copque, true); + EnqueueC(loctestnum, loctesterr, copque, 6); + NonEqualQueue(loctestnum, loctesterr, que, copque, true); + + Head(loctestnum, loctesterr, copque, true, 0); + copque = std::move(que); + HeadNDequeue(loctestnum, loctesterr, copque, true, 0); + Dequeue(loctestnum, loctesterr, copque, true); + Head(loctestnum, loctesterr, copque, true, 1); + + Que movque(std::move(que)); + Head(loctestnum, loctesterr, que, false, 0); + + movque.Clear(); + Dequeue(loctestnum, loctesterr, movque, false); + Empty(loctestnum, loctesterr, movque, true); + Size(loctestnum, loctesterr, movque, true, 0); + } catch(...) { + loctestnum++; loctesterr++; + cout << endl << "Unmanaged error! " << endl; + } + testnum += loctestnum; + testerr += loctesterr; + cout << "End of Queue Test! (Errors/Tests: " << loctesterr << "/" << loctestnum << ")" << endl; +} +void stestQueueInt(uint& testnum, uint& testerr) { + uint loctestnum = 0, loctesterr = 0; + lasd::QueueVec quevec; + cout << endl << "Begin of QueueVec Test:" << endl; + stestQueueInt(quevec, loctestnum, loctesterr); + lasd::QueueLst quelst; + cout << endl << "Begin of QueueLst Test:" << endl; + stestQueueInt(quelst, loctestnum, loctesterr); + testnum += loctestnum; + testerr += loctesterr; +} + +template +void stestQueueFloat(Que& que, uint& testnum, uint& testerr) { + uint loctestnum = 0, loctesterr = 0; + try { + EnqueueC(loctestnum, loctesterr, que, 5.9); + EnqueueC(loctestnum, loctesterr, que, 4.4); + EnqueueC(loctestnum, loctesterr, que, 9.5); + + Empty(loctestnum, loctesterr, que, false); + Size(loctestnum, loctesterr, que, true, 3); + + HeadNDequeue(loctestnum, loctesterr, que, true, 5.9); + Head(loctestnum, loctesterr, que, true, 4.4); + Dequeue(loctestnum, loctesterr, que, true); + HeadNDequeue(loctestnum, loctesterr, que, true, 9.5); + Dequeue(loctestnum, loctesterr, que, false); + } catch(...) { + loctestnum++; loctesterr++; + cout << endl << "Unmanaged error! " << endl; + } + testnum += loctestnum; + testerr += loctesterr; + cout << "End of Queue Test! (Errors/Tests: " << loctesterr << "/" << loctestnum << ")" << endl; +} +void stestQueueFloat(uint& testnum, uint& testerr) { + uint loctestnum = 0, loctesterr = 0; + lasd::QueueVec quevec; + cout << endl << "Begin of QueueVec Test:" << endl; + stestQueueFloat(quevec, loctestnum, loctesterr); + lasd::QueueLst quelst; + cout << endl << "Begin of QueueLst Test:" << endl; + stestQueueFloat(quelst, loctestnum, loctesterr); + testnum += loctestnum; + testerr += loctesterr; +} + +template +void stestQueueString(Que& que, uint& testnum, uint& testerr) { + uint loctestnum = 0, loctesterr = 0; + try { + EnqueueM(loctestnum, loctesterr, que, string("A")); + EnqueueM(loctestnum, loctesterr, que, string("B")); + + Empty(loctestnum, loctesterr, que, false); + Size(loctestnum, loctesterr, que, true, 2); + + HeadNDequeue(loctestnum, loctesterr, que, true, string("A")); + Head(loctestnum, loctesterr, que, true, string("B")); + Dequeue(loctestnum, loctesterr, que, true); + Dequeue(loctestnum, loctesterr, que, false); + } catch(...) { + loctestnum++; loctesterr++; + cout << endl << "Unmanaged error! " << endl; + } + testnum += loctestnum; + testerr += loctesterr; + cout << "End of Queue Test! (Errors/Tests: " << loctesterr << "/" << loctestnum << ")" << endl; +} +void stestQueueString(uint& testnum, uint& testerr) { + uint loctestnum = 0, loctesterr = 0; + lasd::QueueVec quevec; + cout << endl << "Begin of QueueVec Test:" << endl; + stestQueueString(quevec, loctestnum, loctesterr); + lasd::QueueLst quelst; + cout << endl << "Begin of QueueLst Test:" << endl; + stestQueueString(quelst, loctestnum, loctesterr); + cout << endl; + try { + lasd::Vector vec(2); + SetAt(loctestnum, loctesterr, vec, true, 0, string("A")); + SetAt(loctestnum, loctesterr, vec, true, 1, string("B")); + + EnqueueM(loctestnum, loctesterr, quevec, string("A")); + EnqueueM(loctestnum, loctesterr, quevec, string("B")); + lasd::QueueVec newquevec(vec); + EqualStack(loctestnum, loctesterr, quevec, newquevec, true); + + EnqueueM(loctestnum, loctesterr, quelst, string("A")); + EnqueueM(loctestnum, loctesterr, quelst, string("B")); + lasd::QueueLst newquelst(vec); + EqualStack(loctestnum, loctesterr, quelst, newquelst, true); + } catch(...) { + loctestnum++; loctesterr++; + cout << endl << "Unmanaged error! " << endl; + } + testnum += loctestnum; + testerr += loctesterr; +} + +void stestQueue(uint& testnum, uint& testerr) { + uint loctestnum = 0, loctesterr = 0; + stestQueueInt(loctestnum, loctesterr); + stestQueueFloat(loctestnum, loctesterr); + stestQueueString(loctestnum, loctesterr); + testnum += loctestnum; + testerr += loctesterr; + cout << endl << "Exercise 2 - Queue (Errors/Tests: " << loctesterr << "/" << loctestnum << ")" << endl; +} + +/* ************************************************************************** */ + +void testSimpleExercise2() { + uint testnum = 0, testerr = 0; + stestStack(testnum, testerr); + stestQueue(testnum, testerr); + cout << endl << "Exercise 2 (Simple Test) (Errors/Tests: " << testerr << "/" << testnum << ")" << endl; +} diff --git a/librerie/exercise2/zlasdtest/exercise2/test.hpp b/librerie/exercise2/zlasdtest/exercise2/test.hpp new file mode 100755 index 0000000..eb1a7f1 --- /dev/null +++ b/librerie/exercise2/zlasdtest/exercise2/test.hpp @@ -0,0 +1,13 @@ + +#ifndef EX2TEST_HPP +#define EX2TEST_HPP + +/* ************************************************************************** */ + +void testSimpleExercise2(); + +void testFullExercise2(); + +/* ************************************************************************** */ + +#endif diff --git a/librerie/exercise2/zlasdtest/list/list.hpp b/librerie/exercise2/zlasdtest/list/list.hpp new file mode 100755 index 0000000..0a8d7a0 --- /dev/null +++ b/librerie/exercise2/zlasdtest/list/list.hpp @@ -0,0 +1,98 @@ + +#ifndef LISTTEST_HPP +#define LISTTEST_HPP + +#include "../../list/list.hpp" + +/* ************************************************************************** */ + +template +void InsertAtFront(uint& testnum, uint& testerr, lasd::List& lst, bool chk, const Data& val) { + bool tst; + testnum++; + try { + std::cout << " " << testnum << " Insert at the front of the list the value \"" << val << "\": "; + lst.InsertAtFront(val); + std::cout << ((tst = chk) ? "Correct" : "Error") << "!" << std::endl; + } catch(std::exception exc) { + std::cout << "\"" << exc.what() << "\": " << ((tst = !chk) ? "Correct" : "Error") << "!" << std::endl; + } + testerr += (1 - (uint) tst); +} + +template +void RemoveFromFront(uint& testnum, uint& testerr, lasd::List& lst, bool chk) { + bool tst; + testnum++; + try { + std::cout << " " << testnum << " Remove from the list of \"" << lst.Front() << "\": "; + lst.RemoveFromFront(); + std::cout << ((tst = chk) ? "Correct" : "Error") << "!" << std::endl; + } catch(std::length_error exc) { + std::cout << exc.what() << "\": " << ((tst = !chk) ? "Correct" : "Error") << "!" << std::endl; + } catch(std::exception exc) { + tst = false; + std::cout << std::endl << "Wrong exception: " << exc.what() << "!" << std::endl; + } + testerr += (1 - (uint) tst); +} + +template +void FrontNRemove(uint& testnum, uint& testerr, lasd::List& lst, bool chk, const Data& val) { + bool tst; + testnum++; + try { + std::cout << " " << testnum << " FrontNRemove from the list of \"" << lst.Front() << "\": "; + std::cout << ((tst = ((lst.FrontNRemove() == val) == chk)) ? "Correct" : "Error") << "!" << std::endl; + } catch(std::length_error exc) { + std::cout << exc.what() << "\": " << ((tst = !chk) ? "Correct" : "Error") << "!" << std::endl; + } catch(std::exception exc) { + tst = false; + std::cout << std::endl << "Wrong exception: " << exc.what() << "!" << std::endl; + } + testerr += (1 - (uint) tst); +} + +template +void InsertAtBack(uint& testnum, uint& testerr, lasd::List& lst, bool chk, const Data& val) { + bool tst; + testnum++; + try { + std::cout << " " << testnum << " Insert at the back of the list the value \"" << val << "\": "; + lst.InsertAtBack(val); + std::cout << ((tst = chk) ? "Correct" : "Error") << "!" << std::endl; + } catch(std::exception exc) { + std::cout << "\"" << exc.what() << "\": " << ((tst = !chk) ? "Correct" : "Error") << "!" << std::endl; + } + testerr += (1 - (uint) tst); +} + +template +void EqualList(uint& testnum, uint& testerr, const lasd::List& lst1, const lasd::List& lst2, bool chk) { + bool tst; + testnum++; + try { + std::cout << " " << testnum << " The two lists are " << ((tst = (lst1 == lst2)) ? "" : "not ") << "equal: "; + std::cout << ((tst = (tst == chk)) ? "Correct" : "Error") << "!" << std::endl; + } catch(std::exception exc) { + std::cout << "\"" << exc.what() << "\": " << ((tst = !chk) ? "Correct" : "Error") << "!" << std::endl; + } + testerr += (1 - (uint) tst); +} + +template +void NonEqualList(uint& testnum, uint& testerr, const lasd::List& lst1, const lasd::List& lst2, bool chk) { + bool tst; + testnum++; + try { + std::cout << " " << testnum << " The two lists are " << ((tst = (lst1 != lst2)) ? "not " : "") << "equal: "; + std::cout << ((tst = (tst == chk)) ? "Correct" : "Error") << "!" << std::endl; + } catch(std::exception exc) { + std::cout << "\"" << exc.what() << "\": " << ((tst = !chk) ? "Correct" : "Error") << "!" << std::endl; + } + testerr += (1 - (uint) tst); +} + +/* ************************************************************************** */ + +#endif diff --git a/librerie/exercise2/zlasdtest/queue/queue.hpp b/librerie/exercise2/zlasdtest/queue/queue.hpp new file mode 100755 index 0000000..438ed29 --- /dev/null +++ b/librerie/exercise2/zlasdtest/queue/queue.hpp @@ -0,0 +1,116 @@ + +#ifndef QUEUETEST_HPP +#define QUEUETEST_HPP + +#include "../../queue/queue.hpp" + +/* ************************************************************************** */ + +template +void EnqueueC(uint& testnum, uint& testerr, lasd::Queue& que, const Data& val) { + testnum++; + bool tst = true; + try { + std::cout << " " << testnum << " Enqueue on the queue of the value \"" << val << "\": "; + que.Enqueue(val); + std::cout << "Correct!" << std::endl; + } catch(std::exception exc) { + std::cout << "\"" << exc.what() << "\": " << "Error!" << std::endl; + tst = false; + } + testerr += (1 - (uint) tst); +} + +template +void EnqueueM(uint& testnum, uint& testerr, lasd::Queue& que, Data val) { + testnum++; + bool tst = true; + try { + std::cout << " " << testnum << " Enqueue on the queue of the value \"" << val << "\": "; + que.Enqueue(std::move(val)); + std::cout << "Correct!" << std::endl; + } catch(std::exception exc) { + std::cout << "\"" << exc.what() << "\": " << "Error!" << std::endl; + tst = false; + } + testerr += (1 - (uint) tst); +} + +template +void Head(uint& testnum, uint& testerr, lasd::Queue& que, bool chk, const Data& val) { + testnum++; + bool tst; + try { + std::cout << " " << testnum << " Head of the queue with value \"" << que.Head() << "\": "; + std::cout << ((tst = ((que.Head() == val) == chk)) ? "Correct" : "Error") << "!" << std::endl; + } catch(std::length_error exc) { + std::cout << exc.what() << "\": " << ((tst = !chk) ? "Correct" : "Error") << "!" << std::endl; + } catch(std::exception exc) { + tst = false; + std::cout << std::endl << "Wrong exception: " << exc.what() << "!" << std::endl; + } + testerr += (1 - (uint) tst); +} + +template +void Dequeue(uint& testnum, uint& testerr, lasd::Queue& que, bool chk) { + testnum++; + bool tst = true; + try { + std::cout << " " << testnum << " Dequeue from the queue: "; + que.Dequeue(); + std::cout << ((tst = chk) ? "Correct" : "Error") << "!" << std::endl; + } catch(std::length_error exc) { + std::cout << "\"" << exc.what() << "\": " << ((tst = !chk) ? "Correct" : "Error") << "!" << std::endl; + } catch(std::exception exc) { + tst = false; + std::cout << std::endl << "Wrong exception: " << exc.what() << "!" << std::endl; + } + testerr += (1 - (uint) tst); +} + +template +void HeadNDequeue(uint& testnum, uint& testerr, lasd::Queue& que, bool chk, const Data& val) { + testnum++; + bool tst; + try { + std::cout << " " << testnum << " HeadNDequeue from the queue with value \"" << que.Head() << "\": "; + std::cout << ((tst = ((que.HeadNDequeue() == val) == chk)) ? "Correct" : "Error") << "!" << std::endl; + } catch(std::length_error exc) { + std::cout << exc.what() << "\": " << ((tst = !chk) ? "Correct" : "Error") << "!" << std::endl; + } catch(std::exception exc) { + tst = false; + std::cout << std::endl << "Wrong exception: " << exc.what() << "!" << std::endl; + } + testerr += (1 - (uint) tst); +} + +template +void EqualQueue(uint& testnum, uint& testerr, const Que& que1, const Que& que2, bool chk) { + testnum++; + bool tst; + try { + std::cout << " " << testnum << " The two queues are " << ((tst = (que1 == que2)) ? "" : "not ") << "equal: "; + std::cout << ((tst = (tst == chk)) ? "Correct" : "Error") << "!" << std::endl; + } catch(std::exception exc) { + std::cout << "\"" << exc.what() << "\": " << ((tst = !chk) ? "Correct" : "Error") << "!" << std::endl; + } + testerr += (1 - (uint) tst); +} + +template +void NonEqualQueue(uint& testnum, uint& testerr, const Que& que1, const Que& que2, bool chk) { + testnum++; + bool tst; + try { + std::cout << " " << testnum << " The two queues are " << ((tst = (que1 != que2)) ? "not " : "") << "equal: "; + std::cout << ((tst = (tst == chk)) ? "Correct" : "Error") << "!" << std::endl; + } catch(std::exception exc) { + std::cout << "\"" << exc.what() << "\": " << ((tst = !chk) ? "Correct" : "Error") << "!" << std::endl; + } + testerr += (1 - (uint) tst); +} + +/* ************************************************************************** */ + +#endif diff --git a/librerie/exercise2/zlasdtest/stack/stack.hpp b/librerie/exercise2/zlasdtest/stack/stack.hpp new file mode 100755 index 0000000..018cdd7 --- /dev/null +++ b/librerie/exercise2/zlasdtest/stack/stack.hpp @@ -0,0 +1,116 @@ + +#ifndef STACKTEST_HPP +#define STACKTEST_HPP + +#include "../../stack/stack.hpp" + +/* ************************************************************************** */ + +template +void PushC(uint& testnum, uint& testerr, lasd::Stack& stk, const Data& val) { + testnum++; + bool tst = true; + try { + std::cout << " " << testnum << " Push on the stack of the value \"" << val << "\": "; + stk.Push(val); + std::cout << "Correct!" << std::endl; + } catch(std::exception exc) { + std::cout << "\"" << exc.what() << "\": " << "Error!" << std::endl; + tst = false; + } + testerr += (1 - (uint) tst); +} + +template +void PushM(uint& testnum, uint& testerr, lasd::Stack& stk, Data val) { + testnum++; + bool tst = true; + try { + std::cout << " " << testnum << " Push on the stack of the value \"" << val << "\": "; + stk.Push(std::move(val)); + std::cout << "Correct!" << std::endl; + } catch(std::exception exc) { + std::cout << "\"" << exc.what() << "\": " << "Error!" << std::endl; + tst = false; + } + testerr += (1 - (uint) tst); +} + +template +void Top(uint& testnum, uint& testerr, lasd::Stack& stk, bool chk, const Data& val) { + testnum++; + bool tst; + try { + std::cout << " " << testnum << " Top of the stack with value \"" << stk.Top() << "\": "; + std::cout << ((tst = ((stk.Top() == val) == chk)) ? "Correct" : "Error") << "!" << std::endl; + } catch(std::length_error exc) { + std::cout << exc.what() << "\": " << ((tst = !chk) ? "Correct" : "Error") << "!" << std::endl; + } catch(std::exception exc) { + tst = false; + std::cout << std::endl << "Wrong exception: " << exc.what() << "!" << std::endl; + } + testerr += (1 - (uint) tst); +} + +template +void Pop(uint& testnum, uint& testerr, lasd::Stack& stk, bool chk) { + testnum++; + bool tst = true; + try { + std::cout << " " << testnum << " Pop from the stack: "; + stk.Pop(); + std::cout << ((tst = chk) ? "Correct" : "Error") << "!" << std::endl; + } catch(std::length_error exc) { + std::cout << "\"" << exc.what() << "\": " << ((tst = !chk) ? "Correct" : "Error") << "!" << std::endl; + } catch(std::exception exc) { + tst = false; + std::cout << std::endl << "Wrong exception: " << exc.what() << "!" << std::endl; + } + testerr += (1 - (uint) tst); +} + +template +void TopNPop(uint& testnum, uint& testerr, lasd::Stack& stk, bool chk, const Data& val) { + testnum++; + bool tst; + try { + std::cout << " " << testnum << " TopNPop from the stack with value \"" << stk.Top() << "\": "; + std::cout << ((tst = ((stk.TopNPop() == val) == chk)) ? "Correct" : "Error") << "!" << std::endl; + } catch(std::length_error exc) { + std::cout << exc.what() << "\": " << ((tst = !chk) ? "Correct" : "Error") << "!" << std::endl; + } catch(std::exception exc) { + tst = false; + std::cout << std::endl << "Wrong exception: " << exc.what() << "!" << std::endl; + } + testerr += (1 - (uint) tst); +} + +template +void EqualStack(uint& testnum, uint& testerr, const Stk& stk1, const Stk& stk2, bool chk) { + testnum++; + bool tst; + try { + std::cout << " " << testnum << " The two stacks are " << ((tst = (stk1 == stk2)) ? "" : "not ") << "equal: "; + std::cout << ((tst = (tst == chk)) ? "Correct" : "Error") << "!" << std::endl; + } catch(std::exception exc) { + std::cout << "\"" << exc.what() << "\": " << ((tst = !chk) ? "Correct" : "Error") << "!" << std::endl; + } + testerr += (1 - (uint) tst); +} + +template +void NonEqualStack(uint& testnum, uint& testerr, const Stk& stk1, const Stk& stk2, bool chk) { + testnum++; + bool tst; + try { + std::cout << " " << testnum << " The two stacks are " << ((tst = (stk1 != stk2)) ? "not " : "") << "equal: "; + std::cout << ((tst = (tst == chk)) ? "Correct" : "Error") << "!" << std::endl; + } catch(std::exception exc) { + std::cout << "\"" << exc.what() << "\": " << ((tst = !chk) ? "Correct" : "Error") << "!" << std::endl; + } + testerr += (1 - (uint) tst); +} + +/* ************************************************************************** */ + +#endif diff --git a/librerie/exercise2/zlasdtest/test.cpp b/librerie/exercise2/zlasdtest/test.cpp new file mode 100755 index 0000000..79c876e --- /dev/null +++ b/librerie/exercise2/zlasdtest/test.cpp @@ -0,0 +1,21 @@ + +#include "./exercise1/test.hpp" + +#include "./exercise2/test.hpp" + +/* ************************************************************************** */ + +#include + +using namespace std; + +/* ************************************************************************** */ + +void lasdtest() { + cout << endl << "~*~#~*~ Welcome to the LASD Test Suite ~*~#~*~ " << endl; + testSimpleExercise1(); + testFullExercise1(); + testSimpleExercise2(); + testFullExercise2(); + cout << endl << "Goodbye!" << endl; +} diff --git a/librerie/exercise2/zlasdtest/test.hpp b/librerie/exercise2/zlasdtest/test.hpp new file mode 100755 index 0000000..a2fca61 --- /dev/null +++ b/librerie/exercise2/zlasdtest/test.hpp @@ -0,0 +1,11 @@ + +#ifndef LASDTEST_HPP +#define LASDTEST_HPP + +/* ************************************************************************** */ + +void lasdtest(); + +/* ************************************************************************** */ + +#endif diff --git a/librerie/exercise2/zlasdtest/vector/vector.hpp b/librerie/exercise2/zlasdtest/vector/vector.hpp new file mode 100755 index 0000000..bb0ccf6 --- /dev/null +++ b/librerie/exercise2/zlasdtest/vector/vector.hpp @@ -0,0 +1,37 @@ + +#ifndef VECTORTEST_HPP +#define VECTORTEST_HPP + +#include "../../vector/vector.hpp" + +/* ************************************************************************** */ + +template +void EqualVector(uint& testnum, uint& testerr, const lasd::Vector& vec1, const lasd::Vector& vec2, bool chk) { + bool tst; + testnum++; + try { + std::cout << " " << testnum << " The two vectors are " << ((tst = (vec1 == vec2)) ? "" : "not ") << "equal: "; + std::cout << ((tst = (tst == chk)) ? "Correct" : "Error") << "!" << std::endl; + } catch(std::exception exc) { + std::cout << "\"" << exc.what() << "\": " << ((tst = !chk) ? "Correct" : "Error") << "!" << std::endl; + } + testerr += (1 - (uint) tst); +} + +template +void NonEqualVector(uint& testnum, uint& testerr, const lasd::Vector& vec1, const lasd::Vector& vec2, bool chk) { + bool tst; + testnum++; + try { + std::cout << " " << testnum << " The two vectors are " << ((tst = (vec1 != vec2)) ? "not " : "") << "equal: "; + std::cout << ((tst = (tst == chk)) ? "Correct" : "Error") << "!" << std::endl; + } catch(std::exception exc) { + std::cout << "\"" << exc.what() << "\": " << ((tst = !chk) ? "Correct" : "Error") << "!" << std::endl; + } + testerr += (1 - (uint) tst); +} + +/* ************************************************************************** */ + +#endif diff --git a/librerie/exercise2/zmytest/test.cpp b/librerie/exercise2/zmytest/test.cpp new file mode 100755 index 0000000..07a921d --- /dev/null +++ b/librerie/exercise2/zmytest/test.cpp @@ -0,0 +1,2 @@ + +// ... diff --git a/librerie/exercise2/zmytest/test.hpp b/librerie/exercise2/zmytest/test.hpp new file mode 100755 index 0000000..99b9987 --- /dev/null +++ b/librerie/exercise2/zmytest/test.hpp @@ -0,0 +1,11 @@ + +#ifndef MYTEST_HPP +#define MYTEST_HPP + +/* ************************************************************************** */ + +// ... + +/* ************************************************************************** */ + +#endif