// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2016 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See http://swift.org/LICENSE.txt for license information
// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//



#if DEPLOYMENT_RUNTIME_OBJC || os(Linux)
    import Foundation
    import XCTest
#else
    import SwiftFoundation
    import SwiftXCTest
#endif



class TestByteCountFormatter : XCTestCase {
    
    static var allTests: [(String, (TestByteCountFormatter) -> () throws -> Void)] {
        return [
            ("test_DefaultValues", test_DefaultValues),
            ("test_zeroBytes", test_zeroBytes),
            ("test_oneByte", test_oneByte),
            ("test_allowedUnitsKBGB", test_allowedUnitsKBGB),
            ("test_allowedUnitsMBGB", test_allowedUnitsMBGB),
            ("test_adaptiveFalseAllowedUnitsKBMBGB", test_adaptiveFalseAllowedUnitsKBMBGB),
            ("test_allowedUnitsKBMBGB", test_allowedUnitsKBMBGB),
            ("test_allowedUnitsBytesGB", test_allowedUnitsBytesGB),
            ("test_allowedUnitsGB", test_allowedUnitsGB),
            ("test_adaptiveFalseAllowedUnitsGB", test_adaptiveFalseAllowedUnitsGB),
            ("test_numberOnly", test_numberOnly),
            ("test_unitOnly", test_unitOnly),
            ("test_isAdaptiveFalse", test_isAdaptiveFalse),
            ("test_isAdaptiveTrue", test_isAdaptiveTrue),
            ("test_zeroPadsFractionDigitsTrue", test_zeroPadsFractionDigitsTrue),
            ("test_isAdaptiveFalseZeroPadsFractionDigitsTrue", test_isAdaptiveFalseZeroPadsFractionDigitsTrue),
            ("test_countStyleDecimal", test_countStyleDecimal),
            ("test_countStyleBinary", test_countStyleBinary),
            ("test_largeByteValues", test_largeByteValues),
            ("test_negativeByteValues", test_negativeByteValues)
            
        ]
    }
    
    func test_DefaultValues() {
        let formatter = ByteCountFormatter()
        XCTAssertEqual(formatter.allowedUnits, [])
        XCTAssertEqual(formatter.countStyle, ByteCountFormatter.CountStyle.file)
        XCTAssertEqual(formatter.allowsNonnumericFormatting, true)
        XCTAssertEqual(formatter.includesUnit, true)
        XCTAssertEqual(formatter.includesCount, true)
        XCTAssertEqual(formatter.includesActualByteCount, false)
        XCTAssertEqual(formatter.isAdaptive, true)
        XCTAssertEqual(formatter.zeroPadsFractionDigits, false)
        XCTAssertEqual(formatter.formattingContext, Formatter.Context.unknown)
    }
    
    func test_zeroBytes() {
        let formatter = ByteCountFormatter()
        
        XCTAssertEqual(formatter.string(fromByteCount: 0), "Zero KB")
        
        formatter.allowedUnits = .useGB
        XCTAssertEqual(formatter.string(fromByteCount: 0), "Zero KB")
        
        formatter.allowedUnits = []
        formatter.allowsNonnumericFormatting = false
        XCTAssertEqual(formatter.string(fromByteCount: 0), "0 bytes")
        
        formatter.allowedUnits = .useGB
        XCTAssertEqual(formatter.string(fromByteCount: 0), "0 GB")
    }
    
    func test_oneByte() {
        let formatter = ByteCountFormatter()
        
        XCTAssertEqual(formatter.string(fromByteCount: 1), "1 byte")
        
        formatter.allowedUnits = .useKB
        XCTAssertEqual(formatter.string(fromByteCount: 1), "0 KB")
        
        let unitsToUse: ByteCountFormatter.Units = [.useKB, .useGB]
        formatter.allowedUnits = unitsToUse
        XCTAssertEqual(formatter.string(fromByteCount: 1), "0 KB")
        
        formatter.allowedUnits = .useGB
        XCTAssertEqual(formatter.string(fromByteCount: 1), "0 GB")
        
        formatter.allowedUnits = []
        formatter.isAdaptive = false
        XCTAssertEqual(formatter.string(fromByteCount: 1), "1 byte")
        
        formatter.allowedUnits = .useKB
        XCTAssertEqual(formatter.string(fromByteCount: 1), "0.001 KB")
        
        formatter.allowedUnits = unitsToUse
        XCTAssertEqual(formatter.string(fromByteCount: 1), "0.001 KB")
        
        formatter.allowedUnits = .useGB
        XCTAssertEqual(formatter.string(fromByteCount: 1), "0.000000001 GB")
        
    }
    
