tstats.nim 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. discard """
  2. matrix: "--mm:refc; --mm:orc"
  3. """
  4. import std/[stats, assertions]
  5. import std/math
  6. func `~=`(x, y: float32): bool =
  7. math.almostEqual(x, y)
  8. template main() =
  9. var rs: RunningStat
  10. rs.push(@[1.0, 2.0, 1.0, 4.0, 1.0, 4.0, 1.0, 2.0])
  11. doAssert(rs.n == 8)
  12. doAssert rs.mean ~= 2.0
  13. doAssert rs.variance() ~= 1.5
  14. doAssert rs.varianceS() ~= 1.71428571
  15. doAssert rs.skewness() ~= 0.81649658
  16. doAssert rs.skewnessS() ~= 1.01835015
  17. doAssert rs.kurtosis() ~= -1.0
  18. doAssert rs.kurtosisS() ~= -0.7000000000000001
  19. var rs1, rs2: RunningStat
  20. rs1.push(@[1.0, 2.0, 1.0, 4.0])
  21. rs2.push(@[1.0, 4.0, 1.0, 2.0])
  22. let rs3 = rs1 + rs2
  23. doAssert rs3.variance ~= rs.variance
  24. doAssert rs3.skewness ~= rs.skewness
  25. doAssert rs3.kurtosis ~= rs.kurtosis
  26. rs1 += rs2
  27. doAssert rs1.variance ~= rs.variance
  28. doAssert rs1.skewness ~= rs.skewness
  29. doAssert rs1.kurtosis ~= rs.kurtosis
  30. rs1.clear()
  31. rs1.push(@[1.0, 2.2, 1.4, 4.9])
  32. doAssert rs1.sum ~= 9.5
  33. doAssert rs1.mean() ~= 2.375
  34. when not defined(cpu32):
  35. # XXX For some reason on 32bit CPUs these results differ
  36. var rr: RunningRegress
  37. rr.push(@[0.0, 1.0, 2.8, 3.0, 4.0], @[0.0, 1.0, 2.3, 3.0, 4.0])
  38. doAssert rr.slope() ~= 0.9695585996955861
  39. doAssert rr.intercept() ~= -0.03424657534246611
  40. doAssert rr.correlation() ~= 0.9905100362239381
  41. var rr1, rr2: RunningRegress
  42. rr1.push(@[0.0, 1.0], @[0.0, 1.0])
  43. rr2.push(@[2.8, 3.0, 4.0], @[2.3, 3.0, 4.0])
  44. let rr3 = rr1 + rr2
  45. doAssert rr3.correlation() ~= rr.correlation()
  46. doAssert rr3.slope() ~= rr.slope()
  47. doAssert rr3.intercept() ~= rr.intercept()
  48. block: # bug #18718
  49. var rs: RunningStat
  50. rs.push(-1.0)
  51. doAssert rs.max == -1.0
  52. static: main()
  53. main()