WaveformGeneratorTests.swift 3.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. import XCTest
  2. @testable import MixBoard
  3. final class WaveformGeneratorTests: XCTestCase {
  4. // MARK: - WaveformSample Codable
  5. func testWaveformSampleCodable() throws {
  6. let sample = WaveformGenerator.WaveformSample(min: -0.5, max: 0.8)
  7. let data = try JSONEncoder().encode(sample)
  8. let decoded = try JSONDecoder().decode(WaveformGenerator.WaveformSample.self, from: data)
  9. XCTAssertEqual(decoded.min, -0.5, accuracy: 0.001)
  10. XCTAssertEqual(decoded.max, 0.8, accuracy: 0.001)
  11. }
  12. func testWaveformSampleArrayCodable() throws {
  13. let samples = [
  14. WaveformGenerator.WaveformSample(min: -1.0, max: 1.0),
  15. WaveformGenerator.WaveformSample(min: -0.3, max: 0.5),
  16. WaveformGenerator.WaveformSample(min: 0.0, max: 0.0),
  17. ]
  18. let data = try JSONEncoder().encode(samples)
  19. let decoded = try JSONDecoder().decode([WaveformGenerator.WaveformSample].self, from: data)
  20. XCTAssertEqual(decoded.count, 3)
  21. XCTAssertEqual(decoded[0].min, -1.0, accuracy: 0.001)
  22. XCTAssertEqual(decoded[1].max, 0.5, accuracy: 0.001)
  23. XCTAssertEqual(decoded[2].min, 0.0, accuracy: 0.001)
  24. }
  25. // MARK: - decodeCachedWaveform
  26. func testDecodeCachedWaveformValid() throws {
  27. let samples = [
  28. WaveformGenerator.WaveformSample(min: -0.7, max: 0.9),
  29. WaveformGenerator.WaveformSample(min: -0.2, max: 0.4),
  30. ]
  31. let data = try JSONEncoder().encode(samples)
  32. let decoded = WaveformGenerator.decodeCachedWaveform(from: data)
  33. XCTAssertNotNil(decoded)
  34. XCTAssertEqual(decoded?.count, 2)
  35. XCTAssertEqual(decoded![0].min, Float(-0.7), accuracy: Float(0.001))
  36. XCTAssertEqual(decoded![1].max, Float(0.4), accuracy: Float(0.001))
  37. }
  38. func testDecodeCachedWaveformInvalidData() {
  39. let garbage = Data([0x00, 0x01, 0xFF, 0xDE, 0xAD])
  40. let decoded = WaveformGenerator.decodeCachedWaveform(from: garbage)
  41. XCTAssertNil(decoded)
  42. }
  43. func testDecodeCachedWaveformEmptyArray() throws {
  44. let data = try JSONEncoder().encode([WaveformGenerator.WaveformSample]())
  45. let decoded = WaveformGenerator.decodeCachedWaveform(from: data)
  46. XCTAssertNotNil(decoded)
  47. XCTAssertEqual(decoded?.count, 0)
  48. }
  49. func testDecodeCachedWaveformEmptyData() {
  50. let decoded = WaveformGenerator.decodeCachedWaveform(from: Data())
  51. XCTAssertNil(decoded)
  52. }
  53. // MARK: - generateWaveform (error path — non-existent file)
  54. func testGenerateWaveformNonExistentFile() async {
  55. let track = Track(title: "Missing", filePath: "nonexistent/path/missing.mp3")
  56. do {
  57. _ = try await WaveformGenerator.generateWaveform(for: track)
  58. XCTFail("Expected an error for a non-existent file")
  59. } catch {
  60. // Expected — file not found
  61. }
  62. }
  63. // MARK: - WaveformSample values
  64. func testWaveformSampleNegativeValues() throws {
  65. let sample = WaveformGenerator.WaveformSample(min: -1.0, max: -0.1)
  66. let data = try JSONEncoder().encode(sample)
  67. let decoded = try JSONDecoder().decode(WaveformGenerator.WaveformSample.self, from: data)
  68. XCTAssertEqual(decoded.min, -1.0, accuracy: 0.001)
  69. XCTAssertEqual(decoded.max, -0.1, accuracy: 0.001)
  70. }
  71. func testWaveformSampleExtremeValues() throws {
  72. let sample = WaveformGenerator.WaveformSample(min: -Float.greatestFiniteMagnitude, max: Float.greatestFiniteMagnitude)
  73. let data = try JSONEncoder().encode(sample)
  74. let decoded = try JSONDecoder().decode(WaveformGenerator.WaveformSample.self, from: data)
  75. XCTAssertEqual(decoded.min, -Float.greatestFiniteMagnitude, accuracy: 1)
  76. XCTAssertEqual(decoded.max, Float.greatestFiniteMagnitude, accuracy: 1)
  77. }
  78. }