From 9b59440e35fdc6bfbe0b8e89332df9ff24c8e4ac Mon Sep 17 00:00:00 2001 From: anthonymakarewicz Date: Mon, 15 Jul 2024 19:58:55 +0200 Subject: [PATCH] d --- bckp/option_tests.cpp | 4 +- include/option.h | 1 - include/payoff.h | 1 - main_example.cpp | 40 ---------- option_former.cpp | 107 -------------------------- option_former.h | 55 ------------- option_pricer_description.docx | Bin 14746 -> 0 bytes option_tests_former.cpp | 91 ---------------------- src/option.cpp | 1 - src/payoff.cpp | 1 - tests/CMakeLists.txt | 10 +-- tests/{ => config}/mock_classes.h | 0 tests/{ => config}/test_support.h | 2 +- tests/test_option.cpp | 0 tests/{ => unit}/test_market_data.cpp | 29 ++----- tests/unit/test_option.cpp | 100 ++++++++++++++++++++++++ tests/{ => unit}/test_payoff.cpp | 5 ++ ~$tion_pricer_description.docx | Bin 162 -> 0 bytes 18 files changed, 119 insertions(+), 328 deletions(-) delete mode 100644 main_example.cpp delete mode 100644 option_former.cpp delete mode 100644 option_former.h delete mode 100644 option_pricer_description.docx delete mode 100644 option_tests_former.cpp rename tests/{ => config}/mock_classes.h (100%) rename tests/{ => config}/test_support.h (96%) delete mode 100644 tests/test_option.cpp rename tests/{ => unit}/test_market_data.cpp (79%) create mode 100644 tests/unit/test_option.cpp rename tests/{ => unit}/test_payoff.cpp (97%) delete mode 100644 ~$tion_pricer_description.docx diff --git a/bckp/option_tests.cpp b/bckp/option_tests.cpp index e0d96b2..e08e99b 100644 --- a/bckp/option_tests.cpp +++ b/bckp/option_tests.cpp @@ -5,8 +5,8 @@ #include #include "option.h" #include "payoff.h" -#include "test_support.h" -#include "mock_classes.h" +#include "../config/test_support.h" +#include "../config/mock_classes.h" using namespace ::testing; using namespace TestSupport::MockImplementations; diff --git a/include/option.h b/include/option.h index 6eb202f..9760e34 100644 --- a/include/option.h +++ b/include/option.h @@ -3,7 +3,6 @@ #include #include - #include "payoff.h" #include "market_data.h" diff --git a/include/payoff.h b/include/payoff.h index f3d1e5d..52e5510 100644 --- a/include/payoff.h +++ b/include/payoff.h @@ -3,7 +3,6 @@ #include - class Payoff { public: Payoff() = default; // Default (no parameter) constructor diff --git a/main_example.cpp b/main_example.cpp deleted file mode 100644 index 1e475e1..0000000 --- a/main_example.cpp +++ /dev/null @@ -1,40 +0,0 @@ -#include -#include "option.h" -#include "payoff.h" -#include "market_data.h" - -int main() { - StockData stock(100.0, 0.02, 0.001); - std::cout << stock.getSigma() << std::endl; - - auto mdata = std::make_shared(); - mdata->addData("AAPL", 100.0, 0.02, 0.01); - - auto payoff_call = std::make_unique(100.0); - auto payoff_put = std::make_unique(100.0); - - - auto mdata = std::make_shared(); - mdata->addData("AAPL", 300.0, 0.24, 0.01); - mdata->addData("AMAZN", 120.0, 0.2, 0.01); - mdata->addData("TSLA", 70.0, 0.3, 0.01); - mdata->addData("LIBOR", 0.02); - mdata->addData("EURIBIBOR", 0.03); - mdata->addData("GBP", 1.25); - mdata->addData("EUR", 1.05); - - std::vector> underlyings_basket = {"AAPL", "AMAZN", "TSLA"}; - std::vector> underlyings_quanto = {"AAPL", "GBP"}; - - Option call(std::move(payoff_call), mdata, S = "AAPL", r = "LIBOR"); - BasketOption call_basket(std::move(payoff_basket_call), mdata, S = underlyings_basket, r = "LIBOR"); - QuantoOption call_quanto(std::move(payoff_quanto_call), mdata, S = underlyings_quanto, r = "LIBOR"); - - - - - - - - return 0; -} diff --git a/option_former.cpp b/option_former.cpp deleted file mode 100644 index 213bac4..0000000 --- a/option_former.cpp +++ /dev/null @@ -1,107 +0,0 @@ -// -// Created by anthony on 18/02/2024. -// - -#ifndef OPTION_PRICER_OPTION_CPP -#define OPTION_PRICER_OPTION_CPP - -#include "option.h" - - -Option::Option(std::unique_ptr _payoff, - const double& _T) - : T(_T) { - // Move the unique_ptr only after validating other parameters to avoid taking ownership if an exception is thrown - if (_T < 0) throw std::invalid_argument("Time to expiration (T) must be positive."); - // If all checks pass, then safely move the _payoff - payoff = std::move(_payoff); -} - -Option::~Option() {}; - -// other.payoff->clone() necessary because other.payoff is of type *Payoff which is abstract -Option::Option(const Option& other) - : payoff(other.payoff ? other.payoff->clone() : nullptr), - r(other.r), T(other.T), S(other.S), sigma(other.sigma) {} - -Option& Option::operator=(const Option& other) { - if (this != &other) { - payoff = other.payoff ? other.payoff->clone() : nullptr; - r = other.r; - T = other.T; - S = other.S; - sigma = other.sigma; - } - return *this; -} - - -double Option::get_r() const { - return r; -} - -double Option::get_T() const { - return T; -} - -double Option::get_S() const { - return S; -} - -double Option::get_sigma() const { - return sigma; -} - -void Option::set_r(const double& _r) { - if(_r < 0.0) { - throw std::invalid_argument("r must be a positive number!"); - } else { - r = _r; - } -} - -void Option::set_T(const double& _T) { - if(_T < 0) { - throw std::invalid_argument("T must be a positive number!"); - } else { - T = _T; - } -} - -void Option::set_S(const double& _S) { - if(_S < 0) { - throw std::invalid_argument("S must be a positive number!"); - } else { - S = _S; - } -} - -void Option::set_sigma(const double& _sigma) { - if(_sigma < 0) { - throw std::invalid_argument("sigma must be a positive number!"); - } else { - sigma = _sigma; - } -} - -bool Option::operator==(const Option& rhs) const { - return r == rhs.r && - T == rhs.T && - S == rhs.S && - sigma == rhs.sigma; -} - -bool Option::operator!=(const Option& rhs) const { - return !(rhs == *this); -} - -std::ostream &operator<<(std::ostream& os, const Option& option) { - os << " r: " << option.r << " T: " << option.T << " S: " << option.S << " sigma: " - << option.sigma; - return os; -} - - - - -#endif //OPTION_PRICER_OPTION_CPP \ No newline at end of file diff --git a/option_former.h b/option_former.h deleted file mode 100644 index c4f3cdf..0000000 --- a/option_former.h +++ /dev/null @@ -1,55 +0,0 @@ -// -// Created by anthony on 18/02/2024. -// - -#ifndef OPTION_PRICER_OPTION_H -#define OPTION_PRICER_OPTION_H - -#include -#include -#include - -#include "payoff.h" - -class Option { -protected: - std::unique_ptr payoff; - double T; - -public: - Option(std::unique_ptr _payoff, - const double& _T); // Parameter constructor - - // Virtual destructor for proper memory de-allocation in inheritance - virtual ~Option(); - - // Define deleted copy semantics because of smart pointers - Option(const Option& other); - Option& operator=(const Option& rhs); - - // Re-include the default moving constructor and assignment operator - Option(Option&&) = default; - Option& operator=(Option&&) = default; - - // Selectors (getters) for our option parameters - double get_T() const; - - // Modifiers (setters) for our option parameters - void set_T(const double& _T); - - // Equality and inequality overloaded operators - bool operator==(const Option& rhs) const; - bool operator!=(const Option& rhs) const; - - // Overloaded output stream operator - friend std::ostream &operator<<(std::ostream& os, const Option& option); - - // Helper method for checking proper moving semantics - [[nodiscard]] const std::unique_ptr& getPayoff() const { - return payoff; - } - - virtual double price() const = 0; -}; - -#endif //OPTION_PRICER_OPTION_H diff --git a/option_pricer_description.docx b/option_pricer_description.docx deleted file mode 100644 index ef03e024cb0a25db021aa283bcc07fed40ba95cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14746 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 OK-U`|+0FLb+5ZDfESQl1 diff --git a/option_tests_former.cpp b/option_tests_former.cpp deleted file mode 100644 index 9017be4..0000000 --- a/option_tests_former.cpp +++ /dev/null @@ -1,91 +0,0 @@ - -// Test Suite for Option Class - -#include - -#include "option.h" -#include "payoff.h" -#include "market_data.h" - -/* Tests the move semantics of the Option class to ensure that moving an Option object - leaves the source object in a valid, but "empty" state, and that the target object - correctly acquires the source's resources. */ - -class OptionTest : public ::testing::Test { -protected: - std::shared_ptr marketData; - - void SetUp() override { - marketData = std::make_shared(); - // Assume addData is a method to add stock data - marketData->addData("AAPL", 150.0, 0.2); - marketData->addData("LIBOR", 0.05); - - double K = 100.0; - auto payoff_call = std::make_unique(K); - Option call(std::move(payoff_call), marketData, 1.0); - - auto payoff_put = std::make_unique(K); - Option put(std::move(payoff_put), marketData, 1.0); -}; - -TEST_F(OptionTest, MovingSemantics) { - // Action: Move call into option3, then move option3 into option2 - - Option call_mov_1 = std::move(call); // Using the moving constructor - option2 = std::move(option3); // Using the moving assignment operator - - // Verify: Check that option1 and option3 are "empty", and option2 has successfully - // acquired the resources originally belonging to option1. - EXPECT_EQ(call.getPayoff().get(), nullptr); - EXPECT_NE(option2.getPayoff().get(), nullptr); - EXPECT_EQ(option3.getPayoff().get(), nullptr); - - -} - -/* Tests the copy semantics of the Option class, assuming the class supports copy operations. - This test verifies that copying an Option object results in a new object with the same - attributes but does not affect the original object's state upon modification. */ -TEST_F(OptionTest, CopySemantics) { - // Setup: Create an Option object with a PayoffCall. - double K1 = 100.0; - auto payoff_call1 = std::make_unique(K1); - auto payoff_call2 = std::make_unique(K1); - - Option option1(std::move(payoff_call1), 0.05, 1.0, 150.0, 0.2); - Option option2(std::move(payoff_call2), 0.05, 1.0, 150.0, 0.2); - - // Perform a copy operation to create option2 and option3 from option1 - Option option3(option1); // Using copy constructor - option2 = option1; // Using copy assignment operator - - // Check if the attributes have been correctly copied using guetters - EXPECT_EQ(option1.get_T(), option3.get_T()); // For copy constructor - - EXPECT_EQ(option1.get_T(), option2.get_T()); // For copy assignment operator - - //Using overloaded == operator - EXPECT_TRUE(option1 == option2); - EXPECT_TRUE(option1 == option3); - - // Modify option1 to see if it affects both option2 and option3 - double K2 = 50.0; - auto payoff_change = std::make_unique(K2); - option1 = Option(std::move(payoff_change), 0.10, 2.0, 100.0, 0.3); - - // Check that option2's and option3's payoff is not affected by changes to option1 - EXPECT_NE(option2.getPayoff().get(), nullptr); - EXPECT_NE(option3.getPayoff().get(), nullptr); - - EXPECT_EQ(option2.get_T(), 1.0); // Original maturity before option1 was changed - EXPECT_EQ(option3.get_T(), 1.0); - EXPECT_EQ(option1.get_T(), 2.0); - - // Using overloaded != operator - EXPECT_TRUE(option1 != option2); - EXPECT_TRUE(option1 != option3); -} - - - diff --git a/src/option.cpp b/src/option.cpp index e20290c..12dac28 100644 --- a/src/option.cpp +++ b/src/option.cpp @@ -5,7 +5,6 @@ #include #include #include - #include "option.h" /* ***************** diff --git a/src/payoff.cpp b/src/payoff.cpp index 01dd0e8..70bb38f 100644 --- a/src/payoff.cpp +++ b/src/payoff.cpp @@ -4,7 +4,6 @@ #include "payoff.h" #include - std::ostream& operator<<(std::ostream& os, const Payoff& payoff) { payoff.print(os); return os; diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 9470a9c..1ed2f0f 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -4,11 +4,11 @@ find_package(GTest REQUIRED) # Define the test executable add_executable(Option_tester test_main.cpp - test_market_data.cpp - test_payoff.cpp - mock_classes.h - test_support.h - test_option.cpp + unit/test_market_data.cpp + unit/test_payoff.cpp + config/mock_classes.h + config/test_support.h + unit/test_option.cpp ../src/payoff.cpp ../src/market_data.cpp ../src/option.cpp diff --git a/tests/mock_classes.h b/tests/config/mock_classes.h similarity index 100% rename from tests/mock_classes.h rename to tests/config/mock_classes.h diff --git a/tests/test_support.h b/tests/config/test_support.h similarity index 96% rename from tests/test_support.h rename to tests/config/test_support.h index f0895c5..f4f0ec2 100644 --- a/tests/test_support.h +++ b/tests/config/test_support.h @@ -2,7 +2,7 @@ #define TEST_CLASSES_H #include -#include "market_data.h" +#include "../../include/market_data.h" namespace TestSupport { // Minimal Mock Option class diff --git a/tests/test_option.cpp b/tests/test_option.cpp deleted file mode 100644 index e69de29..0000000 diff --git a/tests/test_market_data.cpp b/tests/unit/test_market_data.cpp similarity index 79% rename from tests/test_market_data.cpp rename to tests/unit/test_market_data.cpp index 817dfbb..0d36470 100644 --- a/tests/test_market_data.cpp +++ b/tests/unit/test_market_data.cpp @@ -1,24 +1,7 @@ #include -#include "market_data.h" #include - -// TestOption to avoid conflict name with Option class from option.h -namespace TestOption { - // Minimal MockOption class - class Option final : public MarketDataObserver, std::enable_shared_from_this