    func test_allowedUnitsKBGB() {
        let formatter = ByteCountFormatter()
        formatter.allowedUnits = [.useKB, .useGB]
        
        XCTAssertEqual(formatter.string(fromByteCount: 550000000), "550,000 KB")
        XCTAssertEqual(formatter.string(fromByteCount: 5500000000), "5.5 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 55000000000), "55 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 550000000000), "550 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 5500000000000), "5,500 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 55000000000000), "55,000 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 550000000000000), "550,000 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 5500000000000000), "5,500,000 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 55000000000000000), "55,000,000 GB")
    }
    
    func test_allowedUnitsMBGB() {
        let formatter = ByteCountFormatter()
        formatter.allowedUnits = [.useMB, .useGB]
        
        XCTAssertEqual(formatter.string(fromByteCount: 550000000), "550 MB")
        XCTAssertEqual(formatter.string(fromByteCount: 5500000000), "5.5 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 55000000000), "55 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 550000000000), "550 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 5500000000000), "5,500 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 55000000000000), "55,000 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 550000000000000), "550,000 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 5500000000000000), "5,500,000 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 55000000000000000), "55,000,000 GB")
    }
    
    func test_adaptiveFalseAllowedUnitsKBMBGB() {
        let formatter = ByteCountFormatter()
        formatter.allowedUnits = [.useKB, .useMB, .useGB]
        formatter.isAdaptive = false
        XCTAssertEqual(formatter.string(fromByteCount: 55), "0.055 KB")
        XCTAssertEqual(formatter.string(fromByteCount: 550), "0.55 KB")
        XCTAssertEqual(formatter.string(fromByteCount: 5500), "5.5 KB")
        XCTAssertEqual(formatter.string(fromByteCount: 55000), "55 KB")
        XCTAssertEqual(formatter.string(fromByteCount: 550000), "550 KB")
        XCTAssertEqual(formatter.string(fromByteCount: 5500000), "5.5 MB")
        XCTAssertEqual(formatter.string(fromByteCount: 55000000), "55 MB")
        XCTAssertEqual(formatter.string(fromByteCount: 550000000), "550 MB")
        XCTAssertEqual(formatter.string(fromByteCount: 5500000000), "5.5 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 55000000000), "55 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 550000000000), "550 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 5500000000000), "5,500 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 55000000000000), "55,000 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 550000000000000), "550,000 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 5500000000000000), "5,500,000 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 55000000000000000), "55,000,000 GB")
    }
    
    func test_allowedUnitsKBMBGB() {
        let formatter = ByteCountFormatter()
        formatter.allowedUnits = [.useKB, .useMB, .useGB]
        XCTAssertEqual(formatter.string(fromByteCount: 55), "0 KB")
        XCTAssertEqual(formatter.string(fromByteCount: 550), "1 KB")
        XCTAssertEqual(formatter.string(fromByteCount: 5500), "6 KB")
        XCTAssertEqual(formatter.string(fromByteCount: 55000), "55 KB")
        XCTAssertEqual(formatter.string(fromByteCount: 550000), "550 KB")
        XCTAssertEqual(formatter.string(fromByteCount: 5500000), "5.5 MB")
        XCTAssertEqual(formatter.string(fromByteCount: 55000000), "55 MB")
        XCTAssertEqual(formatter.string(fromByteCount: 550000000), "550 MB")
        XCTAssertEqual(formatter.string(fromByteCount: 5500000000), "5.5 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 55000000000), "55 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 550000000000), "550 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 5500000000000), "5,500 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 55000000000000), "55,000 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 550000000000000), "550,000 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 5500000000000000), "5,500,000 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 55000000000000000), "55,000,000 GB")
    }
    
    func test_allowedUnitsBytesGB() {
        let formatter = ByteCountFormatter()
        formatter.allowedUnits = [.useBytes, .useGB]
        XCTAssertEqual(formatter.string(fromByteCount: 55), "55 bytes")
        XCTAssertEqual(formatter.string(fromByteCount: 550), "550 bytes")
        XCTAssertEqual(formatter.string(fromByteCount: 5500), "5,500 bytes")
        XCTAssertEqual(formatter.string(fromByteCount: 55000), "55,000 bytes")
        XCTAssertEqual(formatter.string(fromByteCount: 550000), "550,000 bytes")
        XCTAssertEqual(formatter.string(fromByteCount: 5500000), "5,500,000 bytes")
        XCTAssertEqual(formatter.string(fromByteCount: 55000000), "55,000,000 bytes")
        XCTAssertEqual(formatter.string(fromByteCount: 550000000), "550,000,000 bytes")
        XCTAssertEqual(formatter.string(fromByteCount: 5500000000), "5.5 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 55000000000), "55 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 550000000000), "550 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 5500000000000), "5,500 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 55000000000000), "55,000 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 550000000000000), "550,000 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 5500000000000000), "5,500,000 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 55000000000000000), "55,000,000 GB")
    }
    func test_allowedUnitsGB() {
        let formatter = ByteCountFormatter()
        formatter.allowedUnits = .useGB
        XCTAssertEqual(formatter.string(fromByteCount: 55), "0 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 550), "0 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 5500), "0 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 55000), "0 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 550000), "0 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 5500000), "0.01 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 55000000), "0.06 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 550000000), "0.55 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 5500000000), "5.5 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 55000000000), "55 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 550000000000), "550 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 5500000000000), "5,500 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 55000000000000), "55,000 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 550000000000000), "550,000 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 5500000000000000), "5,500,000 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 55000000000000000), "55,000,000 GB")
    }
    func test_adaptiveFalseAllowedUnitsGB() {
        let formatter = ByteCountFormatter()
        formatter.allowedUnits = .useGB
        formatter.isAdaptive = false
        XCTAssertEqual(formatter.string(fromByteCount: 55), "0.000000055 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 550), "0.00000055 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 5500), "0.0000055 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 55000), "0.000055 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 550000), "0.00055 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 5500000), "0.0055 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 55000000), "0.055 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 550000000), "0.55 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 5500000000), "5.5 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 55000000000), "55 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 550000000000), "550 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 5500000000000), "5,500 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 55000000000000), "55,000 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 550000000000000), "550,000 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 5500000000000000), "5,500,000 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 55000000000000000), "55,000,000 GB")
    }
    
    func test_numberOnly() {
        let formatter = ByteCountFormatter()
        formatter.includesUnit = false
        
        XCTAssertEqual(formatter.string(fromByteCount: 0), "0")
        XCTAssertEqual(formatter.string(fromByteCount: 1), "1")
        XCTAssertEqual(formatter.string(fromByteCount: -1), "-1")
        XCTAssertEqual(formatter.string(fromByteCount: 550000000), "550")
        
        formatter.allowedUnits = .useYBOrHigher
        XCTAssertEqual(formatter.string(fromByteCount: 0), "0")
        XCTAssertEqual(formatter.string(fromByteCount: 1), "0")
        
        formatter.allowedUnits = .useKB
        XCTAssertEqual(formatter.string(fromByteCount: 550000000), "550,000")
        
        formatter.allowedUnits = [.useKB, .useGB]
        XCTAssertEqual(formatter.string(fromByteCount: 550000000), "550,000")
        
        formatter.allowedUnits = .useGB
        XCTAssertEqual(formatter.string(fromByteCount: 550000000), "0.55")
        
        formatter.allowedUnits = [.useMB, .useGB]
        XCTAssertEqual(formatter.string(fromByteCount: 550000000), "550")
    }
    
    func test_unitOnly() {
        let formatter = ByteCountFormatter()
        formatter.includesCount = false
        
        XCTAssertEqual(formatter.string(fromByteCount: 0), "bytes")
        XCTAssertEqual(formatter.string(fromByteCount: 1), "byte")
        XCTAssertEqual(formatter.string(fromByteCount: -1), "byte")
        XCTAssertEqual(formatter.string(fromByteCount: 550000000), "MB")
        
        formatter.allowedUnits = .useYBOrHigher
        XCTAssertEqual(formatter.string(fromByteCount: 0), "YB")
        XCTAssertEqual(formatter.string(fromByteCount: 1), "YB")
        
        formatter.allowedUnits = .useKB
        XCTAssertEqual(formatter.string(fromByteCount: 550000000), "KB")
        
        formatter.allowedUnits = [.useKB, .useGB]
        XCTAssertEqual(formatter.string(fromByteCount: 550000000), "KB")
        
        formatter.allowedUnits = .useGB
        XCTAssertEqual(formatter.string(fromByteCount: 550000000), "GB")
        
        formatter.allowedUnits = [.useMB, .useGB]
        XCTAssertEqual(formatter.string(fromByteCount: 550000000), "MB")
    }
    
    func test_isAdaptiveFalse() {
        let formatter = ByteCountFormatter()
        formatter.isAdaptive = false
        
        XCTAssertEqual(formatter.string(fromByteCount: 499), "499 bytes")
        XCTAssertEqual(formatter.string(fromByteCount: 900), "900 bytes")
        XCTAssertEqual(formatter.string(fromByteCount: 999), "999 bytes")
        XCTAssertEqual(formatter.string(fromByteCount: 1000), "1 KB")
        XCTAssertEqual(formatter.string(fromByteCount: 1023), "1.02 KB")
        XCTAssertEqual(formatter.string(fromByteCount: 1024), "1.02 KB")
        XCTAssertEqual(formatter.string(fromByteCount: 11999), "12 KB")
        XCTAssertEqual(formatter.string(fromByteCount: 900000), "900 KB")
        XCTAssertEqual(formatter.string(fromByteCount: 12345678), "12.3 MB")
        XCTAssertEqual(formatter.string(fromByteCount: 123456789), "123 MB")
        XCTAssertEqual(formatter.string(fromByteCount: 1234567898), "1.23 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 12345678987), "12.3 GB")
    }
    
    func test_isAdaptiveTrue() {
        let formatter = ByteCountFormatter()
        
        XCTAssertEqual(formatter.string(fromByteCount: 499), "499 bytes")
        XCTAssertEqual(formatter.string(fromByteCount: 900), "900 bytes")
        XCTAssertEqual(formatter.string(fromByteCount: 999), "999 bytes")
        XCTAssertEqual(formatter.string(fromByteCount: 1000), "1 KB")
        XCTAssertEqual(formatter.string(fromByteCount: 1023), "1 KB")
        XCTAssertEqual(formatter.string(fromByteCount: 1024), "1 KB")
        XCTAssertEqual(formatter.string(fromByteCount: 11999), "12 KB")
        XCTAssertEqual(formatter.string(fromByteCount: 900000), "900 KB")
        XCTAssertEqual(formatter.string(fromByteCount: 12345678), "12.3 MB")
        XCTAssertEqual(formatter.string(fromByteCount: 123456789), "123.5 MB")
        XCTAssertEqual(formatter.string(fromByteCount: 1234567898), "1.23 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 12345678987), "12.35 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 999900000), "999.9 MB")
    }
    
    func test_zeroPadsFractionDigitsTrue() {
        let formatter = ByteCountFormatter()
        formatter.zeroPadsFractionDigits = true
        
        XCTAssertEqual(formatter.string(fromByteCount: 1), "1 byte")
        XCTAssertEqual(formatter.string(fromByteCount: 12), "12 bytes")
        XCTAssertEqual(formatter.string(fromByteCount: 499), "499 bytes")
        XCTAssertEqual(formatter.string(fromByteCount: 900), "900 bytes")
        XCTAssertEqual(formatter.string(fromByteCount: 999), "999 bytes")
        XCTAssertEqual(formatter.string(fromByteCount: 1000), "1 KB")
        XCTAssertEqual(formatter.string(fromByteCount: 1023), "1 KB")
        XCTAssertEqual(formatter.string(fromByteCount: 1024), "1 KB")
        XCTAssertEqual(formatter.string(fromByteCount: 11999), "12 KB")
        XCTAssertEqual(formatter.string(fromByteCount: 900000), "900 KB")
        XCTAssertEqual(formatter.string(fromByteCount: 12345678), "12.3 MB")
        XCTAssertEqual(formatter.string(fromByteCount: 123456789), "123.5 MB")
        XCTAssertEqual(formatter.string(fromByteCount: 1234567898), "1.23 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 12345678987), "12.35 GB")
    }
    
    func test_isAdaptiveFalseZeroPadsFractionDigitsTrue() {
        let formatter = ByteCountFormatter()
        formatter.zeroPadsFractionDigits = true
        formatter.isAdaptive = false
        
        XCTAssertEqual(formatter.string(fromByteCount: 1), "1 byte")
        XCTAssertEqual(formatter.string(fromByteCount: 12), "12 bytes")
        XCTAssertEqual(formatter.string(fromByteCount: 499), "499 bytes")
        XCTAssertEqual(formatter.string(fromByteCount: 900), "900 bytes")
        XCTAssertEqual(formatter.string(fromByteCount: 999), "999 bytes")
        XCTAssertEqual(formatter.string(fromByteCount: 1000), "1.00 KB")
        XCTAssertEqual(formatter.string(fromByteCount: 1023), "1.02 KB")
        XCTAssertEqual(formatter.string(fromByteCount: 1024), "1.02 KB")
        XCTAssertEqual(formatter.string(fromByteCount: 11999), "12.0 KB")
        XCTAssertEqual(formatter.string(fromByteCount: 900000), "900 KB")
        XCTAssertEqual(formatter.string(fromByteCount: 12345678), "12.3 MB")
        XCTAssertEqual(formatter.string(fromByteCount: 123456789), "123 MB")
        XCTAssertEqual(formatter.string(fromByteCount: 1234567898), "1.23 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 12345678987), "12.3 GB")
    }
    
    func test_countStyleDecimal() {
        let formatter = ByteCountFormatter()
        formatter.countStyle = .decimal
        
        XCTAssertEqual(formatter.string(fromByteCount: 499), "499 bytes")
        XCTAssertEqual(formatter.string(fromByteCount: 900), "900 bytes")
        XCTAssertEqual(formatter.string(fromByteCount: 999), "999 bytes")
        XCTAssertEqual(formatter.string(fromByteCount: 1000), "1 KB")
        XCTAssertEqual(formatter.string(fromByteCount: 1023), "1 KB")
        XCTAssertEqual(formatter.string(fromByteCount: 1024), "1 KB")
        XCTAssertEqual(formatter.string(fromByteCount: 11999), "12 KB")
        XCTAssertEqual(formatter.string(fromByteCount: 900000), "900 KB")
        XCTAssertEqual(formatter.string(fromByteCount: 12345678), "12.3 MB")
        XCTAssertEqual(formatter.string(fromByteCount: 123456789), "123.5 MB")
        XCTAssertEqual(formatter.string(fromByteCount: 1234567898), "1.23 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 12345678987), "12.35 GB")
    }
    
    func test_countStyleBinary() {
        let formatter = ByteCountFormatter()
        formatter.countStyle = .binary
        
        XCTAssertEqual(formatter.string(fromByteCount: 499), "499 bytes")
        XCTAssertEqual(formatter.string(fromByteCount: 900), "900 bytes")
        XCTAssertEqual(formatter.string(fromByteCount: 999), "999 bytes")
        XCTAssertEqual(formatter.string(fromByteCount: 1000), "1,000 bytes")
        XCTAssertEqual(formatter.string(fromByteCount: 1023), "1,023 bytes")
        XCTAssertEqual(formatter.string(fromByteCount: 1024), "1 KB")
        XCTAssertEqual(formatter.string(fromByteCount: 11999), "12 KB")
        XCTAssertEqual(formatter.string(fromByteCount: 900000), "879 KB")
        XCTAssertEqual(formatter.string(fromByteCount: 12345678), "11.8 MB")
        XCTAssertEqual(formatter.string(fromByteCount: 123456789), "117.7 MB")
        XCTAssertEqual(formatter.string(fromByteCount: 1234567898), "1.15 GB")
        XCTAssertEqual(formatter.string(fromByteCount: 12345678987), "11.5 GB")
    }
    
    func test_largeByteValues() {
        let formatter = ByteCountFormatter()
        
        formatter.allowedUnits = .useTB
        XCTAssertEqual(formatter.string(fromByteCount: 9223372036854775807), "9,223,372.04 TB")
        
        formatter.allowedUnits = .useEB
        XCTAssertEqual(formatter.string(fromByteCount: 9223372036854775807), "9.22 EB")
        
        formatter.allowedUnits = .useZB
        XCTAssertEqual(formatter.string(fromByteCount: 9223372036854775807), "0.01 ZB")
        
        formatter.allowedUnits = .useYBOrHigher
        XCTAssertEqual(formatter.string(fromByteCount: 9223372036854775807), "0 YB")
        
        formatter.allowedUnits = .useBytes
        XCTAssertEqual(formatter.string(fromByteCount: 0x7FFFFFFFFFFFFFFF), "9,223,372,036,854,775,807 bytes")
        
        formatter.isAdaptive = false
        formatter.allowedUnits = .useTB
        XCTAssertEqual(formatter.string(fromByteCount: 9223372036854775807), "9,223,372 TB")
        
        formatter.allowedUnits = .useEB
        XCTAssertEqual(formatter.string(fromByteCount: 9223372036854775807), "9.22 EB")
        
        formatter.allowedUnits = .useZB
        XCTAssertEqual(formatter.string(fromByteCount: 9223372036854775807), "0.00922 ZB")
        
        formatter.allowedUnits = .useYBOrHigher
        XCTAssertEqual(formatter.string(fromByteCount: 9223372036854775807), "0.00000922 YB")
    }
    
    func test_negativeByteValues() {
        let formatter = ByteCountFormatter()
        
        XCTAssertEqual(formatter.string(fromByteCount: -1), "-1 byte")
        XCTAssertEqual(formatter.string(fromByteCount: -2), "-2 bytes")
        XCTAssertEqual(formatter.string(fromByteCount: -1023), "-1 KB")
        XCTAssertEqual(formatter.string(fromByteCount: -1234567898), "-1.23 GB")
        XCTAssertEqual(formatter.string(fromByteCount: -12345678987), "-12.35 GB")
        
        formatter.countStyle = .binary
        XCTAssertEqual(formatter.string(fromByteCount: -999), "-999 bytes")
        XCTAssertEqual(formatter.string(fromByteCount: -1000), "-1,000 bytes")
        XCTAssertEqual(formatter.string(fromByteCount: -1023), "-1,023 bytes")
        XCTAssertEqual(formatter.string(fromByteCount: -1024), "-1 KB")
        XCTAssertEqual(formatter.string(fromByteCount: -12345678987), "-11.5 GB")
        
        formatter.allowedUnits = .useGB
        formatter.countStyle = .file
        XCTAssertEqual(formatter.string(fromByteCount: -1), "-0 GB")
        XCTAssertEqual(formatter.string(fromByteCount: -5000), "-0 GB")
        XCTAssertEqual(formatter.string(fromByteCount: -50000), "-0 GB")
        XCTAssertEqual(formatter.string(fromByteCount: -500000), "-0 GB")
        XCTAssertEqual(formatter.string(fromByteCount: -5000000), "-0.01 GB")
        XCTAssertEqual(formatter.string(fromByteCount: -50000000), "-0.05 GB")
        XCTAssertEqual(formatter.string(fromByteCount: -500000000), "-0.5 GB")
        
        formatter.allowedUnits = .useTB
        XCTAssertEqual(formatter.string(fromByteCount: Int64.min), "-9,223,372.04 TB")
        
        formatter.allowedUnits = .useEB
        XCTAssertEqual(formatter.string(fromByteCount: Int64.min), "-9.22 EB")
        
        formatter.allowedUnits = .useZB
        XCTAssertEqual(formatter.string(fromByteCount: Int64.min), "-0.01 ZB")
        
        formatter.allowedUnits = .useYBOrHigher
        XCTAssertEqual(formatter.string(fromByteCount: Int64.min), "-0 YB")
    }
}
