From 47ba21b8dc62b26dfb167b454c45f6be838e29f8 Mon Sep 17 00:00:00 2001 From: Christopher Lam Date: Mon, 23 Jul 2018 23:08:06 +0800 Subject: [PATCH 1/6] [test-extras] export gnc-pricedb-create --- libgnucash/engine/test/test-extras.scm | 1 + 1 file changed, 1 insertion(+) diff --git a/libgnucash/engine/test/test-extras.scm b/libgnucash/engine/test/test-extras.scm index c1d37b7145..a040132f4a 100644 --- a/libgnucash/engine/test/test-extras.scm +++ b/libgnucash/engine/test/test-extras.scm @@ -49,6 +49,7 @@ (export env-create-account-structure) (export env-create-account-structure-alist) (export env-expense-account-structure) +(export gnc-pricedb-create) ;; ;; Random test related syntax and the like From 8cbd4d629f8c23e0b312d51a37882cd37904dee2 Mon Sep 17 00:00:00 2001 From: Christopher Lam Date: Mon, 23 Jul 2018 22:51:29 +0800 Subject: [PATCH 2/6] [test-balance-sheet] upgrade to better coverage of balance-sheet This commit upgrades test-balance-sheet to cover most sensitive data. It specifically generates the following types of transactions, and tests the balance sheet generated. - Equity-USD to nested accounts - Equity-USD to ForeignBank-GBP - Equity-USD to Broker:FUNDS - buy/sell from equity to GBP and FUNDS - Broker and Broker:FUNDS both have splits with amounts Two main subtotal strategies are tested: multilevel and recursive-bal, and all amounts are tested. --- .../test/test-balance-sheet.scm | 350 ++++++++++++++---- 1 file changed, 278 insertions(+), 72 deletions(-) diff --git a/gnucash/report/standard-reports/test/test-balance-sheet.scm b/gnucash/report/standard-reports/test/test-balance-sheet.scm index 61016b129f..287608961a 100644 --- a/gnucash/report/standard-reports/test/test-balance-sheet.scm +++ b/gnucash/report/standard-reports/test/test-balance-sheet.scm @@ -33,18 +33,45 @@ (gnc:option-set-value option value) (test-assert (format #f "wrong-option ~a ~a" section name) #f)))) +(define (mnemonic->commodity sym) + (gnc-commodity-table-lookup + (gnc-commodity-table-get-table (gnc-get-current-book)) + (gnc-commodity-get-namespace (gnc-default-report-currency)) + sym)) + +(define USD (gnc-default-report-currency)) ;default currency should be USD because LC_ALL="C" +(define GBP (mnemonic->commodity "GBP")) +(define FUNDS (gnc-commodity-new (gnc-get-current-book) + "Funds" ;fullname + "FUNDS" ;namespace + "FUNDS" ;mnemonic + "FUNDS" ;cusip + 1000 ;fraction + )) +(gnc-commodity-set-user-symbol GBP "#") + (define structure - (list "Root" (list (cons 'type ACCT-TYPE-ASSET)) + (list "Root" (list (cons 'type ACCT-TYPE-ASSET) + (cons 'commodity USD)) (list "Asset" - (list "Bank" - (list "Bank-Sub")) - (list "A/Receivable" (list (cons 'type ACCT-TYPE-RECEIVABLE)))) - (list "Liability" (list (cons 'type ACCT-TYPE-PAYABLE)) - (list "CreditCard") - (list "A/Payable")) + (list "Bank1" + (list "Savings") + (list "Bonds") + (list "Empty") + (list "Current")) + (list "House") + (list "ForeignBank" (list (cons 'commodity GBP)) + (list "ForeignSavings")) + (list "Broker" + (list "Funds" (list (cons 'type ACCT-TYPE-STOCK) + (cons 'commodity FUNDS))))) + (list "Liability" (list (cons 'type ACCT-TYPE-LIABILITY)) + (list "Bank2" + (list "Loan") + (list "CreditCard"))) (list "Equity" (list (cons 'type ACCT-TYPE-EQUITY))) - (list "Income" (list (cons 'type ACCT-TYPE-INCOME))) - (list "Expenses" (list (cons 'type ACCT-TYPE-EXPENSE))))) + (list "Income" (list (cons 'type ACCT-TYPE-INCOME)) + (list "Income-GBP" (list (cons 'commodity GBP)))))) (define (null-test) ;; This null-test tests for the presence of report. @@ -55,86 +82,265 @@ ;; This function will perform implementation testing on the transaction report. (let* ((env (create-test-env)) (account-alist (env-create-account-structure-alist env structure)) - (bank (cdr (assoc "Bank" account-alist))) - (banksub (cdr (assoc "Bank-Sub" account-alist))) - (income (cdr (assoc "Income" account-alist))) - (expense (cdr (assoc "Expenses" account-alist))) + (bank1savings (cdr (assoc "Savings" account-alist))) + (bank1bonds (cdr (assoc "Bonds" account-alist))) + (bank1current (cdr (assoc "Current" account-alist))) + (house (cdr (assoc "House" account-alist))) + (foreignsavings (cdr (assoc "ForeignSavings" account-alist))) + (broker (cdr (assoc "Broker" account-alist))) + (brokerfunds (cdr (assoc "Funds" account-alist))) + (bank2loan (cdr (assoc "Loan" account-alist))) + (bank2creditcard (cdr (assoc "CreditCard" account-alist))) (equity (cdr (assoc "Equity" account-alist))) - (creditcard (cdr (assoc "CreditCard" account-alist))) - (payable (cdr (assoc "A/Payable" account-alist))) - (receivable (cdr (assoc "A/Receivable" account-alist))) + (income (cdr (assoc "Income" account-alist))) + (income-GBP (cdr (assoc "Income-GBP" account-alist))) (YEAR (gnc:time64-get-year (gnc:get-today)))) (define (default-testing-options) - ;; To ease testing of transaction report, we will set default - ;; options for generating reports. We will elable extra columns - ;; for Exporting, disable generation of informational text, and - ;; disable indenting. These options will be tested separately as - ;; the first test group. By default, we'll select the modern dates. (let ((options (gnc:make-report-options balance-sheet-uuid))) - (set-option! options "General" "Balance Sheet Date" (cons 'relative 'end-cal-year)) + (set-option! options "General" "Balance Sheet Date" (cons 'absolute (gnc-dmy2time64 1 1 1971))) + (set-option! options "Accounts" "Levels of Subaccounts" 'all) + (set-option! options "Commodities" "Show Exchange Rates" #t) options)) - (define* (create-txn DD MM YY DESC list-of-splits #:optional txn-type) - (let ((txn (xaccMallocTransaction (gnc-get-current-book)))) - (xaccTransBeginEdit txn) - (xaccTransSetDescription txn DESC) - (xaccTransSetCurrency txn (gnc-default-report-currency)) - (xaccTransSetDate txn DD MM YY) - (for-each - (lambda (tfr) - (let ((split (xaccMallocSplit (gnc-get-current-book)))) - (xaccSplitSetParent split txn) - (xaccSplitSetAccount split (cdr tfr)) - (xaccSplitSetValue split (car tfr)) - (xaccSplitSetAmount split (car tfr)))) - list-of-splits) - (if txn-type - (xaccTransSetTxnType txn txn-type)) - (xaccTransCommitEdit txn) - txn)) + ;; $100 in Savings account + (env-transfer env 01 01 1970 equity bank1savings 100) + ;; $2000 in Bonds + (env-transfer env 01 01 1970 equity bank1bonds 2000) + ;; $500 in Current Acc + (env-transfer env 01 01 1970 equity bank1current 9000) + ;; $100,000 in house + (env-transfer env 01 01 1970 equity house 100000) - (create-txn 1 1 YEAR "invoice charge $100" - (list (cons -100 income) - (cons 100 receivable)) - TXN-TYPE-INVOICE) + ;; pre-existing GBPs + (env-transfer-foreign env 01 01 1970 bank1current foreignsavings 130 100 #:description "buy 100GBP at $1.30") + (env-transfer-foreign env 01 02 1970 bank1current foreignsavings 140 100 #:description "buy 100GBP at $1.40") + (env-transfer-foreign env 01 03 1970 bank1current foreignsavings 150 100 #:description "buy 100GBP at $1.50") + (env-transfer-foreign env 01 04 1970 bank1current foreignsavings 155 100 #:description "buy 100GBP at $1.55") + (env-transfer-foreign env 01 05 1970 bank1current foreignsavings -160 -100 #:description "sell 100GBP at $1.60") + (env-transfer-foreign env 01 06 1970 bank1current foreignsavings 155 100 #:description "buy 100GBP at $1.55") + (env-transfer-foreign env 01 07 1970 bank1current foreignsavings -145 -100 #:description "sell 100GBP at $1.45") + (env-transfer-foreign env 01 08 1970 bank1current foreignsavings 165 100 #:description "buy 100GBP at $1.65") - (create-txn 1 2 YEAR "receive part-payment $98" - (list (cons -98 receivable) - (cons 98 bank)) - TXN-TYPE-PAYMENT) + ;; broker has $2000 + (env-transfer env 01 01 1970 equity broker 2000) - (create-txn 1 3 YEAR "receive bill $55" - (list (cons 55 expense) - (cons -55 payable)) - TXN-TYPE-INVOICE) + ;; existing FUNDs = 200 USD on 01/01/1970 + (env-transfer-foreign env 01 01 1970 bank1current brokerfunds 2000 10 #:description "buy 10FUND at $200") + (env-transfer-foreign env 01 02 1970 bank1current brokerfunds 2100 10 #:description "buy 10FUND at $210") + (env-transfer-foreign env 01 03 1970 bank1current brokerfunds 2250 10 #:description "buy 10FUND at $225") + (env-transfer-foreign env 01 04 1970 bank1current brokerfunds 2440 10 #:description "buy 10FUND at $244") + (env-transfer-foreign env 01 05 1970 bank1current brokerfunds -2640 -10 #:description "sell 10FUND at $264") + (env-transfer-foreign env 01 06 1970 bank1current brokerfunds -2550 -10 #:description "sell 10FUND at $255") + (env-transfer-foreign env 01 07 1970 bank1current brokerfunds 2500 10 #:description "buy 10FUND at $250") - (create-txn 1 4 YEAR "part-pay bill $50 using creditcard" - (list (cons 50 payable) - (cons -50 creditcard)) - TXN-TYPE-PAYMENT) + ;; $9000 loan + (env-transfer env 01 01 1970 equity bank2loan -9000) - (create-txn 1 5 YEAR "part-pay creditcard from bank" - (list (cons 47 creditcard) - (cons -47 banksub))) + ;; $500 on creditcard debt + (env-transfer env 01 01 1970 equity bank2creditcard -500) + ;; further prices into pricedb + ;; GBP = 1.50 to 1.90 USD + (gnc-pricedb-create USD GBP (gnc-dmy2time64 1 1 1971) 15/10) + (gnc-pricedb-create USD GBP (gnc-dmy2time64 1 1 1972) 16/10) + (gnc-pricedb-create USD GBP (gnc-dmy2time64 1 1 1973) 17/10) + (gnc-pricedb-create USD GBP (gnc-dmy2time64 1 1 1974) 18/10) + (gnc-pricedb-create USD GBP (gnc-dmy2time64 1 1 1975) 19/10) + ;; FUND = 300 to 500 USD + (gnc-pricedb-create USD FUNDS (gnc-dmy2time64 1 1 1971) 300) + (gnc-pricedb-create USD FUNDS (gnc-dmy2time64 1 1 1972) 350) + (gnc-pricedb-create USD FUNDS (gnc-dmy2time64 1 1 1973) 400) + (gnc-pricedb-create USD FUNDS (gnc-dmy2time64 1 1 1974) 450) + (gnc-pricedb-create USD FUNDS (gnc-dmy2time64 1 1 1975) 500) + + ;; a couple INCOME transactions, a decade later + (env-transfer env 01 01 1980 income bank1current 250) + (env-transfer env 01 01 1980 income-GBP foreignsavings 500) + (env-transfer-foreign env 01 02 1980 income-GBP bank1current 100 170 #:description "earn 100GBP into $170") + ;; Finally we can begin testing - (test-begin "display options") - (let* ((options (default-testing-options)) (sxml (options->sxml options "default"))) + (test-equal "total assets = $116,010" + (list "$116,010.00") + (sxml->table-row-col sxml 1 15 6)) + (test-equal "total liabilities = $9,500.00" + (list "$9,500.00") + (sxml->table-row-col sxml 1 23 6)) + (test-equal "total equity = $106,510.00" + (list "$106,510.00") + (sxml->table-row-col sxml 1 28 6)) - (test-equal "total assets = $53.00" - (list "Total Assets" "$53.00") - (sxml->table-row-col sxml 1 7 #f)) + (set-option! options "Commodities" "Price Source" 'weighted-average) + (let ((sxml (options->sxml options "weighted-average"))) + (test-equal "weighted average assets = $114,072.86" + (list "$114,072.86") + (sxml->table-row-col sxml 1 15 6))) - (test-equal "total liabilities = $8.00" - (list "Total Liabilities" "$8.00") - (sxml->table-row-col sxml 1 14 #f)) + (set-option! options "Commodities" "Price Source" 'average-cost) + (let ((sxml (options->sxml options "average-cost"))) + (test-equal "average-cost assets = $113,100" + (list "$113,100.00") + (sxml->table-row-col sxml 1 15 6))) - (test-equal "total equity = $45.00" - (list "Total Equity" "$45.00") - (sxml->table-row-col sxml 1 19 #f)) + (set-option! options "Commodities" "Price Source" 'pricedb-nearest) + (let ((sxml (options->sxml options "pricedb-nearest"))) + (test-equal "pricedb-nearest assets = $116,010" + (list "$116,010.00") + (sxml->table-row-col sxml 1 15 6))) - ) - (test-end "display options"))) + (set-option! options "Commodities" "Price Source" 'pricedb-latest) + (let ((sxml (options->sxml options "pricedb-latest"))) + (test-equal "pricedb-latest assets = $122,090" + (list "$122,090.00") + (sxml->table-row-col sxml 1 15 6))) + + ;; set multilevel subtotal style + ;; verifies amount in EVERY line of the report. + (set-option! options "Display" "Parent account balances" 'immediate-bal) + (set-option! options "Display" "Parent account subtotals" 't) + (let ((sxml (options->sxml options "multilevel"))) + (test-equal "multilevel. root = $0.00" + (list "$0.00") + (sxml->table-row-col sxml 1 3 5)) + (test-equal "multilevel. assets = $0.00" + (list "$0.00") + (sxml->table-row-col sxml 1 4 4)) + (test-equal "multilevel. bank1 = $0.00" + (list "$0.00") + (sxml->table-row-col sxml 1 5 3)) + (test-equal "multilevel. bonds = $2,000.00" + (list "$2,000.00") + (sxml->table-row-col sxml 1 6 3)) + (test-equal "multilevel. current = $2310.00" + (list "$2,310.00") + (sxml->table-row-col sxml 1 7 3)) + (test-equal "multilevel. empty = $0.00" + (list "$0.00") + (sxml->table-row-col sxml 1 8 3)) + (test-equal "multilevel. savings = $100.00" + (list "$100.00") + (sxml->table-row-col sxml 1 9 3)) + (test-equal "multilevel. total bank1 = $4,410" + (list "$4,410.00") + (sxml->table-row-col sxml 1 10 4)) + (test-equal "multilevel. broker = $2,000.00" + (list "$2,000.00") + (sxml->table-row-col sxml 1 11 3)) + (test-equal "multilevel. funds = $15,000.00" + (list "30 FUNDS" "$15,000.00" "$15,000.00") + (sxml->table-row-col sxml 1 12 3)) + (test-equal "multilevel. total broker = $17,000.00" + (list "$17,000.00") + (sxml->table-row-col sxml 1 13 4)) + (test-equal "multilevel. foreign = $0.00" + (list "$0.00") + (sxml->table-row-col sxml 1 14 3)) + (test-equal "multilevel. foreignsavings = #400.00 = $680" + (list "#400.00" "$680.00" "$680.00") + (sxml->table-row-col sxml 1 15 3)) + (test-equal "multilevel. total foreign = $680" + (list "$680.00") + (sxml->table-row-col sxml 1 16 4)) + (test-equal "multilevel. house = $100,000" + (list "$100,000.00") + (sxml->table-row-col sxml 1 17 4)) + (test-equal "multilevel. total asset = $122,090" + (list "$122,090.00") + (sxml->table-row-col sxml 1 18 5)) + (test-equal "multilevel. total root = $122,090" + (list "$122,090.00") + (sxml->table-row-col sxml 1 19 6)) + (test-equal "multilevel. total assets = $122,090" + (list "$122,090.00") + (sxml->table-row-col sxml 1 20 6))) + + ;; set recursive-subtotal subtotal style + (set-option! options "Display" "Parent account balances" 'recursive-bal) + (set-option! options "Display" "Parent account subtotals" 'f) + (let ((sxml (options->sxml options "recursive"))) + (test-equal "recursive. root = $760+15000+104600" + (list "#400.00" "$680.00" "30 FUNDS" "$15,000.00" "$106,410.00" "$106,410.00") + (sxml->table-row-col sxml 1 3 6)) + (test-equal "recursive. assets = $760+15000+104600" + (list "#400.00" "$680.00" "30 FUNDS" "$15,000.00" "$106,410.00" "$106,410.00") + (sxml->table-row-col sxml 1 4 5)) + (test-equal "recursive. bank1 = $4,410.00" + (list "$4,410.00") + (sxml->table-row-col sxml 1 5 4)) + (test-equal "recursive. bonds = $2,000.00" + (list "$2,000.00") + (sxml->table-row-col sxml 1 6 3)) + (test-equal "recursive. current = $2310.00" + (list "$2,310.00") + (sxml->table-row-col sxml 1 7 3)) + (test-equal "recursive. empty = $0.00" + (list "$0.00") + (sxml->table-row-col sxml 1 8 3)) + (test-equal "recursive. savings = $100.00" + (list "$100.00") + (sxml->table-row-col sxml 1 9 3)) + (test-equal "recursive. broker = $15000+2000.00" + (list "30 FUNDS" "$15,000.00" "$2,000.00" "$2,000.00") + (sxml->table-row-col sxml 1 10 4)) + (test-equal "recursive. funds = $15,000.00" + (list "30 FUNDS" "$15,000.00" "$15,000.00") + (sxml->table-row-col sxml 1 11 3)) + (test-equal "recursive. foreign = $680.00" + (list "#400.00" "$680.00") + (sxml->table-row-col sxml 1 12 4)) + (test-equal "recursive. foreignsavings = #400.00 = $760" + (list "#400.00" "$680.00" "$680.00") + (sxml->table-row-col sxml 1 13 3)) + (test-equal "recursive. house = $100,000" + (list "$100,000.00") + (sxml->table-row-col sxml 1 14 4)) + (test-equal "recursive. total assets = $122,090.00" + (list "$122,090.00") + (sxml->table-row-col sxml 1 15 6))) + + (set-option! options "Commodities" "Show Foreign Currencies" #f) + (set-option! options "Commodities" "Show Exchange Rates" #f) + (let ((sxml (options->sxml options "disable show-fcur show-rates"))) + (test-equal "show-fcur disabled" + (list "$122,090.00") + (sxml->table-row-col sxml 1 3 6)) + (test-equal "show-rates disabled" + '() + (sxml->table-row-col sxml 2 #f #f))) + + (set-option! options "Commodities" "Show Foreign Currencies" #t) + (set-option! options "Commodities" "Show Exchange Rates" #t) + (let ((sxml (options->sxml options "enable show-fcur show-rates"))) + (test-equal "show-fcur enabled" + (list "#400.00" "$680.00" "30 FUNDS" "$15,000.00" "$106,410.00" "$106,410.00") + (sxml->table-row-col sxml 1 3 6)) + (test-equal "show-rates enabled" + (list "1 FUNDS" "$500.00" "#1.00" "$1.70") + (sxml->table-row-col sxml 2 #f #f))) + + ;;make-multilevel + (set-option! options "Display" "Parent account balances" 'immediate-bal) + (set-option! options "Display" "Parent account subtotals" 't) + + (set-option! options "Display" "Omit zero balance figures" #t) + (set-option! options "Display" "Include accounts with zero total balances" #f) + (let ((sxml (options->sxml options "incl-zb-accts=#f omit-zb-bals=#t"))) + (test-equal "omit-zb-bals=#t" + '() + (sxml->table-row-col sxml 1 3 5)) + (test-equal "incl-zb-accts=#f" + '("Savings" "$100.00") ;i.e.skips "Empty" account with $0.00 + (sxml->table-row-col sxml 1 8 #f))) + + (set-option! options "Display" "Omit zero balance figures" #f) + (set-option! options "Display" "Include accounts with zero total balances" #t) + (let ((sxml (options->sxml options "incl-zb-accts=#t omit-zb-bals=#f"))) + (test-equal "omit-zb-bals=#f" + (list "$0.00") + (sxml->table-row-col sxml 1 3 5)) + (test-equal "incl-zb-accts=#t" + '("Empty" "$0.00") + (sxml->table-row-col sxml 1 8 #f))) + ))) From 8273f3eb824d230f347464cc01df2d58f1338e05 Mon Sep 17 00:00:00 2001 From: Christopher Lam Date: Tue, 24 Jul 2018 08:27:18 +0800 Subject: [PATCH 3/6] [test-balance-sheet] prepare for pnl tests This commit prepares for pnl tests - variables are prefixed with balance-sheet- to accommodate pnl- tests --- .../test/test-balance-sheet.scm | 80 +++++++++---------- 1 file changed, 40 insertions(+), 40 deletions(-) diff --git a/gnucash/report/standard-reports/test/test-balance-sheet.scm b/gnucash/report/standard-reports/test/test-balance-sheet.scm index 287608961a..8a13dc44b3 100644 --- a/gnucash/report/standard-reports/test/test-balance-sheet.scm +++ b/gnucash/report/standard-reports/test/test-balance-sheet.scm @@ -24,8 +24,8 @@ (balsheet-tests) (test-end "balsheet.scm")) -(define (options->sxml options test-title) - (gnc:options->sxml balance-sheet-uuid options "test-balsheet" test-title)) +(define (options->sxml uuid options test-title) + (gnc:options->sxml uuid options "test-balsheet-pnl" test-title)) (define (set-option! options section name value) (let ((option (gnc:lookup-option options section name))) @@ -75,8 +75,8 @@ (define (null-test) ;; This null-test tests for the presence of report. - (let ((options (gnc:make-report-options balance-sheet-uuid))) - (test-assert "null-test" (options->sxml options "null-test")))) + (let ((balance-sheet-options (gnc:make-report-options balance-sheet-uuid))) + (test-assert "null-test" (options->sxml balance-sheet-uuid balance-sheet-options "null-test")))) (define (balsheet-tests) ;; This function will perform implementation testing on the transaction report. @@ -96,12 +96,12 @@ (income-GBP (cdr (assoc "Income-GBP" account-alist))) (YEAR (gnc:time64-get-year (gnc:get-today)))) - (define (default-testing-options) - (let ((options (gnc:make-report-options balance-sheet-uuid))) - (set-option! options "General" "Balance Sheet Date" (cons 'absolute (gnc-dmy2time64 1 1 1971))) - (set-option! options "Accounts" "Levels of Subaccounts" 'all) - (set-option! options "Commodities" "Show Exchange Rates" #t) - options)) + (define (default-balsheet-testing-options) + (let ((balance-sheet-options (gnc:make-report-options balance-sheet-uuid))) + (set-option! balance-sheet-options "General" "Balance Sheet Date" (cons 'absolute (gnc-dmy2time64 1 1 1971))) + (set-option! balance-sheet-options "Accounts" "Levels of Subaccounts" 'all) + (set-option! balance-sheet-options "Commodities" "Show Exchange Rates" #t) + balance-sheet-options)) ;; $100 in Savings account (env-transfer env 01 01 1970 equity bank1savings 100) @@ -160,8 +160,8 @@ (env-transfer-foreign env 01 02 1980 income-GBP bank1current 100 170 #:description "earn 100GBP into $170") ;; Finally we can begin testing - (let* ((options (default-testing-options)) - (sxml (options->sxml options "default"))) + (let* ((balance-sheet-options (default-balsheet-testing-options)) + (sxml (options->sxml balance-sheet-uuid balance-sheet-options "balsheet-default"))) (test-equal "total assets = $116,010" (list "$116,010.00") (sxml->table-row-col sxml 1 15 6)) @@ -172,35 +172,35 @@ (list "$106,510.00") (sxml->table-row-col sxml 1 28 6)) - (set-option! options "Commodities" "Price Source" 'weighted-average) - (let ((sxml (options->sxml options "weighted-average"))) + (set-option! balance-sheet-options "Commodities" "Price Source" 'weighted-average) + (let ((sxml (options->sxml balance-sheet-uuid balance-sheet-options "balsheet-weighted-average"))) (test-equal "weighted average assets = $114,072.86" (list "$114,072.86") (sxml->table-row-col sxml 1 15 6))) - (set-option! options "Commodities" "Price Source" 'average-cost) - (let ((sxml (options->sxml options "average-cost"))) + (set-option! balance-sheet-options "Commodities" "Price Source" 'average-cost) + (let ((sxml (options->sxml balance-sheet-uuid balance-sheet-options "balsheet-average-cost"))) (test-equal "average-cost assets = $113,100" (list "$113,100.00") (sxml->table-row-col sxml 1 15 6))) - (set-option! options "Commodities" "Price Source" 'pricedb-nearest) - (let ((sxml (options->sxml options "pricedb-nearest"))) + (set-option! balance-sheet-options "Commodities" "Price Source" 'pricedb-nearest) + (let ((sxml (options->sxml balance-sheet-uuid balance-sheet-options "balsheet-pricedb-nearest"))) (test-equal "pricedb-nearest assets = $116,010" (list "$116,010.00") (sxml->table-row-col sxml 1 15 6))) - (set-option! options "Commodities" "Price Source" 'pricedb-latest) - (let ((sxml (options->sxml options "pricedb-latest"))) + (set-option! balance-sheet-options "Commodities" "Price Source" 'pricedb-latest) + (let ((sxml (options->sxml balance-sheet-uuid balance-sheet-options "balsheet-pricedb-latest"))) (test-equal "pricedb-latest assets = $122,090" (list "$122,090.00") (sxml->table-row-col sxml 1 15 6))) ;; set multilevel subtotal style ;; verifies amount in EVERY line of the report. - (set-option! options "Display" "Parent account balances" 'immediate-bal) - (set-option! options "Display" "Parent account subtotals" 't) - (let ((sxml (options->sxml options "multilevel"))) + (set-option! balance-sheet-options "Display" "Parent account balances" 'immediate-bal) + (set-option! balance-sheet-options "Display" "Parent account subtotals" 't) + (let ((sxml (options->sxml balance-sheet-uuid balance-sheet-options "balsheet-multilevel"))) (test-equal "multilevel. root = $0.00" (list "$0.00") (sxml->table-row-col sxml 1 3 5)) @@ -257,9 +257,9 @@ (sxml->table-row-col sxml 1 20 6))) ;; set recursive-subtotal subtotal style - (set-option! options "Display" "Parent account balances" 'recursive-bal) - (set-option! options "Display" "Parent account subtotals" 'f) - (let ((sxml (options->sxml options "recursive"))) + (set-option! balance-sheet-options "Display" "Parent account balances" 'recursive-bal) + (set-option! balance-sheet-options "Display" "Parent account subtotals" 'f) + (let ((sxml (options->sxml balance-sheet-uuid balance-sheet-options "balsheet-recursive"))) (test-equal "recursive. root = $760+15000+104600" (list "#400.00" "$680.00" "30 FUNDS" "$15,000.00" "$106,410.00" "$106,410.00") (sxml->table-row-col sxml 1 3 6)) @@ -300,9 +300,9 @@ (list "$122,090.00") (sxml->table-row-col sxml 1 15 6))) - (set-option! options "Commodities" "Show Foreign Currencies" #f) - (set-option! options "Commodities" "Show Exchange Rates" #f) - (let ((sxml (options->sxml options "disable show-fcur show-rates"))) + (set-option! balance-sheet-options "Commodities" "Show Foreign Currencies" #f) + (set-option! balance-sheet-options "Commodities" "Show Exchange Rates" #f) + (let ((sxml (options->sxml balance-sheet-uuid balance-sheet-options "balsheet-disable show-fcur show-rates"))) (test-equal "show-fcur disabled" (list "$122,090.00") (sxml->table-row-col sxml 1 3 6)) @@ -310,9 +310,9 @@ '() (sxml->table-row-col sxml 2 #f #f))) - (set-option! options "Commodities" "Show Foreign Currencies" #t) - (set-option! options "Commodities" "Show Exchange Rates" #t) - (let ((sxml (options->sxml options "enable show-fcur show-rates"))) + (set-option! balance-sheet-options "Commodities" "Show Foreign Currencies" #t) + (set-option! balance-sheet-options "Commodities" "Show Exchange Rates" #t) + (let ((sxml (options->sxml balance-sheet-uuid balance-sheet-options "balsheet-enable show-fcur show-rates"))) (test-equal "show-fcur enabled" (list "#400.00" "$680.00" "30 FUNDS" "$15,000.00" "$106,410.00" "$106,410.00") (sxml->table-row-col sxml 1 3 6)) @@ -321,12 +321,12 @@ (sxml->table-row-col sxml 2 #f #f))) ;;make-multilevel - (set-option! options "Display" "Parent account balances" 'immediate-bal) - (set-option! options "Display" "Parent account subtotals" 't) + (set-option! balance-sheet-options "Display" "Parent account balances" 'immediate-bal) + (set-option! balance-sheet-options "Display" "Parent account subtotals" 't) - (set-option! options "Display" "Omit zero balance figures" #t) - (set-option! options "Display" "Include accounts with zero total balances" #f) - (let ((sxml (options->sxml options "incl-zb-accts=#f omit-zb-bals=#t"))) + (set-option! balance-sheet-options "Display" "Omit zero balance figures" #t) + (set-option! balance-sheet-options "Display" "Include accounts with zero total balances" #f) + (let ((sxml (options->sxml balance-sheet-uuid balance-sheet-options "balsheet-incl-zb-accts=#f omit-zb-bals=#t"))) (test-equal "omit-zb-bals=#t" '() (sxml->table-row-col sxml 1 3 5)) @@ -334,9 +334,9 @@ '("Savings" "$100.00") ;i.e.skips "Empty" account with $0.00 (sxml->table-row-col sxml 1 8 #f))) - (set-option! options "Display" "Omit zero balance figures" #f) - (set-option! options "Display" "Include accounts with zero total balances" #t) - (let ((sxml (options->sxml options "incl-zb-accts=#t omit-zb-bals=#f"))) + (set-option! balance-sheet-options "Display" "Omit zero balance figures" #f) + (set-option! balance-sheet-options "Display" "Include accounts with zero total balances" #t) + (let ((sxml (options->sxml balance-sheet-uuid balance-sheet-options "balsheet-incl-zb-accts=#t omit-zb-bals=#f"))) (test-equal "omit-zb-bals=#f" (list "$0.00") (sxml->table-row-col sxml 1 3 5)) From cabb598c0f0428d0dcc4f43c3b4713acbb1bb0f5 Mon Sep 17 00:00:00 2001 From: Christopher Lam Date: Tue, 24 Jul 2018 08:28:45 +0800 Subject: [PATCH 4/6] [test-balsheet-pnl] rename to allow for pnl tests --- gnucash/report/standard-reports/test/CMakeLists.txt | 2 +- .../test/{test-balance-sheet.scm => test-balsheet-pnl.scm} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename gnucash/report/standard-reports/test/{test-balance-sheet.scm => test-balsheet-pnl.scm} (100%) diff --git a/gnucash/report/standard-reports/test/CMakeLists.txt b/gnucash/report/standard-reports/test/CMakeLists.txt index 7fbdd4ff11..651a06b86f 100644 --- a/gnucash/report/standard-reports/test/CMakeLists.txt +++ b/gnucash/report/standard-reports/test/CMakeLists.txt @@ -9,7 +9,7 @@ set(scm_test_standard_reports_SOURCES set(scm_test_with_srfi64_SOURCES test-charts.scm test-transaction.scm - test-balance-sheet.scm + test-balsheet-pnl.scm test-income-gst.scm ) diff --git a/gnucash/report/standard-reports/test/test-balance-sheet.scm b/gnucash/report/standard-reports/test/test-balsheet-pnl.scm similarity index 100% rename from gnucash/report/standard-reports/test/test-balance-sheet.scm rename to gnucash/report/standard-reports/test/test-balsheet-pnl.scm From 58ae3f2a89f2e3ec6d818234aa1d874fd16bb446 Mon Sep 17 00:00:00 2001 From: Christopher Lam Date: Tue, 24 Jul 2018 09:29:55 +0800 Subject: [PATCH 5/6] [test-balsheet-pnl] add income-statement tests --- .../test/test-balsheet-pnl.scm | 120 +++++++++++++++++- 1 file changed, 114 insertions(+), 6 deletions(-) diff --git a/gnucash/report/standard-reports/test/test-balsheet-pnl.scm b/gnucash/report/standard-reports/test/test-balsheet-pnl.scm index 8a13dc44b3..d02cb48904 100644 --- a/gnucash/report/standard-reports/test/test-balsheet-pnl.scm +++ b/gnucash/report/standard-reports/test/test-balsheet-pnl.scm @@ -2,6 +2,7 @@ (gnc:module-begin-syntax (gnc:module-load "gnucash/app-utils" 0)) (use-modules (gnucash engine test test-extras)) (use-modules (gnucash report standard-reports balance-sheet)) +(use-modules (gnucash report standard-reports income-statement)) (use-modules (gnucash report stylesheets)) (use-modules (gnucash report report-system)) (use-modules (gnucash report report-system test test-extras)) @@ -10,19 +11,20 @@ (use-modules (sxml simple)) (use-modules (sxml xpath)) -;; This is implementation testing for Balance Sheet. +;; This is implementation testing for Balance Sheet and Profit&Loss. (define balance-sheet-uuid "c4173ac99b2b448289bf4d11c731af13") +(define pnl-uuid "0b81a3bdfd504aff849ec2e8630524bc") ;; Explicitly set locale to make the report output predictable (setlocale LC_ALL "C") (define (run-test) (test-runner-factory gnc:test-runner) - (test-begin "balsheet.scm") + (test-begin "balsheet and profit&loss") (null-test) - (balsheet-tests) - (test-end "balsheet.scm")) + (balsheet-pnl-tests) + (test-end "balsheet and profit&loss")) (define (options->sxml uuid options test-title) (gnc:options->sxml uuid options "test-balsheet-pnl" test-title)) @@ -78,7 +80,7 @@ (let ((balance-sheet-options (gnc:make-report-options balance-sheet-uuid))) (test-assert "null-test" (options->sxml balance-sheet-uuid balance-sheet-options "null-test")))) -(define (balsheet-tests) +(define (balsheet-pnl-tests) ;; This function will perform implementation testing on the transaction report. (let* ((env (create-test-env)) (account-alist (env-create-account-structure-alist env structure)) @@ -103,6 +105,14 @@ (set-option! balance-sheet-options "Commodities" "Show Exchange Rates" #t) balance-sheet-options)) + (define (default-pnl-testing-options) + (let ((pnl-options (gnc:make-report-options pnl-uuid))) + (set-option! pnl-options "General" "Start Date" (cons 'absolute (gnc-dmy2time64 1 1 1980))) + (set-option! pnl-options "General" "End Date" (cons 'absolute (gnc-dmy2time64 1 1 1981))) + (set-option! pnl-options "Accounts" "Levels of Subaccounts" 'all) + (set-option! pnl-options "Commodities" "Show Exchange Rates" #t) + pnl-options)) + ;; $100 in Savings account (env-transfer env 01 01 1970 equity bank1savings 100) ;; $2000 in Bonds @@ -159,7 +169,8 @@ (env-transfer env 01 01 1980 income-GBP foreignsavings 500) (env-transfer-foreign env 01 02 1980 income-GBP bank1current 100 170 #:description "earn 100GBP into $170") - ;; Finally we can begin testing + ;; Finally we can begin testing balsheet + (display "\n\n balsheet tests\n\n") (let* ((balance-sheet-options (default-balsheet-testing-options)) (sxml (options->sxml balance-sheet-uuid balance-sheet-options "balsheet-default"))) (test-equal "total assets = $116,010" @@ -343,4 +354,101 @@ (test-equal "incl-zb-accts=#t" '("Empty" "$0.00") (sxml->table-row-col sxml 1 8 #f))) + ) + + (display "\n\n pnl tests\n\n") + (let* ((pnl-options (default-pnl-testing-options)) + (sxml (options->sxml pnl-uuid pnl-options "pnl-default"))) + (test-equal "total revenue = $1,270.00" + (list "$1,270.00" "$1,270.00") + (sxml->table-row-col sxml 1 5 6)) + (test-equal "total expenses = $0.00" + (list "$0.00" "$0.00") + (sxml->table-row-col sxml 1 3 6)) + + (set-option! pnl-options "Commodities" "Price Source" 'weighted-average) + (let ((sxml (options->sxml pnl-uuid pnl-options "pnl-weighted-average"))) + (test-equal "weighted average revenue = $1163.33" + (list "$1,163.33" "$1,163.33") + (sxml->table-row-col sxml 1 5 6))) + + (set-option! pnl-options "Commodities" "Price Source" 'average-cost) + (let ((sxml (options->sxml pnl-uuid pnl-options "pnl-average-cost"))) + (test-equal "average-cost revenue = $1,090" + (list "$1,090.00" "$1,090.00") + (sxml->table-row-col sxml 1 5 6))) + + (set-option! pnl-options "Commodities" "Price Source" 'pricedb-nearest) + (let ((sxml (options->sxml pnl-uuid pnl-options "pnl-pricedb-nearest"))) + (test-equal "pricedb-nearest revenue = $1270" + (list "$1,270.00" "$1,270.00") + (sxml->table-row-col sxml 1 5 6))) + + (set-option! pnl-options "Commodities" "Price Source" 'pricedb-latest) + (let ((sxml (options->sxml pnl-uuid pnl-options "pnl-pricedb-latest"))) + (test-equal "pricedb-latest revenue = $1270" + (list "$1,270.00" "$1,270.00") + (sxml->table-row-col sxml 1 5 6))) + + ;; set multilevel subtotal style + ;; verifies amount in EVERY line of the report. + (set-option! pnl-options "Display" "Parent account balances" 'immediate-bal) + (set-option! pnl-options "Display" "Parent account subtotals" 't) + (let ((sxml (options->sxml pnl-uuid pnl-options "pnl-multilevel"))) + (test-equal "multilevel. income = -$250.00" + (list "-$250.00" "-$250.00") + (sxml->table-row-col sxml 1 3 5)) + (test-equal "multilevel. income-GBP = $0.00" + (list "-#600.00" "-$1,020.00" "-#600.00" "-$1,020.00") + (sxml->table-row-col sxml 1 4 5)) + (test-equal "multilevel. total income = -$1,270.00" + (list "-$1,270.00" "-$1,270.00") + (sxml->table-row-col sxml 1 5 6)) + (test-equal "multilevel. total revenue = $1,270.00" + (list "$1,270.00" "$1,270.00") + (sxml->table-row-col sxml 1 6 6)) + (test-equal "multilevel. expenses = $0.00" + (list "$0.00" "$0.00") + (sxml->table-row-col sxml 1 3 6)) + (test-equal "multilevel. net-income = $1,270" + (list "$1,270.00" "$1,270.00") + (sxml->table-row-col sxml 1 4 6))) + + ;; set recursive-subtotal subtotal style + (set-option! pnl-options "Display" "Parent account balances" 'recursive-bal) + (set-option! pnl-options "Display" "Parent account subtotals" 'f) + (let ((sxml (options->sxml pnl-uuid pnl-options "pnl-recursive"))) + (test-equal "recursive. income = $1020+250" + (list "-#600.00" "-$1,020.00" "-$250.00" "-$250.00" "$0.00" "-#600.00" "-$1,020.00" "-$250.00" "-$250.00" "$0.00") + (sxml->table-row-col sxml 1 3 6)) + (test-equal "recursive. income-gbp = $1020" + (list "-#600.00" "-$1,020.00" "-#600.00" "-$1,020.00") + (sxml->table-row-col sxml 1 4 5)) + (test-equal "recursive. total revenue = $1270" + (list "$1,270.00" "$1,270.00") + (sxml->table-row-col sxml 1 5 6))) + + (set-option! pnl-options "Commodities" "Show Foreign Currencies" #f) + (set-option! pnl-options "Commodities" "Show Exchange Rates" #f) + (let ((sxml (options->sxml pnl-uuid pnl-options "pnl-disable show-fcur show-rates"))) + (test-equal "show-fcur disabled" + (list "-$1,270.00" "$0.00" "-$1,270.00" "$0.00") + (sxml->table-row-col sxml 1 3 6)) + (test-equal "show-rates disabled" + '() + (sxml->table-row-col sxml 2 #f #f))) + + (set-option! pnl-options "Commodities" "Show Foreign Currencies" #t) + (set-option! pnl-options "Commodities" "Show Exchange Rates" #t) + (let ((sxml (options->sxml pnl-uuid pnl-options "pnl-enable show-fcur show-rates"))) + (test-equal "show-fcur enabled" + (list "-#600.00" "-$1,020.00" "-$250.00" "-$250.00" "$0.00" "-#600.00" "-$1,020.00" "-$250.00" "-$250.00" "$0.00") + (sxml->table-row-col sxml 1 3 6)) + (test-equal "show-rates enabled" + (list "#1.00" "$1.70") + (sxml->table-row-col sxml 2 #f #f))) + + ;;make-multilevel + (set-option! pnl-options "Display" "Parent account balances" 'immediate-bal) + (set-option! pnl-options "Display" "Parent account subtotals" 't) ))) From 47ad60c7235503134f6c1b8cdde232db2b507d48 Mon Sep 17 00:00:00 2001 From: Christopher Lam Date: Tue, 31 Jul 2018 11:22:07 +0800 Subject: [PATCH 6/6] [test-balsheet-pnl] add more SELL transactions this is to thoroughly test average-cost and weighted-average --- .../test/test-balsheet-pnl.scm | 88 ++++++++++--------- 1 file changed, 45 insertions(+), 43 deletions(-) diff --git a/gnucash/report/standard-reports/test/test-balsheet-pnl.scm b/gnucash/report/standard-reports/test/test-balsheet-pnl.scm index d02cb48904..954798e09e 100644 --- a/gnucash/report/standard-reports/test/test-balsheet-pnl.scm +++ b/gnucash/report/standard-reports/test/test-balsheet-pnl.scm @@ -125,8 +125,10 @@ ;; pre-existing GBPs (env-transfer-foreign env 01 01 1970 bank1current foreignsavings 130 100 #:description "buy 100GBP at $1.30") (env-transfer-foreign env 01 02 1970 bank1current foreignsavings 140 100 #:description "buy 100GBP at $1.40") + (env-transfer-foreign env 15 02 1970 bank1current foreignsavings -142 -100 #:description "sell 100GBP at $1.42") (env-transfer-foreign env 01 03 1970 bank1current foreignsavings 150 100 #:description "buy 100GBP at $1.50") (env-transfer-foreign env 01 04 1970 bank1current foreignsavings 155 100 #:description "buy 100GBP at $1.55") + (env-transfer-foreign env 15 04 1970 bank1current foreignsavings -157 -100 #:description "sell 100GBP at $1.57") (env-transfer-foreign env 01 05 1970 bank1current foreignsavings -160 -100 #:description "sell 100GBP at $1.60") (env-transfer-foreign env 01 06 1970 bank1current foreignsavings 155 100 #:description "buy 100GBP at $1.55") (env-transfer-foreign env 01 07 1970 bank1current foreignsavings -145 -100 #:description "sell 100GBP at $1.45") @@ -168,25 +170,25 @@ (env-transfer env 01 01 1980 income bank1current 250) (env-transfer env 01 01 1980 income-GBP foreignsavings 500) (env-transfer-foreign env 01 02 1980 income-GBP bank1current 100 170 #:description "earn 100GBP into $170") - + ;; Finally we can begin testing balsheet (display "\n\n balsheet tests\n\n") (let* ((balance-sheet-options (default-balsheet-testing-options)) (sxml (options->sxml balance-sheet-uuid balance-sheet-options "balsheet-default"))) - (test-equal "total assets = $116,010" - (list "$116,010.00") + (test-equal "total assets = $116,009" + (list "$116,009.00") (sxml->table-row-col sxml 1 15 6)) (test-equal "total liabilities = $9,500.00" (list "$9,500.00") (sxml->table-row-col sxml 1 23 6)) - (test-equal "total equity = $106,510.00" - (list "$106,510.00") + (test-equal "total equity = $106,509.00" + (list "$106,509.00") (sxml->table-row-col sxml 1 28 6)) (set-option! balance-sheet-options "Commodities" "Price Source" 'weighted-average) (let ((sxml (options->sxml balance-sheet-uuid balance-sheet-options "balsheet-weighted-average"))) - (test-equal "weighted average assets = $114,072.86" - (list "$114,072.86") + (test-equal "weighted average assets = $114,071.66" + (list "$114,071.66") (sxml->table-row-col sxml 1 15 6))) (set-option! balance-sheet-options "Commodities" "Price Source" 'average-cost) @@ -197,14 +199,14 @@ (set-option! balance-sheet-options "Commodities" "Price Source" 'pricedb-nearest) (let ((sxml (options->sxml balance-sheet-uuid balance-sheet-options "balsheet-pricedb-nearest"))) - (test-equal "pricedb-nearest assets = $116,010" - (list "$116,010.00") + (test-equal "pricedb-nearest assets = $116,009" + (list "$116,009.00") (sxml->table-row-col sxml 1 15 6))) (set-option! balance-sheet-options "Commodities" "Price Source" 'pricedb-latest) (let ((sxml (options->sxml balance-sheet-uuid balance-sheet-options "balsheet-pricedb-latest"))) - (test-equal "pricedb-latest assets = $122,090" - (list "$122,090.00") + (test-equal "pricedb-latest assets = $122,049" + (list "$122,049.00") (sxml->table-row-col sxml 1 15 6))) ;; set multilevel subtotal style @@ -224,8 +226,8 @@ (test-equal "multilevel. bonds = $2,000.00" (list "$2,000.00") (sxml->table-row-col sxml 1 6 3)) - (test-equal "multilevel. current = $2310.00" - (list "$2,310.00") + (test-equal "multilevel. current = $2609.00" + (list "$2,609.00") (sxml->table-row-col sxml 1 7 3)) (test-equal "multilevel. empty = $0.00" (list "$0.00") @@ -233,8 +235,8 @@ (test-equal "multilevel. savings = $100.00" (list "$100.00") (sxml->table-row-col sxml 1 9 3)) - (test-equal "multilevel. total bank1 = $4,410" - (list "$4,410.00") + (test-equal "multilevel. total bank1 = $4709" + (list "$4,709.00") (sxml->table-row-col sxml 1 10 4)) (test-equal "multilevel. broker = $2,000.00" (list "$2,000.00") @@ -248,23 +250,23 @@ (test-equal "multilevel. foreign = $0.00" (list "$0.00") (sxml->table-row-col sxml 1 14 3)) - (test-equal "multilevel. foreignsavings = #400.00 = $680" - (list "#400.00" "$680.00" "$680.00") + (test-equal "multilevel. foreignsavings = #200.00 = $340" + (list "#200.00" "$340.00" "$340.00") (sxml->table-row-col sxml 1 15 3)) - (test-equal "multilevel. total foreign = $680" - (list "$680.00") + (test-equal "multilevel. total foreign = $340" + (list "$340.00") (sxml->table-row-col sxml 1 16 4)) (test-equal "multilevel. house = $100,000" (list "$100,000.00") (sxml->table-row-col sxml 1 17 4)) - (test-equal "multilevel. total asset = $122,090" - (list "$122,090.00") + (test-equal "multilevel. total asset = $122,049" + (list "$122,049.00") (sxml->table-row-col sxml 1 18 5)) - (test-equal "multilevel. total root = $122,090" - (list "$122,090.00") + (test-equal "multilevel. total root = $122,049" + (list "$122,049.00") (sxml->table-row-col sxml 1 19 6)) - (test-equal "multilevel. total assets = $122,090" - (list "$122,090.00") + (test-equal "multilevel. total assets = $122,049" + (list "$122,049.00") (sxml->table-row-col sxml 1 20 6))) ;; set recursive-subtotal subtotal style @@ -272,19 +274,19 @@ (set-option! balance-sheet-options "Display" "Parent account subtotals" 'f) (let ((sxml (options->sxml balance-sheet-uuid balance-sheet-options "balsheet-recursive"))) (test-equal "recursive. root = $760+15000+104600" - (list "#400.00" "$680.00" "30 FUNDS" "$15,000.00" "$106,410.00" "$106,410.00") + (list "#200.00" "$340.00" "30 FUNDS" "$15,000.00" "$106,709.00" "$106,709.00") (sxml->table-row-col sxml 1 3 6)) (test-equal "recursive. assets = $760+15000+104600" - (list "#400.00" "$680.00" "30 FUNDS" "$15,000.00" "$106,410.00" "$106,410.00") + (list "#200.00" "$340.00" "30 FUNDS" "$15,000.00" "$106,709.00" "$106,709.00") (sxml->table-row-col sxml 1 4 5)) - (test-equal "recursive. bank1 = $4,410.00" - (list "$4,410.00") + (test-equal "recursive. bank1 = $4,709.00" + (list "$4,709.00") (sxml->table-row-col sxml 1 5 4)) (test-equal "recursive. bonds = $2,000.00" (list "$2,000.00") (sxml->table-row-col sxml 1 6 3)) - (test-equal "recursive. current = $2310.00" - (list "$2,310.00") + (test-equal "recursive. current = $2609.00" + (list "$2,609.00") (sxml->table-row-col sxml 1 7 3)) (test-equal "recursive. empty = $0.00" (list "$0.00") @@ -298,24 +300,24 @@ (test-equal "recursive. funds = $15,000.00" (list "30 FUNDS" "$15,000.00" "$15,000.00") (sxml->table-row-col sxml 1 11 3)) - (test-equal "recursive. foreign = $680.00" - (list "#400.00" "$680.00") + (test-equal "recursive. foreign = $340.00" + (list "#200.00" "$340.00") (sxml->table-row-col sxml 1 12 4)) - (test-equal "recursive. foreignsavings = #400.00 = $760" - (list "#400.00" "$680.00" "$680.00") + (test-equal "recursive. foreignsavings = #200.00 = $340" + (list "#200.00" "$340.00" "$340.00") (sxml->table-row-col sxml 1 13 3)) (test-equal "recursive. house = $100,000" (list "$100,000.00") (sxml->table-row-col sxml 1 14 4)) - (test-equal "recursive. total assets = $122,090.00" - (list "$122,090.00") + (test-equal "recursive. total assets = $122,049.00" + (list "$122,049.00") (sxml->table-row-col sxml 1 15 6))) (set-option! balance-sheet-options "Commodities" "Show Foreign Currencies" #f) (set-option! balance-sheet-options "Commodities" "Show Exchange Rates" #f) (let ((sxml (options->sxml balance-sheet-uuid balance-sheet-options "balsheet-disable show-fcur show-rates"))) (test-equal "show-fcur disabled" - (list "$122,090.00") + (list "$122,049.00") (sxml->table-row-col sxml 1 3 6)) (test-equal "show-rates disabled" '() @@ -325,7 +327,7 @@ (set-option! balance-sheet-options "Commodities" "Show Exchange Rates" #t) (let ((sxml (options->sxml balance-sheet-uuid balance-sheet-options "balsheet-enable show-fcur show-rates"))) (test-equal "show-fcur enabled" - (list "#400.00" "$680.00" "30 FUNDS" "$15,000.00" "$106,410.00" "$106,410.00") + (list "#200.00" "$340.00" "30 FUNDS" "$15,000.00" "$106,709.00" "$106,709.00") (sxml->table-row-col sxml 1 3 6)) (test-equal "show-rates enabled" (list "1 FUNDS" "$500.00" "#1.00" "$1.70") @@ -368,14 +370,14 @@ (set-option! pnl-options "Commodities" "Price Source" 'weighted-average) (let ((sxml (options->sxml pnl-uuid pnl-options "pnl-weighted-average"))) - (test-equal "weighted average revenue = $1163.33" - (list "$1,163.33" "$1,163.33") + (test-equal "weighted average revenue = $1160.36" + (list "$1,160.36" "$1,160.36") (sxml->table-row-col sxml 1 5 6))) (set-option! pnl-options "Commodities" "Price Source" 'average-cost) (let ((sxml (options->sxml pnl-uuid pnl-options "pnl-average-cost"))) - (test-equal "average-cost revenue = $1,090" - (list "$1,090.00" "$1,090.00") + (test-equal "average-cost revenue = $976" + (list "$976.00" "$976.00") (sxml->table-row-col sxml 1 5 6))) (set-option! pnl-options "Commodities" "Price Source" 'pricedb-nearest)