require 'Module:BDD'()
local p = require('Module:Timing')

describe({en='statistical analysis', nb='statistisk analyse'}, function()
	context({en='for a constant serie', nb='for en konstant serie'}, function()
		it({en='should give mean', nb='skal finnes middelverdi'}, function()
			expect('"p.stats"', p.stats({ -1, -1, -1 })[1]):toBe( -1 )
			expect('"p.stats"', p.stats({ 0, 0 })[1]):toBe( 0 )
			expect('"p.stats"', p.stats({ 2, 2, 2, 2 })[1]):toBe( 2 )
		end)
		it({en='should give variance', nb='skal finnes varians'}, function()
			expect('"p.stats"', p.stats({ -1, -1, -1 })[2]):toBe( 0 )
			expect('"p.stats"', p.stats({ 0, 0 })[2]):toBe( 0 )
			expect('"p.stats"', p.stats({ 2, 2, 2, 2 })[2]):toBe( 0 )
		end)
	end)
	context({en='for an alternating serie', nb='for en vekslende serie'}, function()
		it({en='should give mean', nb='skal finnes middelverdi'}, function()
			expect('"p.stats"', p.stats({ -1, -1, 1, 1 })[1]):toBe( 0 )
			expect('"p.stats"', p.stats({ 2, 2, 4, 4 })[1]):toBe( 3 )
		end)
		it({en='should give variance', nb='skal finnes varians'}, function()
			expect('"p.stats"', p.stats({ -1, -1, 1, 1 })[2]):toBe( 1 )
			expect('"p.stats"', p.stats({ 2, 2, 4, 4 })[2]):toBe( 1 )
		end)
	end)
end)

describe({en='difference against a baseline', nb='forskjell mot en grunnlinje'}, function()
	context({en='for equal pairs', nb='for like par'}, function()
		it({en='should give mean', nb='skal finnes middelverdi'}, function()
			expect('"p.combine"', p.combine({ -1, 0 }, { -1, 0 })[1]):toBe( 0 )
			expect('"p.combine"', p.combine({ 2, 1 }, { 2, 1 })[1]):toBe( 0 )
		end)
		it({en='should give variance', nb='skal finnes varians'}, function()
			expect('"p.combine"', p.combine({ -1, 0 }, { -1, 0 })[2]):toBe( 0 )
			expect('"p.combine"', p.combine({ 2, 1 }, { 2, 1 })[2]):toBe( math.pow(2, 0.5) )
		end)
	end)
end)

return result('Module:Timing')