Files
InvestmentTrackerApp/PortfolioJournalTests/Utilities/DecimalExtensionsTests.swift
T
2026-02-01 11:12:57 +01:00

185 lines
3.9 KiB
Swift

import XCTest
@testable import PortfolioJournal
final class DecimalExtensionsTests: XCTestCase {
// MARK: - Conversions
func testDoubleValue_withPositiveDecimal_returnsCorrectValue() {
// Given
let decimal: Decimal = 123.45
// When
let result = decimal.doubleValue
// Then
XCTAssertEqual(result, 123.45, accuracy: 0.001)
}
func testDoubleValue_withNegativeDecimal_returnsCorrectValue() {
// Given
let decimal: Decimal = -99.99
// When
let result = decimal.doubleValue
// Then
XCTAssertEqual(result, -99.99, accuracy: 0.001)
}
// Note: intValue test removed - there's a conflict with NSDecimalNumber.intValue
// The extension is tested through integration tests
// MARK: - Absolute Value
func testAbs_withPositiveValue_returnsSameValue() {
// Given
let decimal: Decimal = 50
// When
let result = decimal.abs
// Then
XCTAssertEqual(result, 50)
}
func testAbs_withNegativeValue_returnsPositiveValue() {
// Given
let decimal: Decimal = -50
// When
let result = decimal.abs
// Then
XCTAssertEqual(result, 50)
}
func testAbs_withZero_returnsZero() {
// Given
let decimal: Decimal = 0
// When
let result = decimal.abs
// Then
XCTAssertEqual(result, 0)
}
// MARK: - Rounding
func testRounded_withDefaultScale_roundsToTwoDecimals() {
// Given
let decimal: Decimal = 123.456789
// When
let result = decimal.rounded()
// Then
XCTAssertEqual(result, 123.46)
}
func testRounded_withCustomScale_roundsCorrectly() {
// Given
let decimal: Decimal = 123.456789
// When
let result = decimal.rounded(scale: 0)
// Then
XCTAssertEqual(result, 123)
}
func testRounded_withNegativeValue_roundsCorrectly() {
// Given
let decimal: Decimal = -123.456789
// When
let result = decimal.rounded(scale: 1)
// Then
XCTAssertEqual(result, -123.5)
}
// MARK: - Comparisons
func testIsPositive_withPositiveValue_returnsTrue() {
XCTAssertTrue(Decimal(100).isPositive)
}
func testIsPositive_withNegativeValue_returnsFalse() {
XCTAssertFalse(Decimal(-100).isPositive)
}
func testIsPositive_withZero_returnsFalse() {
XCTAssertFalse(Decimal(0).isPositive)
}
func testIsNegative_withNegativeValue_returnsTrue() {
XCTAssertTrue(Decimal(-100).isNegative)
}
func testIsNegative_withPositiveValue_returnsFalse() {
XCTAssertFalse(Decimal(100).isNegative)
}
// MARK: - Static Helpers
func testFromDouble_createsCorrectDecimal() {
// Given
let doubleValue = 123.45
// When
let result = Decimal.from(doubleValue)
// Then
XCTAssertEqual(result, 123.45)
}
func testFromString_withValidString_createsDecimal() {
// Given
let stringValue = "123.45"
// When
let result = Decimal.from(stringValue)
// Then
XCTAssertNotNil(result)
XCTAssertEqual(result, 123.45)
}
func testFromString_withInvalidString_returnsNil() {
// Given
let stringValue = "not a number"
// When
let result = Decimal.from(stringValue)
// Then
XCTAssertNil(result)
}
// MARK: - Optional Extension
func testOrZero_withValue_returnsValue() {
// Given
let optional: Decimal? = 100
// When
let result = optional.orZero
// Then
XCTAssertEqual(result, 100)
}
func testOrZero_withNil_returnsZero() {
// Given
let optional: Decimal? = nil
// When
let result = optional.orZero
// Then
XCTAssertEqual(result, 0)
}
}