// Copyright © 2024 Mastodon gGmbH. All rights reserved.

import XCTest
@testable import MastodonUI

class MetricFormatterTests: XCTestCase {
    
    func test_tensFormat() {
        let formatter = MastodonMetricFormatter()
        let value = formatter.string(from: 12)
        
        XCTAssertEqual(value, "12")
    }
    
    func test_hundredsFormat() {
        let formatter = MastodonMetricFormatter()
        let value = formatter.string(from: 123)
        
        XCTAssertEqual(value, "123")
    }
    
    func test_thousandOneFormat() {
        let formatter = MastodonMetricFormatter()
        let value = formatter.string(from: 1001)
        
        XCTAssertEqual(value, "1K")
    }
    
    func test_thousandFiftyFormat() {
        let formatter = MastodonMetricFormatter()
        let value = formatter.string(from: 1050)
        
        XCTAssertEqual(value, "1K")
    }
    
    func test_thousandNinetynineFormat() {
        let formatter = MastodonMetricFormatter()
        let value = formatter.string(from: 1099)
        
        XCTAssertEqual(value, "1,1K")
    }
    
    func test_thousandNinehundredFormat() {
        let formatter = MastodonMetricFormatter()
        let value = formatter.string(from: 1900)
        
        XCTAssertEqual(value, "1,9K")
    }
    
    func test_thousandsFormat() {
        let formatter = MastodonMetricFormatter()
        let value = formatter.string(from: 1234)
        
        XCTAssertEqual(value, "1,2K")
    }
    
    func test_sixThousandsFormat() {
        let formatter = MastodonMetricFormatter()
        let value = formatter.string(from: 6666)
        
        XCTAssertEqual(value, "6,7K")
    }
    
    func test_millionsFormat_oneTwoThreeMillion() {
        let formatter = MastodonMetricFormatter()
        let value = formatter.string(from: 1_234_567)
        
        XCTAssertEqual(value, "1,2M")
    }
    
    func test_millionsFormat_exactlyTenMillion() {
        let formatter = MastodonMetricFormatter()
        let value = formatter.string(from: 10_000_000)
        
        XCTAssertEqual(value, "10M")
    }
    
    func test_millionsFormat_twelveOneTwoThreeMillion() {
        let formatter = MastodonMetricFormatter()
        let value = formatter.string(from: 12_345_789)
        
        XCTAssertEqual(value, "12M")
    }
    
    func test_billionsFormat() {
        let formatter = MastodonMetricFormatter()
        let value = formatter.string(from: 10_000_000_000)
        
        XCTAssertEqual(value, "10B")
    }
    
    func test_billionsFormat_oneTwoThreeBillion() {
        let formatter = MastodonMetricFormatter()
        let value = formatter.string(from: 12_345_678_912)
        
        XCTAssertEqual(value, "12B")
    }
    
    func test_trillionsFormat() {
        let formatter = MastodonMetricFormatter()
        let value = formatter.string(from: 10_000_000_000_000)
        
        XCTAssertEqual(value, "10T")
    }
    
    func test_trillionsFormat_oneTwoThreeTrillion() {
        let formatter = MastodonMetricFormatter()
        let value = formatter.string(from: 12_345_678_912_345)
        
        XCTAssertEqual(value, "12T")
    }
    
    func test_trillionsFormat_oneTwoThree_youGottaBeKiddinMeTrillion() {
        let formatter = MastodonMetricFormatter()
        let value = formatter.string(from: 12_345_678_912_345_678)
        
        XCTAssertEqual(value, "12346T")
    }
    
    func test_trillionsFormat_oneTwoThree_lastDigitBeforeIntegerOverflowTrillion() {
        let formatter = MastodonMetricFormatter()
        let value = formatter.string(from: 12_345_678_912_345_678_91)
        
        XCTAssertEqual(value, "1234568T")
    }
}
