/*
 * SPDX-FileCopyrightText: Copyright 2021 - 2022 Arm Limited and/or its affiliates <open-source-office@arm.com>
   * SPDX-License-Identifier: Apache-2.0
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
#include "PlatformMath.hpp"
#include <catch.hpp>
#include <limits>
#include <numeric>

TEST_CASE("Test CosineF32")
{
    /*Test  Constants: */
    std::vector<double> inputA{
            0.0, 0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07, 0.08, 0.09, 0.1,
            0.11, 0.12, 0.13, 0.14, 0.15, 0.16, 0.17, 0.18, 0.19, 0.2, 0.21,
            0.22, 0.23, 0.24, 0.25, 0.26, 0.27, 0.28, 0.29, 0.3, 0.31, 0.32,
            0.33, 0.34, 0.35, 0.36, 0.37, 0.38, 0.39, 0.4, 0.41, 0.42, 0.43,
            0.44, 0.45, 0.46, 0.47, 0.48, 0.49, 0.5, 0.51, 0.52, 0.53, 0.54,
            0.55, 0.56, 0.57, 0.58, 0.59, 0.6, 0.61, 0.62, 0.63, 0.64, 0.65,
            0.66, 0.67, 0.68, 0.69, 0.7, 0.71, 0.72, 0.73, 0.74, 0.75, 0.76,
            0.77, 0.78, 0.79, 0.8, 0.81, 0.82, 0.83, 0.84, 0.85, 0.86, 0.87,
            0.88, 0.89, 0.9, 0.91, 0.92, 0.93, 0.94, 0.95, 0.96, 0.97, 0.98,
            0.99, 1.0
    };
    std::vector<double> expectedResult{
            1.0, 0.9995065603657316, 0.9980267284282716, 0.99556196460308,
            0.9921147013144779, 0.9876883405951378, 0.9822872507286887,
            0.9759167619387474, 0.9685831611286311, 0.9602936856769431,
            0.9510565162951535, 0.9408807689542255, 0.9297764858882515,
            0.9177546256839811, 0.9048270524660195, 0.8910065241883679,
            0.8763066800438636, 0.8607420270039436, 0.8443279255020151,
            0.8270805742745618, 0.8090169943749475, 0.7901550123756904,
            0.7705132427757893, 0.7501110696304596, 0.7289686274214116,
            0.7071067811865476, 0.6845471059286886, 0.6613118653236518,
            0.6374239897486896, 0.6129070536529766, 0.5877852522924731,
            0.5620833778521306, 0.5358267949789965, 0.5090414157503712,
            0.48175367410171516, 0.4539904997395468, 0.42577929156507266,
            0.39714789063478056, 0.3681245526846781, 0.3387379202452915,
            0.30901699437494745, 0.2789911060392295, 0.24868988716485496,
            0.2181432413965427, 0.18738131458572474, 0.15643446504023092,
            0.12533323356430426, 0.0941083133185145, 0.06279051952931353,
            0.031410759078128396, 6.123233995736766e-17, -0.03141075907812828,
            -0.0627905195293134, -0.09410831331851438, -0.12533323356430437,
            -0.15643446504023104, -0.18738131458572482, -0.21814324139654234,
            -0.24868988716485463, -0.27899110603922916, -0.30901699437494734,
            -0.33873792024529137, -0.368124552684678, -0.39714789063478045,
            -0.4257792915650727, -0.4539904997395467, -0.48175367410171543,
            -0.5090414157503713, -0.5358267949789969, -0.5620833778521304,
            -0.587785252292473, -0.6129070536529763, -0.6374239897486897,
            -0.6613118653236517, -0.6845471059286887, -0.7071067811865475,
            -0.7289686274214113, -0.7501110696304596, -0.7705132427757891,
            -0.7901550123756904, -0.8090169943749473, -0.8270805742745619,
            -0.8443279255020149, -0.8607420270039435, -0.8763066800438634,
            -0.8910065241883678, -0.9048270524660194, -0.9177546256839811,
            -0.9297764858882513, -0.9408807689542255, -0.9510565162951535,
            -0.9602936856769431, -0.9685831611286311, -0.9759167619387474,
            -0.9822872507286886, -0.9876883405951377, -0.9921147013144778,
            -0.99556196460308, -0.9980267284282716, -0.9995065603657316, -1.0
    };

    float tolerance = 10e-7;
    for (size_t i = 0; i < inputA.size(); i++) {
        CHECK (expectedResult[i] ==
               Approx(arm::app::math::MathUtils::CosineF32(M_PI*inputA[i])).margin(tolerance));
    }
}

