stats/spec/math/standard_deviation.cr

38 lines
1.3 KiB
Crystal

describe Math::StandardDeviation do
it "test variance & std dev explained" do
arr = [1, 2, 3, 4, 4]
mean = (4 + 4 + 3 + 2 + 1) / 5.0
variance = ((4 - mean)**2 + (4 - mean)**2 + (3 - mean)**2 + (2 - mean)**2 + (1 - mean)**2) / 5.0
standard_deviation = Math.sqrt(variance)
arr.mean.should eq(mean)
arr.variance.should eq(variance)
arr.standard_deviation.should eq(standard_deviation)
end
it "test big" do
arr = [BigInt.new(1), BigFloat.new(2), 3, 4.0, 4]
mean = (4 + 4 + 3 + 2 + 1) / 5.0
variance = ((4 - mean)**2 + (4 - mean)**2 + (3 - mean)**2 + (2 - mean)**2 + (1 - mean)**2) / 5.0
standard_deviation = Math.sqrt(variance)
arr.mean.should eq(mean)
arr.variance.should eq(variance)
arr.standard_deviation.should eq(standard_deviation)
end
it "test standard deviation without explanations" do
arr = [1, 5, 23, 2, 0, 0, 1]
arr.mean.round(2).should eq 4.57
arr.variance.round(2).should eq 59.10
arr.standard_deviation.round(2).should eq 7.69
[1.0, 2.0, 3.0].variance.round(4).should eq(0.6667)
[1.0, 2.0, 3.0].standard_deviation.round(4).should eq(0.8165)
end
it "test several special case" do
arr = [] of Int32
arr.variance.should eq 0.0
arr.standard_deviation.should eq 0.0
end
end