SampleData.swift 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import Foundation
  2. enum SampleData {
  3. private static var baseComponents: DateComponents = {
  4. var dateComponents = DateComponents()
  5. dateComponents.year = 2021
  6. dateComponents.month = 3
  7. dateComponents.day = 8
  8. dateComponents.timeZone = TimeZone(abbreviation: "MSK")
  9. dateComponents.hour = 8
  10. return dateComponents
  11. }()
  12. private static func generateDate(baseDateComponents: DateComponents, minutes: Int) -> Date {
  13. var localComponents = baseDateComponents
  14. localComponents.minute = minutes
  15. let userCalendar = Calendar(identifier: .gregorian)
  16. return userCalendar.date(from: localComponents)!
  17. }
  18. private static func generateGlucoseStream(startingPoint: Int, length: Int, amount: Int, direction: Int) -> [Int] {
  19. // Downwards
  20. if direction == 0 {
  21. return (1 ... length).map { startingPoint - $0 * amount }
  22. }
  23. return (1 ... length).map { startingPoint + $0 * amount }
  24. }
  25. static var sampleData: [BloodGlucose] {
  26. let mediumUp = generateGlucoseStream(startingPoint: 77, length: 80, amount: 2, direction: 1)
  27. let fastUp = generateGlucoseStream(startingPoint: mediumUp.last!, length: 20, amount: 5, direction: 1)
  28. let fastDown = generateGlucoseStream(startingPoint: fastUp.last!, length: 12, amount: 13, direction: 0)
  29. let mediumDown = generateGlucoseStream(startingPoint: fastDown.last!, length: 33, amount: 3, direction: 0)
  30. let slowUp = generateGlucoseStream(startingPoint: mediumDown.last!, length: 144, amount: 1, direction: 1)
  31. let glucose = mediumUp + fastUp + fastDown + mediumDown + slowUp
  32. let normalTime = (0 ... 278).map { generateDate(baseDateComponents: baseComponents, minutes: $0 * 5) }
  33. let tenMinutes = (279 ... 288).map { generateDate(baseDateComponents: baseComponents, minutes: $0 * 30) }
  34. let time = normalTime + tenMinutes
  35. return zip(glucose, time).map { BloodGlucose(
  36. sgv: $0,
  37. direction: nil,
  38. date: UInt64($1.timeIntervalSince1970),
  39. dateString: $1,
  40. filtered: nil,
  41. noise: nil,
  42. glucose: nil
  43. ) }
  44. }
  45. }