TEST_CASE("Test SineF32")
{
/*Test  Constants: */
std::vector<double> inputA{
        0.0, 0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07, 0.08, 0.09, 0.1,
        0.11, 0.12, 0.13, 0.14, 0.15, 0.16, 0.17, 0.18, 0.19, 0.2, 0.21,
        0.22, 0.23, 0.24, 0.25, 0.26, 0.27, 0.28, 0.29, 0.3, 0.31, 0.32,
        0.33, 0.34, 0.35, 0.36, 0.37, 0.38, 0.39, 0.4, 0.41, 0.42, 0.43,
        0.44, 0.45, 0.46, 0.47, 0.48, 0.49, 0.5, 0.51, 0.52, 0.53, 0.54,
        0.55, 0.56, 0.57, 0.58, 0.59, 0.6, 0.61, 0.62, 0.63, 0.64, 0.65,
        0.66, 0.67, 0.68, 0.69, 0.7, 0.71, 0.72, 0.73, 0.74, 0.75, 0.76,
        0.77, 0.78, 0.79, 0.8, 0.81, 0.82, 0.83, 0.84, 0.85, 0.86, 0.87,
        0.88, 0.89, 0.9, 0.91, 0.92, 0.93, 0.94, 0.95, 0.96, 0.97, 0.98,
        0.99, 1.0
};
std::vector<double> expectedResult{

        0.0, 0.03141075907812829, 0.06279051952931337, 0.09410831331851431,
        0.12533323356430426, 0.15643446504023087, 0.1873813145857246,
        0.21814324139654256, 0.2486898871648548, 0.2789911060392293,
        0.3090169943749474, 0.33873792024529137, 0.3681245526846779,
        0.3971478906347806, 0.4257792915650727, 0.45399049973954675,
        0.4817536741017153, 0.5090414157503713, 0.5358267949789967,
        0.5620833778521306, 0.5877852522924731, 0.6129070536529764,
        0.6374239897486896, 0.6613118653236518, 0.6845471059286886,
        0.7071067811865475, 0.7289686274214116, 0.7501110696304596,
        0.7705132427757893, 0.7901550123756903, 0.8090169943749475,
        0.8270805742745618, 0.8443279255020151, 0.8607420270039436,
        0.8763066800438637, 0.8910065241883678, 0.9048270524660196,
        0.9177546256839811, 0.9297764858882513, 0.9408807689542255,
        0.9510565162951535, 0.960293685676943,  0.9685831611286311,
        0.9759167619387473, 0.9822872507286886, 0.9876883405951378,
        0.9921147013144779, 0.99556196460308,   0.9980267284282716,
        0.9995065603657316, 1.0,                0.9995065603657316,
        0.9980267284282716, 0.99556196460308,   0.9921147013144778,
        0.9876883405951377, 0.9822872507286886, 0.9759167619387474,
        0.9685831611286312, 0.9602936856769431, 0.9510565162951536,
        0.9408807689542255, 0.9297764858882513, 0.9177546256839813,
        0.9048270524660195, 0.8910065241883679, 0.8763066800438635,
        0.8607420270039436, 0.844327925502015,  0.827080574274562,
        0.8090169943749475, 0.7901550123756905, 0.7705132427757893,
        0.7501110696304597, 0.7289686274214114, 0.7071067811865476,
        0.6845471059286888, 0.6613118653236518, 0.6374239897486899,
        0.6129070536529764, 0.5877852522924732, 0.5620833778521305,
        0.535826794978997,  0.5090414157503714, 0.4817536741017156,
        0.45399049973954686, 0.4257792915650729, 0.3971478906347806,
        0.36812455268467814, 0.3387379202452913, 0.3090169943749475,
        0.2789911060392291, 0.24868988716485482, 0.21814324139654231,
        0.18738131458572502, 0.15643446504023098, 0.12533323356430454,
        0.09410831331851435, 0.06279051952931358, 0.031410759078128236,
        1.2246467991473532e-16
    };
    float tolerance = 10e-4;
    for (size_t i = 0; i < inputA.size(); i++) {
        CHECK (expectedResult[i] ==
        Approx(arm::app::math::MathUtils::SineF32(M_PI*inputA[i])).margin(tolerance));
    }
}

TEST_CASE("Test SqrtF32")
{
    /*Test  Constants: */
    std::vector<float> inputA{0,1,2,9,M_PI};
    size_t len = inputA.size();
    std::vector<float> expectedResult{0, 1, 1.414213562, 3, 1.772453851 };

    for (size_t i=0; i < len; i++){
        CHECK (expectedResult[i] == Approx(arm::app::math::MathUtils::SqrtF32(inputA[i])));
    }
}

TEST_CASE("Test MeanF32")
{
    /* Test Constants: */
    std::vector<float> input
        {0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 1.000};

    /* Manually calculated mean of above vector */
    float expectedResult = 0.100;
    CHECK (expectedResult == Approx(arm::app::math::MathUtils::MeanF32(input.data(), input.size())));

    /* Mean of 0 */
    std::vector<float> input2{1, 2, -1, -2};
    float expectedResult2 = 0.0f;
    CHECK (expectedResult2 == Approx(arm::app::math::MathUtils::MeanF32(input2.data(), input2.size())));

    /* All 0s */
    std::vector<float> input3 = std::vector<float>(9, 0);
    float expectedResult3 = 0.0f;
    CHECK (expectedResult3 == Approx(arm::app::math::MathUtils::MeanF32(input3.data(), input3.size())));

    /* All 1s */
    std::vector<float> input4 = std::vector<float>(9, 1);
    float expectedResult4 = 1.0f;
    CHECK (expectedResult4 == Approx(arm::app::math::MathUtils::MeanF32(input4.data(), input4.size())));
}

