//
// Copyright 2024 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
//

import XCTest
@testable import SignalServiceKit

final class RandomnessTest: XCTestCase {

    func testGenerateRandomBytes() {
        let data = Randomness.generateRandomBytes(32)
        XCTAssertEqual(data.count, 32)

        // this is not technically impossible, but exceedingly unlikely to occur if the method is implemented correctly p=2^-256
        XCTAssertFalse(data.allSatisfy { $0 == 0 })

        // ensure we don't crash on this nonsense case
        let nonsense = Randomness.generateRandomBytes(0)
        XCTAssertEqual(nonsense.count, 0)

        // check that calls are returning things that are different
        // once again this is not technically impossible just highly improbable to fail with a correct implementation
        let data2 = Randomness.generateRandomBytes(16)
        XCTAssertEqual(data2.count, 16)
        let data3 = Randomness.generateRandomBytes(16)
        XCTAssertEqual(data3.count, 16)
        XCTAssertNotEqual(data2, data3)
    }
}
