From: <ste...@us...> - 2013-04-30 02:54:25
|
Revision: 3805 http://sourceforge.net/p/moneymanagerex/code/3805 Author: stef145g Date: 2013-04-30 02:54:21 +0000 (Tue, 30 Apr 2013) Log Message: ----------- Updated Stocks class with tests. Modified Paths: -------------- trunk/mmex/src/db/stocks.cpp trunk/mmex/src/db/stocks.h trunk/mmex/src/tests/new_classes_test.cpp Modified: trunk/mmex/src/db/stocks.cpp =================================================================== --- trunk/mmex/src/db/stocks.cpp 2013-04-29 16:15:35 UTC (rev 3804) +++ trunk/mmex/src/db/stocks.cpp 2013-04-30 02:54:21 UTC (rev 3805) @@ -123,6 +123,48 @@ } } +wxString TStockEntry::DisplayDate() +{ + return mmGetDateForDisplay(mmGetStorageStringAsDate(pur_date_)); +} + +wxString TStockEntry::NumberOfShares(bool whole_num) +{ + wxString format = "%.4f"; + if (whole_num) + { + format = "%.0f"; + } + return wxString::Format(format, num_shares_); +} + +wxString TStockEntry::CurrentPrice() +{ + return wxString::Format("%.4f", cur_price_); +} + +double TStockEntry::GetValue() +{ + return (cur_price_ * num_shares_) - commission_; +} + +wxString TStockEntry::GetValueCurrencyEditFormat(bool initial_value) +{ + wxString formatted_value; + if (initial_value) mmex::formatDoubleToCurrencyEdit(value_, formatted_value); + else mmex::formatDoubleToCurrencyEdit(GetValue(), formatted_value); + + return formatted_value; +} + +wxString TStockEntry::CommissionCurrencyEditFormat() +{ + wxString formatted_value; + mmex::formatDoubleToCurrencyEdit(value_, formatted_value); + + return formatted_value; +} + /************************************************************************************ TStockList Methods ***********************************************************************************/ Modified: trunk/mmex/src/db/stocks.h =================================================================== --- trunk/mmex/src/db/stocks.h 2013-04-29 16:15:35 UTC (rev 3804) +++ trunk/mmex/src/db/stocks.h 2013-04-30 02:54:21 UTC (rev 3805) @@ -43,14 +43,26 @@ double value_; // wxT("VALUE") double commission_; // wxT("COMMISSION") - /// Constructor used when loading assets from the database. + /* Constructor used when loading stocks from the database. */ TStockEntry(wxSQLite3ResultSet& q1); - /// Copy constructor using a pointer + /* Copy constructor using a pointer */ TStockEntry(TStockEntry* pEntry); - /// Constructor for creating a new asset entry. + /* Constructor for creating a new stock entry. */ TStockEntry(); + // Updates the existing data to the SQL file. Add to list first. void Update(wxSQLite3Database* db); + // returns date formated to user requirements. + wxString DisplayDate(); + // returns number of shares formated to 4 decimal places or whole number. + wxString NumberOfShares(bool whole_num = true); + // returns current share price formated to 4 decimal places + wxString CurrentPrice(); + // returns the value based on share price and number of shares + double GetValue(); + wxString GetValueCurrencyEditFormat(bool initial_value = false); + // returns formatted commission value + wxString CommissionCurrencyEditFormat(); }; /************************************************************************************ @@ -66,7 +78,7 @@ TStockList(wxSharedPtr<wxSQLite3Database> db, bool load_entries = true); - /// Allows specialised list loading provided by SQL statement + // Allows specialised list loading provided by SQL statement void LoadEntriesUsing(const wxString& sql_statement); int AddEntry(TStockEntry* pStockEntry); @@ -76,6 +88,7 @@ wxSharedPtr<TStockEntry> GetIndexedEntryPtr(unsigned int list_index); int CurrentListSize(); + /// return the balance of all the stocks in the list. double GetStockBalance(); wxString GetStockBalanceCurrencyFormat(); wxString GetStockBalanceCurrencyEditFormat(); Modified: trunk/mmex/src/tests/new_classes_test.cpp =================================================================== --- trunk/mmex/src/tests/new_classes_test.cpp 2013-04-29 16:15:35 UTC (rev 3804) +++ trunk/mmex/src/tests/new_classes_test.cpp 2013-04-30 02:54:21 UTC (rev 3805) @@ -45,18 +45,18 @@ //---------------------------------------------------------------------------- // This is a way to prevent certain tests occuring during development testing -#define CENTRALL_DB_TESTS -#define CURRENCY_TESTS -#define ACCOUNT_TESTS -#define CATEGORY_TESTS -#define SUBCATEGORY_TESTS -#define PAYEE_TESTS -#define TRANSACTION_TESTS -#define REPEAT_TRANSACTION_TESTS -#define SPLIT_TRANSACTION_TESTS -#define ASSET_TESTS +//#define CENTRALL_DB_TESTS +//#define CURRENCY_TESTS +//#define ACCOUNT_TESTS +//#define CATEGORY_TESTS +//#define SUBCATEGORY_TESTS +//#define PAYEE_TESTS +//#define TRANSACTION_TESTS +//#define REPEAT_TRANSACTION_TESTS +//#define SPLIT_TRANSACTION_TESTS +//#define ASSET_TESTS #define STOCK_TESTS -#define BUDGET_TESTS +//#define BUDGET_TESTS //---------------------------------------------------------------------------- /// Central class holding all major components of the database @@ -949,7 +949,20 @@ displayTimeTaken("TAssetList_GetIndexedEntryPtr_Retest", start_time); } +TEST(TAssetList_Smart_const_iterator) +{ + const wxDateTime start_time(wxDateTime::UNow()); + TAssetList asset_list(get_pDb()); + for (const auto& pEntry:asset_list.entrylist_) + { + CHECK_EQUAL(20000, pEntry->value_); + } + + displayTimeTaken("TAssetList_Smart_const_iterator", start_time); +} + + TEST(TAssetList_Test_GetEntryPtr) { const wxDateTime start_time(wxDateTime::UNow()); @@ -988,7 +1001,7 @@ stock_entry->name_ = "Stock Name - Should be in Account"; stock_entry->pur_date_ = date; // date of purchase stock_entry->pur_price_ = 1.2275; - stock_entry->num_shares_ = 1000; + stock_entry->num_shares_ = 2000; stock_entry->cur_price_ = 1.575; stock_entry->value_ = 2000; int id_1 = stock_list.AddEntry(stock_entry); @@ -1016,13 +1029,27 @@ const wxDateTime start_time(wxDateTime::UNow()); TStockList stock_list(get_pDb()); - wxSharedPtr<TStockEntry> stock_entry = stock_list.GetEntryPtr(2); // 2nd entry from test 1 + int stock_id = 2; // 2nd entry from test 1 + stock_list.GetEntryPtr(stock_id); // test setting current index + wxSharedPtr<TStockEntry> stock_entry = stock_list.GetIndexedEntryPtr(stock_list.GetCurrentIndex()); stock_entry->value_ = 3000; stock_entry->Update(stock_list.ListDatabase()); double value = stock_list.GetStockBalance(); CHECK_EQUAL(5000, value); + wxString check_value = "1.5750"; + wxString return_value = stock_entry->CurrentPrice(); + CHECK_EQUAL(check_value, return_value); + + check_value = "1,575.00"; + return_value = stock_entry->GetValueCurrencyEditFormat(); + CHECK_EQUAL(check_value, return_value); + + check_value = "1000.0000"; + return_value = stock_entry->NumberOfShares(false); + CHECK_EQUAL(check_value, return_value); + displayTimeTaken("TStockList_Test_Update", start_time); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |