Serenity Operating System
at master 70 lines 2.2 kB view raw
1/* 2 * Copyright (c) 2023, the SerenityOS developers. 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#include <AK/Statistics.h> 8#include <LibTest/TestSuite.h> 9 10TEST_CASE(Statistics) 11{ 12 // Setup Test Data 13 AK::Statistics<double> odd_number_elements; 14 AK::Statistics<double> even_number_elements; 15 AK::Statistics<double> odd_number_elements_large; 16 AK::Statistics<double> even_number_elements_large; 17 18 odd_number_elements.add(5.0); 19 odd_number_elements.add(4.0); 20 odd_number_elements.add(3.0); 21 odd_number_elements.add(2.0); 22 odd_number_elements.add(1.0); 23 24 even_number_elements.add(6.0); 25 even_number_elements.add(5.0); 26 even_number_elements.add(4.0); 27 even_number_elements.add(3.0); 28 even_number_elements.add(2.0); 29 even_number_elements.add(1.0); 30 31 for (int i = 201; i > 0; i--) { 32 odd_number_elements_large.add(i); 33 } 34 35 for (int i = 360; i > 0; i--) { 36 even_number_elements_large.add(i); 37 } 38 39 // Sum 40 EXPECT_APPROXIMATE(odd_number_elements.sum(), 15.0); 41 EXPECT_APPROXIMATE(even_number_elements.sum(), 21.0); 42 43 // Average 44 EXPECT_APPROXIMATE(odd_number_elements.average(), 3.0); 45 EXPECT_APPROXIMATE(even_number_elements.average(), 3.5); 46 47 // Min 48 EXPECT_APPROXIMATE(odd_number_elements.min(), 1.0); 49 EXPECT_APPROXIMATE(even_number_elements.min(), 1.0); 50 51 // Max 52 EXPECT_APPROXIMATE(odd_number_elements.max(), 5.0); 53 EXPECT_APPROXIMATE(even_number_elements.max(), 6.0); 54 55 // Median 56 EXPECT_APPROXIMATE(odd_number_elements.median(), 3.0); 57 EXPECT_APPROXIMATE(even_number_elements.median(), 3.5); 58 EXPECT_APPROXIMATE(odd_number_elements_large.median(), 101.0); 59 EXPECT_APPROXIMATE(even_number_elements_large.median(), 180.5); 60 61 // The expected values for standard deviation and variance were calculated by my school issued scientific calculator 62 63 // Standard Deviation 64 EXPECT_APPROXIMATE(odd_number_elements.standard_deviation(), 1.4142135623731); 65 EXPECT_APPROXIMATE(even_number_elements.standard_deviation(), 1.7078251276599); 66 67 // Variance 68 EXPECT_APPROXIMATE(odd_number_elements.variance(), 2.0); 69 EXPECT_APPROXIMATE(even_number_elements.variance(), 2.9166666666667); 70}