Verify distribution uniformity/Naive: Difference between revisions

→‎{{header|Ada}}: Added Ada version
(→‎{{header|Ada}}: Added Ada version)
Line 17:
See also:
*[[Verify distribution uniformity/Chi-squared test]]
 
=={{header|Ada}}==
 
<lang Ada>with Ada.Numerics.Discrete_Random, Ada.Text_IO;
 
procedure Naive_Random is
 
type M_1000 is mod 1000;
package Rand is new Ada.Numerics.Discrete_Random(M_1000);
Gen: Rand.Generator;
 
procedure Perform(Modulus: Positive; Expected, Margin: Natural;
Passed: out boolean) is
Low: Natural := (100-Margin) * Expected/100;
High: Natural := (100+Margin) * Expected/100;
Buckets: array(0 .. Modulus-1) of Natural := (others => 0);
Index: Natural;
begin
for I in 1 .. Expected * Modulus loop
Index := Integer(Rand.Random(Gen)) mod Modulus;
Buckets(Index) := Buckets(Index) + 1;
end loop;
Passed := True;
for I in Buckets'Range loop
Ada.Text_IO.Put("Bucket" & Integer'Image(I+1) & ":" &
Integer'Image(Buckets(I)));
if Buckets(I) < Low or else Buckets(I) > High then
Ada.Text_IO.Put_Line(" (failed)");
Passed := False;
else
Ada.Text_IO.Put_Line(" (passed)");
end if;
end loop;
Ada.Text_IO.New_Line;
end Perform;
 
Number_Of_Buckets: Positive := Natural'Value(Ada.Text_IO.Get_Line);
Expected_Per_Bucket: Natural := Natural'Value(Ada.Text_IO.Get_Line);
Margin_In_Percent: Natural := Natural'Value(Ada.Text_IO.Get_Line);
OK: Boolean;
 
begin
Ada.Text_IO.Put_Line( "Buckets:" & Integer'Image(Number_Of_Buckets) &
", Expected:" & Integer'Image(Expected_Per_Bucket) &
", Margin:" & Integer'Image(Margin_In_Percent));
Rand.Reset(Gen);
 
Perform(Modulus => Number_Of_Buckets,
Expected => Expected_Per_Bucket,
Margin => Margin_In_Percent,
Passed => OK);
 
Ada.Text_IO.Put_Line("Test Passed? (" & Boolean'Image(OK) & ")");
end Naive_Random;</lang>
 
Sample run 1 (all buckets good):<pre>7
1000
3
Buckets: 7, Expected: 1000, Margin: 3
Bucket 1: 1006 (passed)
Bucket 2: 1030 (passed)
Bucket 3: 997 (passed)
Bucket 4: 985 (passed)
Bucket 5: 976 (passed)
Bucket 6: 1024 (passed)
Bucket 7: 982 (passed)
 
Test Passed? (TRUE)</pre>
 
Sample run 2 (some buckets too large / to small):<pre>7
1000
3
Buckets: 7, Expected: 1000, Margin: 3
Bucket 1: 1034 (failed)
Bucket 2: 985 (passed)
Bucket 3: 1025 (passed)
Bucket 4: 933 (failed)
Bucket 5: 1000 (passed)
Bucket 6: 1016 (passed)
Bucket 7: 1007 (passed)
 
Test Passed? (FALSE)</pre>
 
=={{header|AutoHotkey}}==
Anonymous user