TEST_CASE("Test StdDevF32")
{
    /*Test  Constants: */
    /* Normally distributed sample data generated by numpy normal library */
    std::vector<float> input
            {1.62434536, -0.61175641, -0.52817175, -1.07296862,  0.86540763, -2.3015387,
             1.74481176, -0.7612069,   0.3190391,  -0.24937038,  1.46210794, -2.06014071,
             -0.3224172, -0.38405435,  1.13376944, -1.09989127, -0.17242821, -0.87785842,
             0.04221375,  0.58281521, -1.10061918,  1.14472371,  0.90159072,  0.50249434,
             0.90085595, -0.68372786, -0.12289023, -0.93576943, -0.26788808,  0.53035547,
             -0.69166075,-0.39675353, -0.6871727,  -0.84520564, -0.67124613, -0.0126646,
             -1.11731035, 0.2344157,   1.65980218,  0.74204416, -0.19183555, -0.88762896,
             -0.74715829, 1.6924546,   0.05080775, -0.63699565,  0.19091548,  2.10025514,
             0.12015895,  0.61720311
            };
    uint32_t inputLen = input.size();

    /*Calculate mean using std library to avoid dependency on MathUtils::MeanF32 */
    float mean = (std::accumulate(input.begin(), input.end(), 0.0f))/float(inputLen);
    float output = arm::app::math::MathUtils::StdDevF32(input.data(), inputLen, mean);

    /*Manually calculated standard deviation of above vector*/
    float expectedResult = 0.969589282958136;

    CHECK (expectedResult == Approx(output));

    /* All 0s should have 0 std dev. */
    std::vector<float> input2 = std::vector<float>(4, 0);
    float expectedResult2 = 0.0f;
    CHECK (expectedResult2 == Approx(arm::app::math::MathUtils::StdDevF32(input2.data(), input2.size(), 0.0f)));

    /* All 1s should have 0 std dev. */
    std::vector<float> input3 = std::vector<float>(4, 1);
    float expectedResult3 = 0.0f;
    CHECK (expectedResult3 == Approx(arm::app::math::MathUtils::StdDevF32(input3.data(), input3.size(), 1.0f)));

    /* Manually calclualted std value */
    std::vector<float> input4 {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
    float mean2 = (std::accumulate(input4.begin(), input4.end(), 0.0f))/float(input4.size());
    float expectedResult4 = 2.872281323;
    CHECK (expectedResult4 == Approx(arm::app::math::MathUtils::StdDevF32(input4.data(), input4.size(), mean2)));
}

TEST_CASE("Test FFT32")
{
    /*Test  Constants: */
    std::vector<float> input_zeros(512, 0);
    std::vector<float> input_ones(512, 1);
    /* Random numbers generated using numpy rand with range [0:1] */
    std::vector<float> input_random{
            0.42333686,0.6547418,0.8933691,0.91466254,0.5992143,0.99474055,0.97750413,0.97160685,
            0.72718734,0.8699537,0.643911,0.09764466,0.0050113136,0.46823388,0.13709934,0.44892532,
            0.59728205,0.04055081,0.5579888,0.18445836,0.66469765,0.82715863,0.91934484,0.7844356,
            0.23489648,0.021708783,0.67819905,0.75761676,0.48374954,0.14006922,0.87082034,0.7694296,
            0.80479276,0.8241704,0.95917296,0.5758142,0.16839339,0.34290153,0.5846108,0.6878044,
            0.1067114,0.5198196,0.4356897,0.68049103,0.12480807,0.3538696,0.06067087,0.056964435,
            0.5382167,0.07761527,0.6673144,0.9045368,0.11050189,0.03530183,0.07864744,0.98752064,
            0.014321936,0.101833574,0.43293256,0.87102246,0.52411795,0.90232223,0.49560344,0.6803092,
            0.2908511,0.14653015,0.99105513,0.7057098,0.09623502,0.039713606,0.88669086,0.56018597,
            0.90632766,0.99241334,0.18748309,0.38991618,0.6359827,0.05665585,0.732304,0.2703365,
            0.19014524,0.5017947,0.78862536,0.81253093,0.35050204,0.2832596,0.65221876,0.59856164,
            0.42758793,0.78865635,0.30943435,0.93780816,0.62568265,0.35397422,0.84209913,0.48590583,
            0.34837773,0.5811646,0.42924216,0.26692122,0.030709852,0.84459823,0.09085059,0.29297647,
            0.48539516,0.33488297,0.7877257,0.8728821,0.28454545,0.7109578,0.86097074,0.8536262,
            0.4978063,0.5760398,0.77506036,0.7716988,0.27041402,0.52340513,0.2055419,0.8728235,
            0.13492358,0.79122984,0.52998376,0.33897072,0.6426309,0.8766521,0.89287037,0.74047667,
            0.42341164,0.67437655,0.4682156,0.67123246,0.54287183,0.3580476,0.94756556,0.2699457,
            0.6131569,0.75043845,0.8115012,0.49610943,0.7108478,0.90941435,0.02233071,0.37346774,
            0.33732748,0.46691266,0.35784695,0.39391598,0.8556212,0.884142,0.11730601,0.550112,
            0.31513855,0.69654715,0.58585805,0.4493127,0.78515726,0.8176612,0.9846698,0.32842383,
            0.41843212,0.48470423,0.6757128,0.95876855,0.5989163,0.13587572,0.72886884,0.88291156,
            0.34402263,0.66211045,0.86188424,0.21498202,0.26397392,0.67372984,0.91386956,0.7339788,
            0.91308993,0.1953016,0.1539217,0.214701,0.58234113,0.8019992,0.63969976,0.041050985,
            0.7293308,0.26341477,0.54768014,0.97596467,0.12385198,0.44149798,0.5519762,0.1697347,
            0.577215,0.8213594,0.47874716,0.64515114,0.61467725,0.18463866,0.23890929,0.51052976,
            0.16807361,0.53142565,0.2414274,0.41690814,0.98815554,0.6245643,0.9477003,0.24780034,
            0.82469565,0.8614785,0.9565832,0.062440686,0.9710724,0.039196696,0.11030199,0.35234734,
            0.02065066,0.12832293,0.7328055,0.48924434,0.17247158,0.5769348,0.44146806,0.53575355,
            0.17258933,0.6980237,0.86494404,0.50573164,0.5033998,0.71199447,0.41353586,0.26767612,
            0.3789118,0.046621118,0.58491063,0.22861995,0.03134273,0.53280216,0.23382367,0.07748905,
            0.96875405,0.6613716,0.64087844,0.8377165,0.051519375,0.68997836,0.3776376,0.43362603,
            0.5358754,0.51419014,0.12823892,0.26574057,0.508808,0.15734084,0.78327274,0.5045347,
            0.5445746,0.89297736,0.8531272,0.91270804,0.87429863,0.3965137,0.13544834,0.74269205,
            0.80592203,0.045050766,0.13362087,0.17090783,0.02873757,0.99339336,0.6394376,0.48203012,
            0.70598215,0.37082237,0.39792424,0.89938444,0.312602,0.48755112,0.18220617,0.17303479,
            0.31954846,0.78080165,0.1755106,0.68262285,0.84665287,0.8520143,0.8459509,0.39417005,
            0.30087698,0.81362164,0.61927587,0.32739028,0.9023775,0.27578092,0.6830477,0.15842387,
            0.8473049,0.43057114,0.2019703,0.20560141,0.6237757,0.60283095,0.27645138,0.26605442,
            0.27985683,0.41353813,0.85139906,0.71711886,0.5444832,0.73613757,0.7397004,0.7406752,
            0.41016674,0.31896713,0.4541723,0.2795807,0.47941738,0.00504193,0.89091027,0.8097144,
            0.63033766,0.37252298,0.9132861,0.5102532,0.04104481,0.30368647,0.21573475,0.99520445,
            0.5047808,0.6868845,0.99881023,0.30377692,0.2554386,0.47201005,0.11120686,0.10077732,
            0.1853349,0.49159425,0.3938629,0.8989509,0.9887155,0.698771,0.695701,0.78368753,0.52537227,
            0.19451462,0.3659248,0.1968508,0.7751828,0.33103722,0.40406147,0.37832898,0.68663514,
            0.32225925,0.41771907,0.034218453,0.42808908,0.20685343,0.1861495,0.045986768,0.8532299,
            0.17200677,0.44670314,0.56831235,0.5388232,0.5430553,0.69175136,0.6462231,0.42827028,
            0.10050113,0.30627027,0.9967943,0.6684778,0.5928422,0.63392985,0.99123496,0.79301435,
            0.7936309,0.42839453,0.39781123,0.22329247,0.0122212395,0.2807108,0.19812097,0.5576105,
            0.115653396,0.3732018,0.7622857,0.19847734,0.5310287,0.7298145,0.5518292,0.9117333,
            0.13215758,0.33716795,0.42372775,0.6779287,0.35799992,0.097887225,0.20171605,0.9948177,
            0.1829232,0.80349857,0.9807098,0.22959666,0.67322475,0.63094735,0.93454355,0.15962408,
            0.04335433,0.47104993,0.36784375,0.45258796,0.93415564,0.1655446,0.7195017,0.76236975,
            0.3846913,0.01330617,0.84716374,0.1227003,0.65102947,0.6632434,0.3728453,0.4222391,
            0.6942989,0.16014872,0.10798196,0.94033676,0.026525471,0.8379024,0.5484514,0.13500613,
            0.22919805,0.7001831,0.6573261,0.38086265,0.8725666,0.35077834,0.28415123,0.42283052,
            0.668379,0.9769895,0.37621376,0.646407,0.11188069,0.17129017,0.7441628,0.25617477,
            0.7751679,0.8565412,0.67631435,0.45213568,0.61896557,0.3387995,0.51607716,0.60779697,
            0.16428445,0.5080923,0.13012086,0.61184275,0.7690249,0.9578811,0.67365676,0.16241212,
            0.97157824,0.5595742,0.75936574,0.6043881,0.2149638,0.4925318,0.58727825,0.97953695,
            0.01605968,0.2819307,0.6448378,0.4265335,0.661541,0.3976571,0.40607136,0.46425515,
            0.2055872,0.2716193,0.4132582,0.8372537,0.37787434,0.082228854,0.7985557,0.9718134,
            0.35222608,0.4853643,0.2569464,0.14783978,0.4889042,0.62900156,0.19994198,0.4618481,
            0.21673755,0.51749533,0.1260157,0.83759904,0.36438805,0.6704668,0.22010763,0.2359318,
            0.53004104,0.9723652,0.91218954,0.9153926,0.48207277,0.34850466,0.8939421
    };
    std::vector<std::vector<float>> input_vectors{input_zeros,
                                                  input_ones,
                                                  input_random};

    std::vector<float> output_zeros(512, 0);
    std::vector<float> output_ones(512, 0);
    std::vector<float> output_random(512, 0);
    std::vector<std::vector<float>> output_vectors{output_zeros,
                                                   output_ones,
                                                   output_random};

    std::vector<float> expected_result_zeros(512, 0);
    std::vector<float> expected_result_ones(512, 0);
    expected_result_ones[0] = 512.0;

    /* Values are stored as [real0, realN/2, real1, im1, real2, im2, ...] */
    std::vector<float> expected_result_random{
            2.59510161e+02, 2.59796867, 2.55982143, -5.91349888,
            -1.80049237, 1.09902763,  4.00943240, 7.76684892,
            4.32617219, -4.33636417,  2.98128463, -0.83763449,
            2.92973078, -3.75655459,  2.27203161, -4.61106145,
            5.55562176, -4.71880166,  2.13693416, -2.20496619,
            2.31174036, -3.52991041, -6.16870680e-01, 2.43455407,
            4.76317833, 8.66518565,  1.72350562, -1.33641312,
            5.82836675, 0.89396187,  8.15031483, 4.34599034,
            5.99780199, 2.94900065, -2.34462045e-02, -5.03789597,
            1.21907020e+01, -6.47012928,  1.24434715, 0.23621713,
            9.20921279e-01, -9.20510398, -7.73267254e-01, -3.72141078,
            6.28883709, 4.00634065,  4.46491682, 0.74625307,
            -5.87506158e-01, -4.22833058,  3.15189786, -1.82518672,
            -6.93782260, 2.4170692,  3.23045185, 3.33383799,
            5.10059531e-02, -3.4233929, -2.91651323, -0.0258584,
            5.84499843, -9.51454903, -1.49214047e+01, 5.52200123,
            4.52179590, -7.08268703,  5.16775420e-01, -2.90878759,
            5.04314682, -1.16928599, -1.07329243e+01, -0.2719951,
            -3.95269565, -2.32475678, -4.11031641, -2.20538835,
            -5.89005095e-01, -5.65483456, -1.08927018e+01, 5.74801823,
            -5.72520347, -3.94970165, -5.18407515e-01, 1.23622633,
            9.56297959, 0.24424306, -3.74306351, 9.63476301,
            -4.74493837, -0.35443496,  6.54760504, 1.16188913,
            -1.33416950e+01, 7.19088609, -2.56045800, -0.49557866,
            2.93460322, 6.91076746, -2.84779221e-01, 6.59958391,
            1.70963995, -7.67293252,  4.18500790, -0.14627552,
            -1.24855113, -1.43322867,  3.60644904e-01, -4.11521374,
            -1.00628421e+01, 2.87531563, -9.34809732, -0.58251846,
            3.61799848, -5.10288284, -5.96239076, 1.99792128,
            -7.83229243e-02, 1.81741166,  2.32709681, 0.68487206,
            -3.08398468, 1.5177629 ,  1.41015388, 4.51146401,
            1.90769911, 0.56093423,  3.58389141, -0.14974575,
            -2.20163907, -1.62177814, -1.91904127, 1.94645907,
            -1.37722930e-01, -4.30291678, -2.61843435, 0.12691241,
            3.28959117, 4.7309582 , -2.93995652, 0.39835926,
            2.89711768, 1.42284586, -5.13129145, -7.26477374,
            3.74616158, -2.59659457,  3.85748750, -2.93737277,
            3.17748694, -4.45041455, -2.68466437, 1.37377726,
            1.60008368, 1.63787578, -1.95661401, -6.34937202,
            -2.62744282, -5.20892662,  8.90553959e-01, -6.37113573,
            2.35885332,-10.04547561,  3.29866159e-01, 1.89217741,
            8.82516491e-01, -3.53298728, -2.22525608, -5.64794388,
            -5.19226843, 2.5971315 ,  4.49346648, -0.20428409,
            -6.14851885,-11.90893875,  3.75899776, -1.86910056,
            2.78518535, -2.6359501 , -2.13423317, 4.86509946,
            -2.37625499, 7.42404308,  6.71175474, 6.06191618,
            2.59014379, 4.76329698,  9.19140042, 9.69149015,
            3.33307819, -4.03094924,  2.12988453, -0.15820258,
            -1.03422801e+01, -3.04462388,  3.59852152, -2.00887343,
            -3.69998656, 0.90050102,  6.79959099e-01, -1.88604949,
            1.24235316, 0.41309537,  6.13876866, -7.1040085 ,
            6.17728674, 1.91667103, -1.32895472, -0.17674661,
            -6.94720428, 3.10502593, -2.33990738, -1.27840434,
            3.21442520, 2.14102714,  2.37498837, 3.8158066 ,
            -2.24107675, -5.52527559, -2.95697930, -0.50367608,
            3.01687661, 7.08195792,  6.78604790, -3.94154162,
            2.24402195, 4.60132638,  3.42211139, 4.17689039,
            -1.17277194, 2.15404472, -2.37481930, 1.42611867,
            -4.63033506e-01, 3.21563035,  1.38662123, 3.98598717,
            -3.75283402, -2.47600433, -1.97290542, 2.83361487,
            -8.45662834e-01, 5.57411581, -9.72981483e-01,-11.394208,
            1.88220611, -0.80225125, -4.34295854e-01, -8.2954126,
            3.81795409, -3.17146 , -4.61994107, -1.59820505,
            -5.98834455, -4.93129451, -5.13862996e-01, -0.15649305,
            -5.59094391, 6.25244435, -6.59974456,13.17193115,
            4.48609092, 1.64741879,  7.40985006, 0.44896188,
            3.81058449, -0.76425931, -5.47938416, 4.01447941,
            -3.21535548, -1.45542238,  7.22740830e-01, -0.23983128,
            -4.32373034, 0.1337671 , -5.89365226, -3.18756318,
            7.90979161, 5.27570134, -3.43094553, -6.00826981,
            1.17932561, -3.50027177,  1.81306385e-01, 1.1062498 ,
            7.23650536e-01, -1.55500613, -3.88047911, -2.43746762,
            -6.81565579, 2.16343352,  2.46366137, 2.38704469,
            -2.55106395, 6.5091449 , -2.06510578,11.11320924,
            2.06649835, -1.05026064,  1.63564303, -0.04638729,
            1.45053876, 0.43730146,  1.25027939, 0.79932743,
            2.81088838, 6.95136058, -4.41417255, 2.89610628,
            1.15426258, -2.60704937, -2.77744882, 4.12872365,
            -2.98288336, 6.75607352,  2.36553382, -2.10540332,
            -7.30042988, -5.44897893,  3.44048454, 4.29726231,
            2.18199500, -0.80126759, -4.04051175, 4.57584864,
            9.56312116e-01, -4.45183318,  3.42348929, -9.84138181,
            8.69604433, -6.6481311 ,  4.68232735e-01, 1.41031176,
            -1.24085700,10.61672181,  3.56591473e-01,10.51631421,
            -9.97435470e-01, 2.72157537,  8.63583929, -2.19404252,
            -1.53605811, -4.41068581,  2.05371873, 1.25665769,
            1.65289503, 4.52520582, -5.35062642e-01, 0.82084677,
            -1.10079476e+01, -5.09361474,  9.63129107, 3.90056638,
            -4.19779738, 0.06565745,  2.42526917, 2.5854233 ,
            -3.66709357, 3.80502971, -1.01489353e-01, -6.85423228,
            -1.39361494e+01, -0.43904617,  6.01800968, -1.30751495,
            -4.75122234, 2.74740671,  5.54971138, 9.43409003,
            -9.94733058e-01, -3.0096825 , -8.60263376, 0.36653762,
            3.53318614, -2.69194556, -8.95145740, -4.71570923,
            5.15417709, 2.68645385, -2.78042293, 8.21739385,
            5.90225003e-01, 2.13319153,  1.72158888, 0.18114627,
            3.92269446, 3.3525857 , -3.40313825, 4.39280934,
            -1.70368966, 1.29121245, -3.11326453, -1.85941318,
            4.57078881, 0.72531039,  6.00445664, 4.9588524 ,
            -3.32944491, -0.02080722, -7.42374632, -3.23290026,
            -8.16145790e-01, 3.55935439, -6.19206533e-01, 2.42859073,
            2.21486456, 3.76402487,  3.90930695, -3.61610186,
            -8.12712547e-01,-14.63377988,  1.14460823, -3.14089899,
            3.18097435, 1.21957751,  2.85181833, 0.89990235,
            -4.32147361, -5.54219361, -1.12253677, 2.96141081,
            -4.42577070, 3.17282306,  4.91746710, 1.16977744,
            -4.55148089, -2.82520179, -1.71684103, 1.91487668,
            7.70726836e-01, 0.78534837, -5.91048566, -4.8288477 ,
            -1.35560162, -3.60938315,  1.15812301, 2.44299541,
            1.36115190, -5.40950935,  7.08292127, 0.27720591,
            -1.60210828e-01, 2.75862348, -1.57403782, 9.97207524,
            -2.08957576, 8.70299964, -5.33004663, 4.1547783 ,
            3.51580675, -5.10788085,  4.37938353, -3.73449894,
            1.44673271, 0.51941469,  8.52232446e-01, -1.1134965 ,
            -1.43972745, -1.62952127, -2.50759973, 1.19012213,
            5.72772282e-01, -2.71833059, -6.84718990, 4.2621535 ,
            1.58954734, -0.53827818, -1.44624396e-01, 7.63866979,
            4.10423977e-01, -2.4785678 , -5.02681867, -2.03469811,
            9.59505727e-01, 2.68589705,  3.20889444,-10.76452533,
            -3.84771551, 2.49189796, -3.19895938, -3.49948794,
            -2.67238970, 5.11386526, -3.85957031, -1.40741978,
            1.76663166e-01,-11.7111276 ,  6.39997364e-01, -1.30321198,
            3.20767633, 1.65750671, -1.16187257e+01, -4.36634782,
            -3.18675281, -4.89279155, -4.08760307, 2.19269283,
            -1.58924870, 0.17948212,  4.81376107, 2.01871001,
            -3.24211095e-01, -0.2790092 ,  1.12603878, -3.61503491,
            -2.86982317, -3.03634532,  8.07713910, 2.21302089,
            2.91496011, -2.58564072, -2.45868054, -4.69447438,
            -2.45868054, 4.69447438,
            2.91496011, 2.58564072,  8.07713910, -2.21302089,
            -2.86982317, 3.03634532,  1.12603878, 3.61503491,
            -3.24211095e-01, 0.2790092 ,  4.81376107, -2.01871001,
            -1.58924870, -0.17948212, -4.08760307, -2.19269283,
            -3.18675281, 4.89279155, -1.16187257e+01, 4.36634782,
            3.20767633, -1.65750671,  6.39997364e-01, 1.30321198,
            1.76663166e-01,11.7111276 , -3.85957031, 1.40741978,
            -2.67238970, -5.11386526, -3.19895938, 3.49948794,
            -3.84771551, -2.49189796,  3.20889444,10.76452533,
            9.59505727e-01, -2.68589705, -5.02681867, 2.03469811,
            4.10423977e-01, 2.4785678 , -1.44624396e-01, -7.63866979,
            1.58954734, 0.53827818, -6.84718990, -4.2621535 ,
            5.72772282e-01, 2.71833059, -2.50759973, -1.19012213,
            -1.43972745, 1.62952127,  8.52232446e-01, 1.1134965 ,
            1.44673271, -0.51941469,  4.37938353, 3.73449894,
            3.51580675, 5.10788085, -5.33004663, -4.1547783 ,
            -2.08957576, -8.70299964, -1.57403782, -9.97207524,
            -1.60210828e-01, -2.75862348,  7.08292127, -0.27720591,
            1.36115190, 5.40950935,  1.15812301, -2.44299541,
            -1.35560162, 3.60938315, -5.91048566, 4.8288477 ,
            7.70726836e-01, -0.78534837, -1.71684103, -1.91487668,
            -4.55148089, 2.82520179,  4.91746710, -1.16977744,
            -4.42577070, -3.17282306, -1.12253677, -2.96141081,
            -4.32147361, 5.54219361,  2.85181833, -0.89990235,
            3.18097435, -1.21957751,  1.14460823, 3.14089899,
            -8.12712547e-01,14.63377988,  3.90930695, 3.61610186,
            2.21486456, -3.76402487, -6.19206533e-01, -2.42859073,
            -8.16145790e-01, -3.55935439, -7.42374632, 3.23290026,
            -3.32944491, 0.02080722,  6.00445664, -4.9588524 ,
            4.57078881, -0.72531039, -3.11326453, 1.85941318,
            -1.70368966, -1.29121245, -3.40313825, -4.39280934,
            3.92269446, -3.3525857 ,  1.72158888, -0.18114627,
            5.90225003e-01, -2.13319153, -2.78042293, -8.21739385,
            5.15417709, -2.68645385, -8.95145740, 4.71570923,
            3.53318614, 2.69194556, -8.60263376, -0.36653762,
            -9.94733058e-01, 3.0096825 ,  5.54971138, -9.43409003,
            -4.75122234, -2.74740671,  6.01800968, 1.30751495,
            -1.39361494e+01, 0.43904617, -1.01489353e-01, 6.85423228,
            -3.66709357, -3.80502971,  2.42526917, -2.5854233 ,
            -4.19779738, -0.06565745,  9.63129107, -3.90056638,
            -1.10079476e+01, 5.09361474, -5.35062642e-01, -0.82084677,
            1.65289503, -4.52520582,  2.05371873, -1.25665769,
            -1.53605811, 4.41068581,  8.63583929, 2.19404252,
            -9.97435470e-01, -2.72157537,  3.56591473e-01,-10.51631421,
            -1.24085700,-10.61672181,  4.68232735e-01, -1.41031176,
            8.69604433, 6.6481311 ,  3.42348929, 9.84138181,
            9.56312116e-01, 4.45183318, -4.04051175, -4.57584864,
            2.18199500, 0.80126759,  3.44048454, -4.29726231,
            -7.30042988, 5.44897893,  2.36553382, 2.10540332,
            -2.98288336, -6.75607352, -2.77744882, -4.12872365,
            1.15426258, 2.60704937, -4.41417255, -2.89610628,
            2.81088838, -6.95136058,  1.25027939, -0.79932743,
            1.45053876, -0.43730146,  1.63564303, 0.04638729,
            2.06649835, 1.05026064, -2.06510578,-11.11320924,
            -2.55106395, -6.5091449 ,  2.46366137, -2.38704469,
            -6.81565579, -2.16343352, -3.88047911, 2.43746762,
            7.23650536e-01, 1.55500613,  1.81306385e-01, -1.1062498 ,
            1.17932561, 3.50027177, -3.43094553, 6.00826981,
            7.90979161, -5.27570134, -5.89365226, 3.18756318,
            -4.32373034, -0.1337671 ,  7.22740830e-01, 0.23983128,
            -3.21535548, 1.45542238, -5.47938416, -4.01447941,
            3.81058449, 0.76425931,  7.40985006, -0.44896188,
            4.48609092, -1.64741879, -6.59974456,-13.17193115,
            -5.59094391, -6.25244435, -5.13862996e-01, 0.15649305,
            -5.98834455, 4.93129451, -4.61994107, 1.59820505,
            3.81795409, 3.17146 , -4.34295854e-01, 8.2954126 ,
            1.88220611, 0.80225125, -9.72981483e-01,11.394208  ,
            -8.45662834e-01, -5.57411581, -1.97290542, -2.83361487,
            -3.75283402, 2.47600433,  1.38662123, -3.98598717,
            -4.63033506e-01, -3.21563035, -2.37481930, -1.42611867,
            -1.17277194, -2.15404472,  3.42211139, -4.17689039,
            2.24402195, -4.60132638,  6.78604790, 3.94154162,
            3.01687661, -7.08195792, -2.95697930, 0.50367608,
            -2.24107675, 5.52527559,  2.37498837, -3.8158066 ,
            3.21442520, -2.14102714, -2.33990738, 1.27840434,
            -6.94720428, -3.10502593, -1.32895472, 0.17674661,
            6.17728674, -1.91667103,  6.13876866, 7.1040085 ,
            1.24235316, -0.41309537,  6.79959099e-01, 1.88604949,
            -3.69998656, -0.90050102,  3.59852152, 2.00887343,
            -1.03422801e+01, 3.04462388,  2.12988453, 0.15820258,
            3.33307819, 4.03094924,  9.19140042, -9.69149015,
            2.59014379, -4.76329698,  6.71175474, -6.06191618,
            -2.37625499, -7.42404308, -2.13423317, -4.86509946,
            2.78518535, 2.6359501 ,  3.75899776, 1.86910056,
            -6.14851885,11.90893875,  4.49346648, 0.20428409,
            -5.19226843, -2.5971315 , -2.22525608, 5.64794388,
            8.82516491e-01, 3.53298728,  3.29866159e-01, -1.89217741,
            2.35885332,10.04547561,  8.90553959e-01, 6.37113573,
            -2.62744282, 5.20892662, -1.95661401, 6.34937202,
            1.60008368, -1.63787578, -2.68466437, -1.37377726,
            3.17748694, 4.45041455,  3.85748750, 2.93737277,
            3.74616158, 2.59659457, -5.13129145, 7.26477374,
            2.89711768, -1.42284586, -2.93995652, -0.39835926,
            3.28959117, -4.7309582 , -2.61843435, -0.12691241,
            -1.37722930e-01, 4.30291678, -1.91904127, -1.94645907,
            -2.20163907, 1.62177814,  3.58389141, 0.14974575,
            1.90769911, -0.56093423,  1.41015388, -4.51146401,
            -3.08398468, -1.5177629 ,  2.32709681, -0.68487206,
            -7.83229243e-02, -1.81741166, -5.96239076, -1.99792128,
            3.61799848, 5.10288284, -9.34809732, 0.58251846,
            -1.00628421e+01, -2.87531563,  3.60644904e-01, 4.11521374,
            -1.24855113, 1.43322867,  4.18500790, 0.14627552,
            1.70963995, 7.67293252, -2.84779221e-01, -6.59958391,
            2.93460322, -6.91076746, -2.56045800, 0.49557866,
            -1.33416950e+01, -7.19088609,  6.54760504, -1.16188913,
            -4.74493837, 0.35443496, -3.74306351, -9.63476301,
            9.56297959, -0.24424306, -5.18407515e-01, -1.23622633,
            -5.72520347, 3.94970165, -1.08927018e+01, -5.74801823,
            -5.89005095e-01, 5.65483456, -4.11031641, 2.20538835,
            -3.95269565, 2.32475678, -1.07329243e+01, 0.2719951 ,
            5.04314682, 1.16928599,  5.16775420e-01, 2.90878759,
            4.52179590, 7.08268703, -1.49214047e+01, -5.52200123,
            5.84499843, 9.51454903, -2.91651323, 0.0258584 ,
            5.10059531e-02, 3.4233929 ,  3.23045185, -3.33383799,
            -6.93782260, -2.4170692 ,  3.15189786, 1.82518672,
            -5.87506158e-01, 4.22833058,  4.46491682, -0.74625307,
            6.28883709, -4.00634065, -7.73267254e-01, 3.72141078,
            9.20921279e-01, 9.20510398,  1.24434715, -0.23621713,
            1.21907020e+01, 6.47012928, -2.34462045e-02, 5.03789597,
            5.99780199, -2.94900065,  8.15031483, -4.34599034,
            5.82836675, -0.89396187,  1.72350562, 1.33641312,
            4.76317833, -8.66518565, -6.16870680e-01, -2.43455407,
            2.31174036, 3.52991041,  2.13693416, 2.20496619,
            5.55562176, 4.71880166,  2.27203161, 4.61106145,
            2.92973078, 3.75655459,  2.98128463, 0.83763449,
            4.32617219, 4.33636417,  4.00943240, -7.76684892,
            -1.80049237, -1.09902763,  2.55982143, 5.91349888
    };

    std::vector<std::vector<float>> expected_results_vectors{expected_result_zeros,
                                                             expected_result_ones,
                                                             expected_result_random};
    arm::app::math::FftInstance fftInstance;
    /* Iterate over each of the input vectors, calculate FFT and compare with corresponding expected_results vectors */
    for (size_t j = 0; j < input_vectors.size(); j++) {
        uint16_t fftLen = input_vectors[j].size();
        arm::app::math::MathUtils::FftInitF32(fftLen, fftInstance);
        arm::app::math::MathUtils::FftF32(input_vectors[j], output_vectors[j], fftInstance);

        float tolerance = 10e-4;
        for (size_t i = 0; i < fftLen/2; i++) {
            CHECK (output_vectors[j][i] ==
            Approx(expected_results_vectors[j][i]).margin(tolerance));

        }
    }
}

TEST_CASE("Test VecLogarithmF32")
{
    /*Test  Constants: */
    std::vector<float> input =
            { 0.1e-10, 0.5, 1, M_PI, M_E };
    std::vector<float> expectedResult =
            {-25.328436, -0.693147181, 0, 1.144729886, 1};
    std::vector<float> output(input.size());

    arm::app::math::MathUtils::VecLogarithmF32(input,output);

    for (size_t i = 0; i < input.size(); i++)
        CHECK (expectedResult[i] == Approx(output[i]));
}

TEST_CASE("Test DotProductF32")
{
    /*Test  Constants: */
    std::vector<float> inputA
            {1,1,1,0,0,0};
    std::vector<float> inputB
            {0,0,0,1,1,1};
    uint32_t len = inputA.size();

    float expectedResult = 0;
    float dot_prod = arm::app::math::MathUtils::DotProductF32(inputA.data(), inputB.data(), len);
    CHECK(dot_prod == expectedResult);
}

TEST_CASE("Test ComplexMagnitudeSquaredF32")
{
    /*Test  Constants: */
    std::vector<float> input
            {0.0, 0.0, 0.5, 0.5,1,1};
    size_t inputLen = input.size();

    std::vector<float> expectedResult
            {0.0, 0.5, 2,};
    size_t outputLen = inputLen/2;
    std::vector<float>output(outputLen);

    /* Pass pointers to input/output vectors as this function over-writes the first half
     * of the input vector with output results */
    arm::app::math::MathUtils::ComplexMagnitudeSquaredF32(input.data(), inputLen, output.data(), outputLen);

    for (size_t i = 0; i < outputLen; i++) {
        CHECK (expectedResult[i] == Approx(output[i]));
    }
}

/**
 * @brief Simple function to test the Softmax function
 *
 * @param input Input vector
 * @param goldenOutput Expected output vector
 */
static void TestSoftmaxF32(
    const std::vector<float>& input,
    const std::vector<float>& goldenOutput)
{
    std::vector<float> output = input; /* Function modifies the vector in-place */
    arm::app::math::MathUtils::SoftmaxF32(output);

    for (size_t i = 0; i < goldenOutput.size(); ++i) {
        CHECK(goldenOutput[i] == Approx(output[i]));
    }

    REQUIRE(output.size() == goldenOutput.size());
}

TEST_CASE("Test SoftmaxF32")
{
    SECTION("Simple series") {
        const std::vector<float> input {
            0.0, 1.0, 2.0, 3.0, 4.0,
            5.0, 6.0, 7.0, 8.0, 9.0
        };

        const std::vector<float> expectedOutput {
            7.80134161e-05, 2.12062451e-04,
            5.76445508e-04, 1.56694135e-03,
            4.25938820e-03, 1.15782175e-02,
            3.14728583e-02, 8.55520989e-02,
            2.32554716e-01, 6.32149258e-01
        };

        TestSoftmaxF32(input, expectedOutput);
    }

    SECTION("Random series") {
        const std::vector<float> input {
            0.8810943246170809, 0.5877587675947015,
            0.6841546454788743, 0.4155920960071594,
            0.9799415323651671, 0.5066432973545711,
            0.3846024252355448, 0.4568689569632123,
            0.3284413744557605, 0.49152323726213554
        };

        const std::vector<float> expectedOutput {
            0.13329595, 0.09940837,
            0.10946799, 0.08368583,
            0.14714509, 0.09166319,
            0.08113220, 0.08721240,
            0.07670132, 0.09028766
        };

        TestSoftmaxF32(input, expectedOutput);
    }

    SECTION("Series with large STD") {
        const std::vector<float> input {
            0.001, 1000.000
        };

        const std::vector<float> expectedOutput {
            0.000, 1.000
        };

        TestSoftmaxF32(input, expectedOutput);
    }
}
