require '../lib/test-tools'

describe "DSP", ->
  describe ".acos", ->
    it "should provide correct results", ->
      dst = F(4)
      DSP.acos(dst, F([0.9929446523468466,-0.9994428453422334,-0.4708111937898803,-0.3258771376731108]))
      dst.should.be.identicalTo([0.11885839994974795,3.1082098315898414,2.061006356375571,1.902735690106372])

      dst = F(4)
      DSP.acos(dst, F([-0.448311474332637,0.6207708938804974,0.25794159767894254,-0.6626451739767675]))
      dst.should.be.identicalTo([2.0356717788542795,0.9010707129107786,1.3099052290100335,2.295141514596051])

      dst = F(4)
      DSP.acos(dst, F([0.40879108145370036,-0.9875588085096861,0.12424172174256796,-0.9886894039744994]))
      dst.should.be.identicalTo([1.1496673146611625,2.983687146226435,1.4462327315543604,2.991047097915469])

      dst = F(4)
      DSP.acos(dst, F([-0.2735387533776683,-0.989039004573132,-0.9405653372478469,-0.9999921622013668]))
      dst.should.be.identicalTo([1.8478665133714753,2.9933963104105517,2.7950874658110676,3.1376334089972575])

      dst = F(4)
      DSP.acos(dst, F([-0.4107941656866127,0.7086135281132505,-0.9613443884008407,0.7877251475624599]))
      dst.should.be.identicalTo([1.994121273616694,0.7832650247014258,2.86264013493394,0.6636888792457608])

      dst = F(4)
      DSP.acos(dst, F([-0.9365705773624499,-0.9827242940857904,-0.821714865111734,0.8796223303982956]))
      dst.should.be.identicalTo([2.7835101216656755,2.955443906528031,2.5352099199094646,0.4957286795467719])

      dst = F(4)
      DSP.acos(dst, F([-0.9654167436327685,-0.08653152445311495,-0.973204156150738,0.024231076127558853]))
      dst.should.be.identicalTo([2.877833487096579,1.6574362038210313,2.9095737925802188,1.546562878847878])

      dst = F(4)
      DSP.acos(dst, F([-0.6198560308018666,-0.9027891366138938,-0.3681590220222219,0.9427549831418801]))
      dst.should.be.identicalTo([2.239355549968277,2.6970074418369445,1.9478245182115468,0.3399990475974365])

      dst = F(4)
      DSP.acos(dst, F([-0.9887113376287998,0.2846183781137733,0.9004736892112931,-0.423273976423406]))
      dst.should.be.identicalTo([2.9911934147415145,1.2821880085396555,0.4499388720740762,2.0078522630451454])

      dst = F(4)
      DSP.acos(dst, F([-0.9408537798066261,0.6409264259879875,-0.5458277874780881,0.9751993736528101]))
      dst.should.be.identicalTo([2.795937794907629,0.875091759589771,2.148173058191183,0.2231762604150266])

      dst = F(4)
      DSP.acos(dst, F([0.307226045015203,-0.13160467371306825,0.8744661632956495,0.8018183281029834]))
      dst.should.be.identicalTo([1.258519602394046,1.7027838864785463,0.5064621022224518,0.6404644095978613])

      dst = F(4)
      DSP.acos(dst, F([0.058331311252947014,0.7797357729393741,-0.9590983067522415,0.5746223578105463]))
      dst.should.be.identicalTo([1.5124318856687353,0.6765526351951542,2.8545957903773576,0.9586536826225212])

      dst = F(4)
      DSP.acos(dst, F([0.4971436418475465,-0.8822908592842534,0.4499125561773217,-0.5387479561543759]))
      dst.should.be.identicalTo([1.0504926610965584,2.651503419626887,1.10412890361506,2.1397465650879313])

      dst = F(4)
      DSP.acos(dst, F([-0.030916523594837344,-0.23243465844253144,-0.5051149591538412,0.16365411690839676]))
      dst.should.be.identicalTo([1.6017177776735378,1.8053764804822992,2.100311487641299,1.4064027468944333])

      dst = F(4)
      DSP.acos(dst, F([0.8192538427194298,0.3457691462553629,-0.19208585211258267,-0.9398205896838029]))
      dst.should.be.identicalTo([0.6106877355512719,1.217737959328444,1.764083464639216,2.792901151737811])

      dst = F(4)
      DSP.acos(dst, F([0.013833244592920345,-0.44350026786030594,0.9839250692295352,0.16445941627947744]))
      dst.should.be.identicalTo([1.5569626409787987,2.030296597491483,0.17954488896724957,1.4055863865508833])

      dst = F(4)
      DSP.acos(dst, F([0.9868218651651646,0.9650768315639721,-0.7403732652398136,-0.9817083344985911]))
      dst.should.be.identicalTo([0.16252495718707108,0.2650598206801915,2.4044218077436716,2.950032202100031])

      dst = F(4)
      DSP.acos(dst, F([-0.9826675556926665,-0.996881562655805,-0.3429814323093898,-0.9993246349836802]))
      dst.should.be.identicalTo([2.9551375868305843,3.0625982301334242,1.920885350258819,3.1048383055568163])

      dst = F(4)
      DSP.acos(dst, F([0.9009060428259261,-0.7737632708514651,-0.2833116641798849,-0.47795767024503205]))
      dst.should.be.identicalTo([0.4489437257808322,2.4555567932521574,1.858041830225584,2.0691244624278506])

      dst = F(4)
      DSP.acos(dst, F([0.36626287750950015,-0.9346218642383161,0.03195689725192267,-0.8148159721115656]))
      dst.should.be.identicalTo([1.1958066991514658,2.777990656260925,1.5388339877473356,2.5232080080049784])

      dst = F(4)
      DSP.acos(dst, F([-0.18427189670387253,-0.6294909931238739,-0.8050307382158212,0.5472781505546356]))
      dst.should.be.identicalTo([1.756127348526541,2.2516942784406844,2.5065236079202053,0.9916876620379337])

      dst = F(4)
      DSP.acos(dst, F([-0.9243197914038378,-0.9989929359080945,-0.8685576378158092,0.9326045102220162]))
      dst.should.be.identicalTo([2.750045626180892,3.096709846926348,2.6230807776928766,0.3692327787592728])

      dst = F(4)
      DSP.acos(dst, F([-0.3658808676618273,-0.9460419789936745,0.24141001430364278,0.9114348298569671]))
      dst.should.be.identicalTo([1.94537545007523,2.811591528633902,1.3269777486896532,0.42403832585281914])

      dst = F(4)
      DSP.acos(dst, F([0.1516025941490531,-0.6102609977225272,0.9291305512858778,0.0454340081485777]))
      dst.should.be.identicalTo([1.4186069205521874,2.2271863351339656,0.37874191151516196,1.5253466729234113])

      dst = F(4)
      DSP.acos(dst, F([0.030086439842925566,-0.9956803950190153,0.6086810292622493,-0.7622209268666077]))
      dst.should.be.identicalTo([1.5407053460919518,3.0486118125593675,0.9163991950197484,2.437533518504805])

  describe ".asin", ->
    it "should provide correct results", ->
      dst = F(4)
      DSP.asin(dst, F([-0.9479498091526298,-0.37975206467687117,-0.9387113206139908,0.1679918140503386]))
      dst.should.be.identicalTo([-1.2467342892123465,-0.3895282691242395,-1.2188725629806436,0.16879217704919824])

      dst = F(4)
      DSP.asin(dst, F([-0.4831377949599484,-0.9913276752954647,-0.6846233130609999,-0.59893564687258]))
      dst.should.be.identicalTo([-0.5042350052672603,-1.4390018759005088,-0.7540867830252659,-0.6421713301087575])

      dst = F(4)
      DSP.asin(dst, F([0.9617468722169011,-0.8925666993613616,0.9751996188409947,0.975028727069863]))
      dst.should.be.identicalTo([1.2933092811805045,-1.1030056848636987,1.3476211741861017,1.3468503600979747])

      dst = F(4)
      DSP.asin(dst, F([-0.38025766248542175,0.9944856892394226,0.48167522551947056,0.9200018393474378]))
      dst.should.be.identicalTo([-0.39007487052611095,1.4657307647555573,0.5025653049417934,1.1680851784303818])

      dst = F(4)
      DSP.asin(dst, F([-0.7963067103714473,0.820192305249968,-0.0018736701219159318,0.9980855435584478]))
      dst.should.be.identicalTo([-0.9211647518856684,0.961747084135066,-0.0018736712182144575,1.508908240528725])

      dst = F(4)
      DSP.asin(dst, F([0.997333744526079,0.9971838140035659,-0.84516426881537,0.13124977566449753]))
      dst.should.be.identicalTo([1.4977560483622285,1.4957295724057955,-1.00687242035278,0.13162955624741715])

      dst = F(4)
      DSP.asin(dst, F([-0.8826949537523946,-0.9876193235088074,-0.7527080983010253,-0.8935400912601609]))
      dst.should.be.identicalTo([-1.081566273196768,-1.4132761183769171,-0.8521658984147148,-1.1051690203806062])

      dst = F(4)
      DSP.asin(dst, F([-0.8194953704135483,0.2770033780857046,0.5836243421915572,-0.9130318370823726]))
      dst.should.be.identicalTo([-0.9605299155268071,0.2806740426448157,0.6231849140734963,-1.1506563076268488])

      dst = F(4)
      DSP.asin(dst, F([-0.20403901441621236,-0.38561246775856967,0.8719820430690555,-0.5770894564008481]))
      dst.should.be.identicalTo([-0.20548197015406017,-0.39587153650264767,1.059236640508759,-0.6151603156061715])

      dst = F(4)
      DSP.asin(dst, F([-0.7568302549804687,0.7203690505836734,-0.9460494826941316,-0.8755911691537562]))
      dst.should.be.identicalTo([-0.8584498165792573,0.8043342587942042,-1.2408183590397945,-1.0666582810694543])

      dst = F(4)
      DSP.asin(dst, F([-0.6910574147096357,-0.6375520997224391,-0.2118078080511138,0.6759394717603218]))
      dst.should.be.identicalTo([-0.7629509741779729,-0.6913166609917684,-0.2134243671949203,0.7422387565033095])

      dst = F(4)
      DSP.asin(dst, F([-0.9091017424250806,-0.9508771853157816,-0.9056919915346261,0.6095344375145716]))
      dst.should.be.identicalTo([-1.1411226656819358,-1.2560572514908643,-1.133009186439653,0.6554731900606886])

      dst = F(4)
      DSP.asin(dst, F([0.763590726866876,0.08093612179962206,0.6693206250206661,0.4768902855731838]))
      dst.should.be.identicalTo([0.8688559557114378,0.08102474741191021,0.7332940106120036,0.49711336663078254])

      dst = F(4)
      DSP.asin(dst, F([0.8657350978118282,0.9826295171979388,-0.8767650179088099,-0.7070317218021696]))
      dst.should.be.identicalTo([1.046617230871626,1.3841361757122552,-1.0690937216681853,-0.7852920190311915])

      dst = F(4)
      DSP.asin(dst, F([-0.9997010347431747,0.8499520437021422,-0.6121646503875597,0.6653585587475722]))
      dst.should.be.identicalTo([-1.5463430998210537,1.0158942642928988,-0.6587952326370063,0.7279740196800509])

      dst = F(4)
      DSP.asin(dst, F([-0.45508200173851265,0.326332588821133,0.6407101883357483,-0.9483405830890917]))
      dst.should.be.identicalTo([-0.4724643022326126,0.3324211521247221,0.6954228950096206,-1.2479637684195646])

      dst = F(4)
      DSP.asin(dst, F([0.1705960226271801,-0.8010443123124644,0.9264258828403749,-0.8720856798322422]))
      dst.should.be.identicalTo([0.1714345271660332,-0.9290377637141107,1.1848055507295558,-1.0594483837060193])

      dst = F(4)
      DSP.asin(dst, F([-0.6978737017355036,-0.60071404977729,-0.6046824393666874,-0.3889313351652019]))
      dst.should.be.identicalTo([-0.7724244112076627,-0.6443939700839905,-0.649367095279867,-0.3994713132504718])

      dst = F(4)
      DSP.asin(dst, F([-0.9565693905015202,-0.9855064704444365,-0.8446439867860192,-0.9279232420310952]))
      dst.should.be.identicalTo([-1.2749968283728637,-1.400334155612131,-1.0058997807475183,-1.188802508090647])

      dst = F(4)
      DSP.asin(dst, F([-0.9855511604520748,0.8946030996535348,0.7599777638279367,0.5143433630673471]))
      dst.should.be.identicalTo([-1.4005978011464175,1.1075422163526814,0.86327890215527,0.5402417912395291])

      dst = F(4)
      DSP.asin(dst, F([-0.07261464635013047,0.9973874525666276,-0.29611613170457285,-0.15136924280212943]))
      dst.should.be.identicalTo([-0.07267861304928279,1.498495762566023,-0.3006238457281452,-0.15195333044253456])

      dst = F(4)
      DSP.asin(dst, F([-0.8771811629748523,-0.7113820920517491,-0.015228577777068554,0.9585588857773442]))
      dst.should.be.identicalTo([-1.069959717533591,-0.7914627929919122,-0.015229166447352718,1.2818999864359926])

      dst = F(4)
      DSP.asin(dst, F([0.34055079545411016,0.15726485843333704,0.9103142692795722,0.8309726509356192]))
      dst.should.be.identicalTo([0.3475026471168376,0.15792043311433127,1.144042684397532,0.9808537952484699])

      dst = F(4)
      DSP.asin(dst, F([-0.6364186777987005,0.5254976054061433,-0.45046978944212995,-0.6282630710379644]))
      dst.should.be.identicalTo([-0.689846356534386,0.5532998785703549,-0.46729147199653004,-0.6793186398524178])

      dst = F(4)
      DSP.asin(dst, F([-0.9960369963639638,-0.7549960497057066,-0.6997628416786279,0.9832005916090601]))
      dst.should.be.identicalTo([-1.4817387726839208,-0.8556480952073199,-0.7750654625621188,1.3872389410018093])

  describe ".atan", ->
    it "should provide correct results", ->
      dst = F(4)
      DSP.atan(dst, F([0.7044233820823672,0.9897194046961619,0.7749970484411393,0.2356478766691885]))
      dst.should.be.identicalTo([0.613688512043791,0.7802313525415834,0.6593082243262487,0.23142584191961307])

      dst = F(4)
      DSP.atan(dst, F([0.9932008580271017,0.9977777205410825,-0.5047288297329372,-0.8292835920407431]))
      dst.should.be.identicalTo([0.7819870091357234,0.7842857881219272,-0.4674235125661746,-0.6923434998923296])

      dst = F(4)
      DSP.atan(dst, F([-0.9871715127135269,0.996574495497572,0.09893019876378334,-0.6084761153371361]))
      dst.should.be.identicalTo([-0.7789426013093715,0.7836824742763765,0.09860933153835007,-0.546628639081709])

      dst = F(4)
      DSP.atan(dst, F([0.999568786757426,-0.8842700983189585,-0.8778474127716619,0.932829907513454]))
      dst.should.be.identicalTo([0.7851825102832644,-0.7240562633733834,-0.7204404197112405,0.7506599430205451])

      dst = F(4)
      DSP.atan(dst, F([-0.3495603156591442,0.9333078323719332,-0.8370999712422216,0.9672129088525163]))
      dst.should.be.identicalTo([-0.33628306472721803,0.7509154334447325,-0.6969570961549597,0.7687329333019656])

      dst = F(4)
      DSP.atan(dst, F([-0.9857814495708397,-0.9755962394651326,-0.9961518231929152,-0.9044605016928612]))
      dst.should.be.identicalTo([-0.7782381068598104,-0.7730461863436461,-0.7834703681289432,-0.735274008714939])

      dst = F(4)
      DSP.atan(dst, F([-0.9779985599603932,0.1245661977480821,0.6257857525817073,-0.9998090256903287]))
      dst.should.be.identicalTo([-0.7742755401603695,0.12392784339557301,0.5591641513775671,-0.7853026671242355])

      dst = F(4)
      DSP.atan(dst, F([-0.19084069115455005,-0.6728369353360718,0.46336845273217053,-0.19072004942249268]))
      dst.should.be.identicalTo([-0.18857322089269288,-0.5922621717080172,0.4339153516050199,-0.18845681596821737])

      dst = F(4)
      DSP.atan(dst, F([-0.9633456771242336,-0.4257047549460477,-0.9132267436366837,-0.29000695112842434]))
      dst.should.be.identicalTo([-0.7667310149414271,-0.40246742974951827,-0.7400748206123393,-0.2822638338581621])

      dst = F(4)
      DSP.atan(dst, F([0.10654989878292823,-0.8618496923351883,-0.46497162106374496,-0.37614015299769876]))
      dst.should.be.identicalTo([0.10614940719903797,-0.7113333216845359,-0.4352343389814558,-0.35976988157848144])

      dst = F(4)
      DSP.atan(dst, F([0.4337417371496102,0.183022128831384,0.7231881524967428,0.8772524972634802]))
      dst.should.be.identicalTo([0.4092516162873005,0.18101867307984076,0.6261195594036234,0.7201043270849657])

      dst = F(4)
      DSP.atan(dst, F([-0.963800340363927,-0.9660978894744077,-0.9090741547495202,0.8475110942402083]))
      dst.should.be.identicalTo([-0.7669667782924564,-0.7681565238872015,-0.7378058868525277,0.7030473503683716])

      dst = F(4)
      DSP.atan(dst, F([0.8540076616605043,0.4676023633311247,-0.9864574523339102,0.7738793712508963]))
      dst.should.be.identicalTo([0.7068161219137324,0.437395248298318,-0.7785808324506542,0.6586095688775367])

      dst = F(4)
      DSP.atan(dst, F([-0.5884220965928912,-0.9729208747114081,0.9126440031417329,-0.5964920842236224]))
      dst.should.be.identicalTo([-0.5318628372026676,-0.7716736266559874,0.7397569825552617,-0.5378361581670953])

      dst = F(4)
      DSP.atan(dst, F([-0.9897396865604374,0.8422668492145989,0.3581490212995521,0.12947905062488374]))
      dst.should.be.identicalTo([-0.7802415981605176,0.6999874044397407,0.3439160005712686,0.12876267832684654])

      dst = F(4)
      DSP.atan(dst, F([0.9930904786003474,-0.747279946893667,-0.8668075172093552,-0.7396791285103174]))
      dst.should.be.identicalTo([0.78193143983729,-0.6417580007220317,-0.7141711279598121,-0.6368629625638381])

      dst = F(4)
      DSP.atan(dst, F([0.9316084078671587,-0.97940033318491,-0.9546674693932132,-0.511583226177552]))
      dst.should.be.identicalTo([0.7500063965047488,-0.7749915150667009,-0.7622103801410874,-0.47287119162072205])

      dst = F(4)
      DSP.atan(dst, F([0.9776019840161325,-0.9124591364959854,-0.5563744174803251,-0.37902187274364046]))
      dst.should.be.identicalTo([0.7740728013992779,-0.7396561141286322,-0.5077240209746818,-0.3622920249706573])

      dst = F(4)
      DSP.atan(dst, F([0.43738112236160126,0.3782039901034523,0.957313956994985,0.20934657541502408]))
      dst.should.be.identicalTo([0.4123106579781163,0.3615766847611778,0.7635931394856545,0.20636628636980817])

      dst = F(4)
      DSP.atan(dst, F([0.7336827843660122,-0.5491991991888968,0.691913849299138,0.8826369176814224]))
      dst.should.be.identicalTo([0.6329760413039638,-0.5022281847531688,0.6052783766558617,0.7231389986323912])

      dst = F(4)
      DSP.atan(dst, F([-0.2959778813872939,-0.1413446025049259,-0.9680902261535418,-0.8315307373595876]))
      dst.should.be.identicalTo([-0.28776270481084465,-0.1404144521956342,-0.7691860112730456,-0.6936735055234134])

      dst = F(4)
      DSP.atan(dst, F([-0.7585428355959222,0.8130770346731154,0.9779316310769419,-0.9524847527216302]))
      dst.should.be.identicalTo([-0.6489461418505614,0.6826640352621832,0.7742413302107644,-0.7610671817840188])

      dst = F(4)
      DSP.atan(dst, F([-0.4430071142331583,-0.9853734920093773,0.3586839198507034,-0.32624246687199665]))
      dst.should.be.identicalTo([-0.4170234447380066,-0.7780311649752342,0.34439000711409373,-0.3153552571265634])

      dst = F(4)
      DSP.atan(dst, F([0.7068244688911104,-0.020591335097834448,-0.9736005316993576,0.3380868343101937]))
      dst.should.be.identicalTo([0.6152914754249521,-0.020588425574811397,-0.7720226633738263,0.3260225871164791])

      dst = F(4)
      DSP.atan(dst, F([0.05077490753194591,-0.698602793840273,0.6560451572535058,-0.9503625445177465]))
      dst.should.be.identicalTo([0.05073134078885238,-0.6097876264793345,0.5806131599279432,-0.7599532825458551])

  describe ".abs", ->
    it "should provide correct results", ->
      dst = F(4)
      DSP.abs(dst, F([119,844,770,695]))
      dst.should.be.identicalTo([119,844,770,695])

      dst = F(4)
      DSP.abs(dst, F([291,686,59,885]))
      dst.should.be.identicalTo([291,686,59,885])

      dst = F(4)
      DSP.abs(dst, F([200,298,817,623]))
      dst.should.be.identicalTo([200,298,817,623])

      dst = F(4)
      DSP.abs(dst, F([486,707,158,217]))
      dst.should.be.identicalTo([486,707,158,217])

      dst = F(4)
      DSP.abs(dst, F([50,541,951,767]))
      dst.should.be.identicalTo([50,541,951,767])

      dst = F(4)
      DSP.abs(dst, F([558,358,494,139]))
      dst.should.be.identicalTo([558,358,494,139])

      dst = F(4)
      DSP.abs(dst, F([794,673,3,244]))
      dst.should.be.identicalTo([794,673,3,244])

      dst = F(4)
      DSP.abs(dst, F([517,522,707,270]))
      dst.should.be.identicalTo([517,522,707,270])

      dst = F(4)
      DSP.abs(dst, F([118,137,51,634]))
      dst.should.be.identicalTo([118,137,51,634])

    it "should be able to deal with negative values", ->
      dst = F(4)
      DSP.abs(dst, F([650,610,-273,310]))
      dst.should.be.identicalTo([650,610,273,310])

      dst = F(4)
      DSP.abs(dst, F([-774,901,446,752]))
      dst.should.be.identicalTo([774,901,446,752])

      dst = F(4)
      DSP.abs(dst, F([308,802,-818,-262]))
      dst.should.be.identicalTo([308,802,818,262])

      dst = F(4)
      DSP.abs(dst, F([-166,847,-736,154]))
      dst.should.be.identicalTo([166,847,736,154])

      dst = F(4)
      DSP.abs(dst, F([309,-784,-478,-355]))
      dst.should.be.identicalTo([309,784,478,355])

      dst = F(4)
      DSP.abs(dst, F([-757,-496,880,401]))
      dst.should.be.identicalTo([757,496,880,401])

      dst = F(4)
      DSP.abs(dst, F([779,-738,75,-427]))
      dst.should.be.identicalTo([779,738,75,427])

      dst = F(4)
      DSP.abs(dst, F([-522,24,645,-359]))
      dst.should.be.identicalTo([522,24,645,359])

      dst = F(4)
      DSP.abs(dst, F([311,815,193,-401]))
      dst.should.be.identicalTo([311,815,193,401])

    it "should be able to deal with decimal values", ->
      dst = F(4)
      DSP.abs(dst, F([-113.94355306401849,713.2789045572281,89.32031504809856,-936.2620343454182]))
      dst.should.be.identicalTo([113.94355306401849,713.2789045572281,89.32031504809856,936.2620343454182])

      dst = F(4)
      DSP.abs(dst, F([-885.4275494813919,475.5735225044191,-537.9812950268388,803.5572706721723]))
      dst.should.be.identicalTo([885.4275494813919,475.5735225044191,537.9812950268388,803.5572706721723])

      dst = F(4)
      DSP.abs(dst, F([-507.0505612529814,-486.62449372932315,132.51455454155803,637.1953813359141]))
      dst.should.be.identicalTo([507.0505612529814,486.62449372932315,132.51455454155803,637.1953813359141])

      dst = F(4)
      DSP.abs(dst, F([269.3535001017153,745.7673884928226,557.4304079636931,609.7808037884533]))
      dst.should.be.identicalTo([269.3535001017153,745.7673884928226,557.4304079636931,609.7808037884533])

      dst = F(4)
      DSP.abs(dst, F([-100.9902530349791,43.80371142178774,359.90449599921703,-460.75081871822476]))
      dst.should.be.identicalTo([100.9902530349791,43.80371142178774,359.90449599921703,460.75081871822476])

      dst = F(4)
      DSP.abs(dst, F([-182.88179533556104,134.11732064560056,-189.2410754226148,-527.1865129470825]))
      dst.should.be.identicalTo([182.88179533556104,134.11732064560056,189.2410754226148,527.1865129470825])

      dst = F(4)
      DSP.abs(dst, F([443.70697252452374,493.02905052900314,-635.1478728465736,-135.9188798815012]))
      dst.should.be.identicalTo([443.70697252452374,493.02905052900314,635.1478728465736,135.9188798815012])

      dst = F(4)
      DSP.abs(dst, F([444.7514293715358,-995.5495134927332,122.36624909564853,192.73309223353863]))
      dst.should.be.identicalTo([444.7514293715358,995.5495134927332,122.36624909564853,192.73309223353863])

      dst = F(4)
      DSP.abs(dst, F([-675.3329848870635,-550.5720665678382,-849.9420965090394,660.9326498582959]))
      dst.should.be.identicalTo([675.3329848870635,550.5720665678382,849.9420965090394,660.9326498582959])

  describe ".cos", ->
    it "should provide correct results", ->
      dst = F(4)
      DSP.cos(dst, F([492,24,6,933]))
      dst.should.be.identicalTo([-0.3341937939677003,0.424179007336997,0.960170286650366,-0.998594868867907])

      dst = F(4)
      DSP.cos(dst, F([5,840,821,947]))
      dst.should.be.identicalTo([0.28366218546322625,-0.3672352549023715,-0.5024921955433742,-0.18904061881620535])

      dst = F(4)
      DSP.cos(dst, F([485,789,377,672]))
      dst.should.be.identicalTo([0.36726329284539677,-0.895944170184236,0.9999605591233189,0.9550915099898928])

      dst = F(4)
      DSP.cos(dst, F([806,340,728,605]))
      dst.should.be.identicalTo([-0.18048974819626606,0.7596683100072248,0.660361983093894,-0.24101756111533412])

      dst = F(4)
      DSP.cos(dst, F([693,236,48,672]))
      dst.should.be.identicalTo([-0.2752212989629269,-0.9284601245807608,-0.6401443394691997,0.9550915099898928])

      dst = F(4)
      DSP.cos(dst, F([305,92,55,159]))
      dst.should.be.identicalTo([-0.9649581189333869,-0.626444447910339,0.022126756261955736,-0.34249477911590703])

      dst = F(4)
      DSP.cos(dst, F([102,646,941,816]))
      dst.should.be.identicalTo([0.10158570369662134,0.39191269689736824,0.09286624723928816,0.6865303881402984])

      dst = F(4)
      DSP.cos(dst, F([470,159,111,319]))
      dst.should.be.identicalTo([0.3258383046087229,-0.34249477911590703,-0.5025443191453852,0.12799358610147818])

      dst = F(4)
      DSP.cos(dst, F([588,455,371,701]))
      dst.should.be.identicalTo([-0.8667370227056902,-0.8623341359607118,0.9576508012289697,-0.9111054141383427])

    it "should be able to deal with negative values", ->
      dst = F(4)
      DSP.cos(dst, F([-775,385,-785,-864]))
      dst.should.be.identicalTo([-0.5625036986477305,-0.1542812333919083,0.9217746469028693,-0.9980773599075725])

      dst = F(4)
      DSP.cos(dst, F([-373,-960,-349,-16]))
      dst.should.be.identicalTo([-0.6603393459690063,0.24104681672640127,-0.9601618634146094,-0.9576594803233847])

      dst = F(4)
      DSP.cos(dst, F([-660,263,-914,679]))
      dst.should.be.identicalTo([0.9649502084978204,0.6264679441263539,-0.9793728734041286,0.9147179972350201])

      dst = F(4)
      DSP.cos(dst, F([357,-841,-242,-269]))
      dst.should.be.identicalTo([0.4161742465410129,0.5842577465661262,-0.9952637062792294,0.3837262818331512])

      dst = F(4)
      DSP.cos(dst, F([-870,-187,190,251]))
      dst.should.be.identicalTo([-0.9756425398872068,0.07516615000819327,0.06630685835171127,0.9468777054203809])

      dst = F(4)
      DSP.cos(dst, F([-900,674,-900,744]))
      dst.should.be.identicalTo([0.06624670220315812,-0.12802348245924622,0.06624670220315812,-0.8486021709533231])

      dst = F(4)
      DSP.cos(dst, F([858,-426,-733,-859]))
      dst.should.be.identicalTo([-0.941005909636182,0.3090513969532009,-0.5327820018313022,-0.2236821894224926])

      dst = F(4)
      DSP.cos(dst, F([-813,-435,621,219]))
      dst.should.be.identicalTo([-0.7822684476443909,0.11035728365811025,0.5102288964866329,0.6125720663156844])

      dst = F(4)
      DSP.cos(dst, F([-835,224,678,-842]))
      dst.should.be.identicalTo([0.7877516509952246,-0.5841843515845697,0.8342566037918699,0.9985868702843739])

    it "should be able to deal with decimal values", ->
      dst = F(4)
      DSP.cos(dst, F([844.3818856030703,-320.0954329222441,429.24825102090836,504.6162735670805]))
      dst.should.be.identicalTo([-0.7606138373400368,0.9403911430868874,-0.408539905065236,-0.38079199072659525])

      dst = F(4)
      DSP.cos(dst, F([69.8436489328742,62.79047764837742,-456.74877567216754,-747.4366035312414]))
      dst.should.be.identicalTo([0.7461002621591252,0.9991441592735656,-0.3456725516263838,0.965757743928139])

      dst = F(4)
      DSP.cos(dst, F([-592.5780958496034,970.2469585463405,-789.9478864856064,583.7955288589001]))
      dst.should.be.identicalTo([-0.3782273548206674,-0.8750915307301325,-0.16194947890201802,0.8573461522600682])

      dst = F(4)
      DSP.cos(dst, F([80.4069060832262,891.5754174813628,-496.85776652768254,595.2363135293126]))
      dst.should.be.identicalTo([0.291977150441925,0.8039455033868513,0.8841488488683404,-0.09534925400942637])

      dst = F(4)
      DSP.cos(dst, F([-950.5765712819993,464.03735876083374,325.9277939796448,806.877076625824]))
      dst.should.be.identicalTo([-0.2423560552284239,0.6071289191158032,0.6982531448357409,-0.8716510826777756])

      dst = F(4)
      DSP.cos(dst, F([517.4345709383488,526.5646995976567,-399.2929388768971,-894.4794745184481]))
      dst.should.be.identicalTo([-0.5992623964805077,0.3409526867815226,-0.9521283949052936,-0.6414329076814927])

      dst = F(4)
      DSP.cos(dst, F([-856.6298885270953,627.8368611820042,795.668562874198,271.88490983098745]))
      dst.should.be.identicalTo([-0.5191793106461041,0.8862227300183668,-0.6632662783240657,-0.13671577580227892])

      dst = F(4)
      DSP.cos(dst, F([887.111690826714,606.3749794848263,370.75244123116136,-387.12996942922473]))
      dst.should.be.identicalTo([0.3785542600789093,-0.9988674603563733,0.9990096776800208,-0.7557006493556656])

      dst = F(4)
      DSP.cos(dst, F([169.3766093812883,442.7466136403382,145.50076937302947,-103.40725351125002]))
      dst.should.be.identicalTo([0.9639323819127266,-0.976342657605048,0.5507721091314198,-0.9650128208686024])

  describe ".sin", ->
    it "should provide correct results", ->
      dst = F(4)
      DSP.sin(dst, F([708,875,43,886]))
      dst.should.be.identicalTo([-0.9093225141277265,0.9977932782684322,-0.8317747426285983,0.07081237357015184])

      dst = F(4)
      DSP.sin(dst, F([228,637,459,429]))
      dst.should.be.identicalTo([0.9726230624856244,0.6767275715505089,0.32165094574030556,0.9851410837124249])

      dst = F(4)
      DSP.sin(dst, F([101,314,780,947]))
      dst.should.be.identicalTo([0.45202578717835057,-0.15859290602857282,0.773928862147125,-0.9819692685810417])

      dst = F(4)
      DSP.sin(dst, F([412,968,427,779]))
      dst.should.be.identicalTo([-0.43619188095326605,0.3796914013979365,-0.2537942055031938,-0.11472492335334811])

      dst = F(4)
      DSP.sin(dst, F([477,904,549,998]))
      dst.should.be.identicalTo([-0.4986870255363352,-0.7023434147360162,0.7023648723213674,-0.8554731519696874])

      dst = F(4)
      DSP.sin(dst, F([970,717,558,553]))
      dst.should.be.identicalTo([0.6831956801127874,0.6570320493166915,-0.9332988757369771,0.07960864038153331])

      dst = F(4)
      DSP.sin(dst, F([31,346,754,371]))
      dst.should.be.identicalTo([-0.404037645323065,0.412145950487085,0.01776220433321534,0.28793218456003195])

      dst = F(4)
      DSP.sin(dst, F([653,977,258,279]))
      dst.should.be.identicalTo([-0.43611050264796214,0.03530792620481886,0.37963562682930313,0.5660827877060441])

      dst = F(4)
      DSP.sin(dst, F([824,46,385,113]))
      dst.should.be.identicalTo([0.7850177373512154,0.9017883476488092,0.9880269738337468,-0.09718190589320902])

    it "should be able to deal with negative values", ->
      dst = F(4)
      DSP.sin(dst, F([-443,-398,588,-163]))
      dst.should.be.identicalTo([0.035428428178979524,-0.8317580087191733,-0.49876540925697305,0.35491017584493534])

      dst = F(4)
      DSP.sin(dst, F([715,-840,683,228]))
      dst.should.be.identicalTo([-0.9589071712941251,0.9301280920157128,-0.9563935393373727,0.9726230624856244])

      dst = F(4)
      DSP.sin(dst, F([-719,-985,513,653]))
      dst.should.be.identicalTo([-0.41206355362767066,0.9938786672030538,-0.7958423494121123,-0.43611050264796214])

      dst = F(4)
      DSP.sin(dst, F([-768,-829,-102,-373]))
      dst.should.be.identicalTo([-0.9928798314963556,0.3713481244279862,-0.9948267913584063,-0.7509673416102893])

      dst = F(4)
      DSP.sin(dst, F([801,128,-420,169]))
      dst.should.be.identicalTo([0.10592756243034339,0.7210377105017316,0.8268117243068012,-0.6019998676776046])

      dst = F(4)
      DSP.sin(dst, F([-354,753,-714,417]))
      dst.should.be.identicalTo([-0.8414546973619527,-0.8317412740539448,0.7568419012610816,0.7391603938754915])

      dst = F(4)
      DSP.sin(dst, F([-900,-909,169,-351]))
      dst.should.be.identicalTo([-0.9978032744219705,0.8818272681692509,-0.6019998676776046,0.7567827912998033])

      dst = F(4)
      DSP.sin(dst, F([-924,334,-698,-875]))
      dst.should.be.identicalTo([-0.3632556223924401,0.8366721491002946,-0.5366237918890951,-0.9977932782684322])

      dst = F(4)
      DSP.sin(dst, F([334,-733,473,286]))
      dst.should.be.identicalTo([0.8366721491002946,0.8462525264509585,0.9819464674138593,-0.11481475884166603])

    it "should be able to deal with decimal values", ->
      dst = F(4)
      DSP.sin(dst, F([-604.3019876815379,424.8524666763842,-991.2007269449532,326.91611954942346]))
      dst.should.be.identicalTo([-0.8984375603847213,-0.6724088750135231,0.9996011439225351,0.18933374663949218])

      dst = F(4)
      DSP.sin(dst, F([-311.73825543373823,-453.05589586496353,-261.2135475501418,-230.05362274125218]))
      dst.should.be.identicalTo([0.6598226585033741,-0.6182810578121639,0.44516391167250696,0.6573968777869129])

      dst = F(4)
      DSP.sin(dst, F([763.5352071374655,-752.0521180704236,706.3925098627806,-256.47495640441775]))
      dst.should.be.identicalTo([-0.1278415003742643,0.936135287203824,0.4491709470862156,0.9068046551045192])

      dst = F(4)
      DSP.sin(dst, F([249.78634249418974,717.3138982616365,-339.17331555858254,-366.48403014987707]))
      dst.should.be.identicalTo([-0.9995581991292518,0.8576968130096599,0.11841254750372664,-0.883044371564514])

      dst = F(4)
      DSP.sin(dst, F([662.4544677324593,-555.7371713221073,-810.5952558107674,-532.6331648975611]))
      dst.should.be.identicalTo([0.40920460857045,-0.3190513573505676,-0.06430677994937578,0.9911406451063676])

      dst = F(4)
      DSP.sin(dst, F([-663.7307615019381,874.4604736566544,-429.449949413538,-729.3360601179302]))
      dst.should.be.identicalTo([0.754381627722623,0.8901690040394954,-0.812392890503447,-0.4675918491097961])

      dst = F(4)
      DSP.sin(dst, F([-178.64432092756033,-427.73232609033585,-679.3876402080059,-145.33906476572156]))
      dst.should.be.identicalTo([-0.41365075613475716,-0.4579832438316917,-0.7198783447781426,-0.7350922236205412])

      dst = F(4)
      DSP.sin(dst, F([258.7075945921242,-836.8011326529086,535.6880147010088,984.0003657154739]))
      dst.should.be.identicalTo([0.8898411934796204,-0.9075811283412465,0.9989205909337815,-0.6302422129033677])

      dst = F(4)
      DSP.sin(dst, F([-788.5672757402062,845.3683708794415,285.1157356053591,-55.89685356244445]))
      dst.should.be.identicalTo([0.027516215703538204,-0.27630477354165645,0.6955577210562959,0.6066296659664036])

  describe ".tan", ->
    it "should provide correct results", ->
      dst = F(4)
      DSP.tan(dst, F([275,770,148,149]))
      dst.should.be.identicalTo([-9.001181796296159,0.3201068544908864,0.3595365943310712,4.356147801749622])

      dst = F(4)
      DSP.tan(dst, F([751,304,701,205]))
      dst.should.be.identicalTo([0.1607185440726435,-0.9030314218446068,0.4523882845627775,1.0224078883216963])

      dst = F(4)
      DSP.tan(dst, F([620,881,664,741]))
      dst.should.be.identicalTo([1.995500735812638,4.541363517789569,2.086936354817569,-0.44162351920876836])

      dst = F(4)
      DSP.tan(dst, F([200,123,156,375]))
      dst.should.be.identicalTo([-1.7925274837903817,0.5179274715856552,-1.8695649970375994,2.237341969931419])

      dst = F(4)
      DSP.tan(dst, F([343,605,157,215]))
      dst.should.be.identicalTo([0.6359022617264883,-4.026763652295865,-0.07980143414928566,4.956141532909058])

      dst = F(4)
      DSP.tan(dst, F([664,928,772,636]))
      dst.should.be.identicalTo([2.086936354817569,2.8213130272354316,-1.0973768793308942,5.739067843398197])

      dst = F(4)
      DSP.tan(dst, F([616,461,322,410]))
      dst.should.be.identicalTo([0.25304224479821735,-1.059159264606733,75.48441435187762,-45.12160146956503])

      dst = F(4)
      DSP.tan(dst, F([619,302,720,314]))
      dst.should.be.identicalTo([0.10664884614245267,0.4311939452941943,0.6484464631832305,-0.1606257764339343])

      dst = F(4)
      DSP.tan(dst, F([652,790,839,492]))
      dst.should.be.identicalTo([-8.326614466827094,9.008605273835942,0.1972620050231449,-2.8202330442490084])

    it "should be able to deal with negative values", ->
      dst = F(4)
      DSP.tan(dst, F([946,36,869,257]))
      dst.should.be.identicalTo([0.400121680243227,7.750470905699148,-2.74265124607259,-0.699808745845877])

      dst = F(4)
      DSP.tan(dst, F([-913,-280,-598,176]))
      dst.should.be.identicalTo([2.598756603035475,-0.42073643065214333,-1.9521670049279674,0.07092999229222396])

      dst = F(4)
      DSP.tan(dst, F([498,186,-663,-517]))
      dst.should.be.identicalTo([-17.352653686610658,0.7539643023649815,-0.12458879220310769,4.737959216732927])

      dst = F(4)
      DSP.tan(dst, F([523,-956,726,195]))
      dst.should.be.identicalTo([13.276903737429045,-1.4157647677287177,0.30069798080014576,0.22493805080802215])

      dst = F(4)
      DSP.tan(dst, F([383,589,81,775]))
      dst.should.be.identicalTo([-0.2813970729750388,20.550379697659352,-0.8109944158318942,-1.4698477011970232])

      dst = F(4)
      DSP.tan(dst, F([-115,-283,-618,-209]))
      dst.should.be.identicalTo([2.9018013542793097,-0.26244959793717443,1.2441164414887007,11.864184723669519])

      dst = F(4)
      DSP.tan(dst, F([46,979,500,-684]))
      dst.should.be.identicalTo([-2.086613531121382,-2.4061155904969183,0.52924386474448,1.1786095069932414])

      dst = F(4)
      DSP.tan(dst, F([466,-703,-480,-296]))
      dst.should.be.identicalTo([1.72046803088796,0.8713419150447788,0.7820119884475774,-0.8258247103286473])

      dst = F(4)
      DSP.tan(dst, F([-926,435,562,-435]))
      dst.should.be.identicalTo([0.9693439870669377,9.006129437754185,-0.3594685137860881,-9.006129437754185])

    it "should be able to deal with decimal values", ->
      dst = F(4)
      DSP.tan(dst, F([-951.8575337715447,-826.2337702326477,-995.2531554736197,-655.4719307459891]))
      dst.should.be.identicalTo([0.0450707475089533,0.005097705624625973,0.7317458255103366,2.0708844769112904])

      dst = F(4)
      DSP.tan(dst, F([473.98962173610926,667.8984928876162,-223.60834013670683,-568.4714294038713]))
      dst.should.be.identicalTo([-0.4120710584477723,-3.1212248123091104,-0.620368317372616,0.15813972391172926])

      dst = F(4)
      DSP.tan(dst, F([-760.2012329734862,-975.1751283183694,16.28387486562133,699.6691273525357]))
      dst.should.be.identicalTo([0.06427749935091098,-3.358530562052588,0.6493406950355178,-1.2758950907594622])

      dst = F(4)
      DSP.tan(dst, F([438.8169292360544,77.93682534247637,239.2899221740663,-741.4051597006619]))
      dst.should.be.identicalTo([-1.5783025021621577,-0.6885367379431789,0.5844141764536659,0.010706955645702926])

      dst = F(4)
      DSP.tan(dst, F([-541.8548490852118,-635.8599653467536,980.138429440558,572.8894108906388]))
      dst.should.be.identicalTo([-14.286194727473747,-3.094651555429499,-0.038497481038395585,2.063575939676104])

      dst = F(4)
      DSP.tan(dst, F([657.2020566090941,-815.0726808235049,297.7706794627011,-397.94842433184385]))
      dst.should.be.identicalTo([0.6977168559910942,-5.804243934350636,-0.8096916797066775,1.6798359926582447])

      dst = F(4)
      DSP.tan(dst, F([44.606460724025965,-248.20736004039645,769.5927764289081,75.34832367673516]))
      dst.should.be.identicalTo([0.7202133883616942,-0.021543738926051565,-0.09773310368014967,-0.049941467902984184])

      dst = F(4)
      DSP.tan(dst, F([-929.0948798879981,-120.98976643756032,-110.95599830150604,465.11333528906107]))
      dst.should.be.identicalTo([1.0643189937895943,25.99547549349939,-1.5582830389778979,0.1589410329517878])

      dst = F(4)
      DSP.tan(dst, F([-619.2412306554615,669.570249505341,281.52328543365,650.3844116814435]))
      dst.should.be.identicalTo([-0.36217295650042713,0.435837631434111,-2.7332063640739666,0.07487182491120592])

  describe ".floor", ->
    it "should provide correct results", ->
      dst = F(4)
      DSP.floor(dst, F([37,42,342,762]))
      dst.should.be.identicalTo([37,42,342,762])

      dst = F(4)
      DSP.floor(dst, F([39,186,190,754]))
      dst.should.be.identicalTo([39,186,190,754])

      dst = F(4)
      DSP.floor(dst, F([997,588,175,528]))
      dst.should.be.identicalTo([997,588,175,528])

      dst = F(4)
      DSP.floor(dst, F([497,458,290,911]))
      dst.should.be.identicalTo([497,458,290,911])

      dst = F(4)
      DSP.floor(dst, F([959,873,818,977]))
      dst.should.be.identicalTo([959,873,818,977])

      dst = F(4)
      DSP.floor(dst, F([910,204,493,227]))
      dst.should.be.identicalTo([910,204,493,227])

      dst = F(4)
      DSP.floor(dst, F([792,933,933,634]))
      dst.should.be.identicalTo([792,933,933,634])

      dst = F(4)
      DSP.floor(dst, F([510,144,534,646]))
      dst.should.be.identicalTo([510,144,534,646])

      dst = F(4)
      DSP.floor(dst, F([284,954,13,703]))
      dst.should.be.identicalTo([284,954,13,703])

    it "should be able to deal with negative values", ->
      dst = F(4)
      DSP.floor(dst, F([-948,-467,904,-850]))
      dst.should.be.identicalTo([-948,-467,904,-850])

      dst = F(4)
      DSP.floor(dst, F([331,-24,-193,655]))
      dst.should.be.identicalTo([331,-24,-193,655])

      dst = F(4)
      DSP.floor(dst, F([-396,305,58,-225]))
      dst.should.be.identicalTo([-396,305,58,-225])

      dst = F(4)
      DSP.floor(dst, F([-889,-989,-580,197]))
      dst.should.be.identicalTo([-889,-989,-580,197])

      dst = F(4)
      DSP.floor(dst, F([-441,805,507,507]))
      dst.should.be.identicalTo([-441,805,507,507])

      dst = F(4)
      DSP.floor(dst, F([783,241,914,716]))
      dst.should.be.identicalTo([783,241,914,716])

      dst = F(4)
      DSP.floor(dst, F([741,-316,385,-785]))
      dst.should.be.identicalTo([741,-316,385,-785])

      dst = F(4)
      DSP.floor(dst, F([-854,-494,-539,377]))
      dst.should.be.identicalTo([-854,-494,-539,377])

      dst = F(4)
      DSP.floor(dst, F([-67,549,-4,520]))
      dst.should.be.identicalTo([-67,549,-4,520])

    it "should be able to deal with decimal values", ->
      dst = F(4)
      DSP.floor(dst, F([-964.3439133651555,-776.8948446027935,299.41705195233226,-971.3707431219518]))
      dst.should.be.identicalTo([-965,-777,299,-972])

      dst = F(4)
      DSP.floor(dst, F([205.30538819730282,-532.3934159241617,-664.634273853153,-878.9872764609754]))
      dst.should.be.identicalTo([205,-533,-665,-879])

      dst = F(4)
      DSP.floor(dst, F([166.76875622943044,347.96174615621567,-606.1405916698277,-459.3151812441647]))
      dst.should.be.identicalTo([166,347,-607,-460])

      dst = F(4)
      DSP.floor(dst, F([-661.070007365197,-171.40982998535037,-246.10135378316045,768.7861816957593]))
      dst.should.be.identicalTo([-662,-172,-247,768])

      dst = F(4)
      DSP.floor(dst, F([-422.8514195419848,856.6253883764148,437.8657825291157,-50.09121634066105]))
      dst.should.be.identicalTo([-423,856,437,-51])

      dst = F(4)
      DSP.floor(dst, F([-593.0654439143836,381.7968210205436,-247.2262061201036,847.7158448658884]))
      dst.should.be.identicalTo([-594,381,-248,847])

      dst = F(4)
      DSP.floor(dst, F([-206.87677338719368,-836.1881747841835,861.7155225947499,-271.3405159302056]))
      dst.should.be.identicalTo([-207,-837,861,-272])

      dst = F(4)
      DSP.floor(dst, F([300.4317134618759,-9.783496614545584,627.0715612918139,-957.7022567391396]))
      dst.should.be.identicalTo([300,-10,627,-958])

      dst = F(4)
      DSP.floor(dst, F([-343.6468131840229,-437.77259066700935,832.6526107266545,-295.6105708144605]))
      dst.should.be.identicalTo([-344,-438,832,-296])

  describe ".ceil", ->
    it "should provide correct results", ->
      dst = F(4)
      DSP.ceil(dst, F([260,658,245,510]))
      dst.should.be.identicalTo([260,658,245,510])

      dst = F(4)
      DSP.ceil(dst, F([695,854,303,609]))
      dst.should.be.identicalTo([695,854,303,609])

      dst = F(4)
      DSP.ceil(dst, F([294,544,663,379]))
      dst.should.be.identicalTo([294,544,663,379])

      dst = F(4)
      DSP.ceil(dst, F([726,385,463,845]))
      dst.should.be.identicalTo([726,385,463,845])

      dst = F(4)
      DSP.ceil(dst, F([571,99,490,897]))
      dst.should.be.identicalTo([571,99,490,897])

      dst = F(4)
      DSP.ceil(dst, F([690,41,545,190]))
      dst.should.be.identicalTo([690,41,545,190])

      dst = F(4)
      DSP.ceil(dst, F([426,843,394,737]))
      dst.should.be.identicalTo([426,843,394,737])

      dst = F(4)
      DSP.ceil(dst, F([3,616,424,828]))
      dst.should.be.identicalTo([3,616,424,828])

      dst = F(4)
      DSP.ceil(dst, F([996,394,578,908]))
      dst.should.be.identicalTo([996,394,578,908])

    it "should be able to deal with negative values", ->
      dst = F(4)
      DSP.ceil(dst, F([-749,-710,-998,-854]))
      dst.should.be.identicalTo([-749,-710,-998,-854])

      dst = F(4)
      DSP.ceil(dst, F([-741,-712,-68,363]))
      dst.should.be.identicalTo([-741,-712,-68,363])

      dst = F(4)
      DSP.ceil(dst, F([334,-613,-207,-305]))
      dst.should.be.identicalTo([334,-613,-207,-305])

      dst = F(4)
      DSP.ceil(dst, F([643,464,802,-726]))
      dst.should.be.identicalTo([643,464,802,-726])

      dst = F(4)
      DSP.ceil(dst, F([208,-50,-372,612]))
      dst.should.be.identicalTo([208,-50,-372,612])

      dst = F(4)
      DSP.ceil(dst, F([-874,-478,-515,494]))
      dst.should.be.identicalTo([-874,-478,-515,494])

      dst = F(4)
      DSP.ceil(dst, F([-832,253,-251,-459]))
      dst.should.be.identicalTo([-832,253,-251,-459])

      dst = F(4)
      DSP.ceil(dst, F([97,191,-151,-883]))
      dst.should.be.identicalTo([97,191,-151,-883])

      dst = F(4)
      DSP.ceil(dst, F([426,389,-325,-722]))
      dst.should.be.identicalTo([426,389,-325,-722])

    it "should be able to deal with decimal values", ->
      dst = F(4)
      DSP.ceil(dst, F([71.55867060646415,-214.71129171550274,-786.2984924577177,613.5131972841918]))
      dst.should.be.identicalTo([72,-214,-786,614])

      dst = F(4)
      DSP.ceil(dst, F([393.80055852234364,-337.00432162731886,-27.298009023070335,-385.6712277047336]))
      dst.should.be.identicalTo([394,-337,-27,-385])

      dst = F(4)
      DSP.ceil(dst, F([825.4248979501426,671.7203631997108,277.31309505179524,113.80593897774816]))
      dst.should.be.identicalTo([826,672,278,114])

      dst = F(4)
      DSP.ceil(dst, F([-569.5767854340374,143.2151896879077,-675.8078564889729,931.5523034892976]))
      dst.should.be.identicalTo([-569,144,-675,932])

      dst = F(4)
      DSP.ceil(dst, F([-328.63991474732757,-942.4290177412331,-901.5754787251353,872.3218995146453]))
      dst.should.be.identicalTo([-328,-942,-901,873])

      dst = F(4)
      DSP.ceil(dst, F([656.5065430477262,581.8843049928546,-181.67387694120407,-572.1365846693516]))
      dst.should.be.identicalTo([657,582,-181,-572])

      dst = F(4)
      DSP.ceil(dst, F([-84.53815151005983,656.3626183196902,-751.9896333105862,210.12438833713531]))
      dst.should.be.identicalTo([-84,657,-751,211])

      dst = F(4)
      DSP.ceil(dst, F([521.8214965425432,-223.2564021833241,500.8180630393326,-981.6649639979005]))
      dst.should.be.identicalTo([522,-223,501,-981])

      dst = F(4)
      DSP.ceil(dst, F([7.189578376710415,240.08653359487653,-74.68059659004211,305.92996114864945]))
      dst.should.be.identicalTo([8,241,-74,306])

  describe ".round", ->
    it "should provide correct results", ->
      dst = F(4)
      DSP.round(dst, F([989,995,624,906]))
      dst.should.be.identicalTo([989,995,624,906])

      dst = F(4)
      DSP.round(dst, F([724,939,687,264]))
      dst.should.be.identicalTo([724,939,687,264])

      dst = F(4)
      DSP.round(dst, F([704,803,350,228]))
      dst.should.be.identicalTo([704,803,350,228])

      dst = F(4)
      DSP.round(dst, F([557,814,472,634]))
      dst.should.be.identicalTo([557,814,472,634])

      dst = F(4)
      DSP.round(dst, F([618,573,216,981]))
      dst.should.be.identicalTo([618,573,216,981])

      dst = F(4)
      DSP.round(dst, F([960,608,56,887]))
      dst.should.be.identicalTo([960,608,56,887])

      dst = F(4)
      DSP.round(dst, F([100,415,714,960]))
      dst.should.be.identicalTo([100,415,714,960])

      dst = F(4)
      DSP.round(dst, F([754,831,263,824]))
      dst.should.be.identicalTo([754,831,263,824])

      dst = F(4)
      DSP.round(dst, F([122,298,420,357]))
      dst.should.be.identicalTo([122,298,420,357])

    it "should be able to deal with negative values", ->
      dst = F(4)
      DSP.round(dst, F([-662,879,928,152]))
      dst.should.be.identicalTo([-662,879,928,152])

      dst = F(4)
      DSP.round(dst, F([-781,-387,132,-75]))
      dst.should.be.identicalTo([-781,-387,132,-75])

      dst = F(4)
      DSP.round(dst, F([377,-967,110,862]))
      dst.should.be.identicalTo([377,-967,110,862])

      dst = F(4)
      DSP.round(dst, F([255,612,-833,254]))
      dst.should.be.identicalTo([255,612,-833,254])

      dst = F(4)
      DSP.round(dst, F([-493,268,-62,638]))
      dst.should.be.identicalTo([-493,268,-62,638])

      dst = F(4)
      DSP.round(dst, F([895,-318,658,405]))
      dst.should.be.identicalTo([895,-318,658,405])

      dst = F(4)
      DSP.round(dst, F([321,907,56,-122]))
      dst.should.be.identicalTo([321,907,56,-122])

      dst = F(4)
      DSP.round(dst, F([-737,966,-632,-973]))
      dst.should.be.identicalTo([-737,966,-632,-973])

      dst = F(4)
      DSP.round(dst, F([170,-616,582,101]))
      dst.should.be.identicalTo([170,-616,582,101])

    it "should be able to deal with decimal values", ->
      dst = F(4)
      DSP.round(dst, F([-476.4967826195061,883.6545743979514,-198.23159836232662,151.6108987852931]))
      dst.should.be.identicalTo([-476,884,-198,152])

      dst = F(4)
      DSP.round(dst, F([641.4627837948501,-260.6056504882872,-911.2711348570883,475.7287139073014]))
      dst.should.be.identicalTo([641,-261,-911,476])

      dst = F(4)
      DSP.round(dst, F([-920.4061613418162,-473.91310799866915,-467.7555849775672,70.92214794829488]))
      dst.should.be.identicalTo([-920,-474,-468,71])

      dst = F(4)
      DSP.round(dst, F([424.6097602881491,-706.5371936187148,-541.288492269814,-915.4771817848086]))
      dst.should.be.identicalTo([425,-707,-541,-915])

      dst = F(4)
      DSP.round(dst, F([696.7848925851285,178.33781242370605,-748.9364477805793,-716.0529778338969]))
      dst.should.be.identicalTo([697,178,-749,-716])

      dst = F(4)
      DSP.round(dst, F([-109.20689161866903,224.57417333498597,886.6986725479364,-98.53771422058344]))
      dst.should.be.identicalTo([-109,225,887,-99])

      dst = F(4)
      DSP.round(dst, F([-848.9527306519449,352.8227498754859,891.9901344925165,689.1205823048949]))
      dst.should.be.identicalTo([-849,353,892,689])

      dst = F(4)
      DSP.round(dst, F([761.0350516624749,940.6718127429485,-306.7122702486813,427.0411916077137]))
      dst.should.be.identicalTo([761,941,-307,427])

      dst = F(4)
      DSP.round(dst, F([405.94761399552226,-584.6454366110265,-556.2038538046181,-825.9569755755365]))
      dst.should.be.identicalTo([406,-585,-556,-826])

  describe ".fract", ->
    it "should provide correct results", ->
      dst = F(4)
      DSP.fract(dst, F([845,853,63,957]))
      dst.should.be.identicalTo([0,0,0,0])

      dst = F(4)
      DSP.fract(dst, F([418,80,172,147]))
      dst.should.be.identicalTo([0,0,0,0])

      dst = F(4)
      DSP.fract(dst, F([229,45,58,564]))
      dst.should.be.identicalTo([0,0,0,0])

      dst = F(4)
      DSP.fract(dst, F([20,389,29,726]))
      dst.should.be.identicalTo([0,0,0,0])

      dst = F(4)
      DSP.fract(dst, F([494,220,464,678]))
      dst.should.be.identicalTo([0,0,0,0])

      dst = F(4)
      DSP.fract(dst, F([923,695,226,653]))
      dst.should.be.identicalTo([0,0,0,0])

      dst = F(4)
      DSP.fract(dst, F([154,367,662,21]))
      dst.should.be.identicalTo([0,0,0,0])

      dst = F(4)
      DSP.fract(dst, F([350,945,128,558]))
      dst.should.be.identicalTo([0,0,0,0])

      dst = F(4)
      DSP.fract(dst, F([767,706,743,920]))
      dst.should.be.identicalTo([0,0,0,0])

    it "should be able to deal with negative values", ->
      dst = F(4)
      DSP.fract(dst, F([-952,333,-454,229]))
      dst.should.be.identicalTo([0,0,0,0])

      dst = F(4)
      DSP.fract(dst, F([-77,624,-323,415]))
      dst.should.be.identicalTo([0,0,0,0])

      dst = F(4)
      DSP.fract(dst, F([-528,965,508,113]))
      dst.should.be.identicalTo([0,0,0,0])

      dst = F(4)
      DSP.fract(dst, F([-306,480,-547,813]))
      dst.should.be.identicalTo([0,0,0,0])

      dst = F(4)
      DSP.fract(dst, F([-298,860,-186,228]))
      dst.should.be.identicalTo([0,0,0,0])

      dst = F(4)
      DSP.fract(dst, F([480,-113,910,161]))
      dst.should.be.identicalTo([0,0,0,0])

      dst = F(4)
      DSP.fract(dst, F([239,-492,-255,510]))
      dst.should.be.identicalTo([0,0,0,0])

      dst = F(4)
      DSP.fract(dst, F([-173,-724,135,-77]))
      dst.should.be.identicalTo([0,0,0,0])

      dst = F(4)
      DSP.fract(dst, F([876,-951,-508,-997]))
      dst.should.be.identicalTo([0,0,0,0])

    it "should be able to deal with decimal values", ->
      dst = F(4)
      DSP.fract(dst, F([917.7344590425491,270.071208011359,904.5123816467822,695.6681017763913]))
      dst.should.be.identicalTo([0.7344590425491333,0.07120801135897636,0.5123816467821598,0.6681017763912678])

      dst = F(4)
      DSP.fract(dst, F([-504.7349547967315,-832.5390885584056,-443.0399336852133,780.8839324861765]))
      dst.should.be.identicalTo([0.265045203268528,0.46091144159436226,0.9600663147866726,0.8839324861764908])

      dst = F(4)
      DSP.fract(dst, F([350.6481694057584,171.6731647029519,750.9303763508797,75.53277490660548]))
      dst.should.be.identicalTo([0.6481694057583809,0.6731647029519081,0.9303763508796692,0.5327749066054821])

      dst = F(4)
      DSP.fract(dst, F([829.836446326226,822.7726430632174,495.2916158363223,736.4527708850801]))
      dst.should.be.identicalTo([0.836446326225996,0.7726430632174015,0.2916158363223076,0.4527708850800991])

      dst = F(4)
      DSP.fract(dst, F([-19.773504696786404,816.1026742309332,551.7676384188235,579.9267743714154]))
      dst.should.be.identicalTo([0.22649530321359634,0.10267423093318939,0.7676384188234806,0.9267743714153767])

      dst = F(4)
      DSP.fract(dst, F([-597.350062802434,-489.17615134269,-38.03679393604398,-859.522886108607]))
      dst.should.be.identicalTo([0.6499371975660324,0.823848657310009,0.9632060639560223,0.47711389139294624])

      dst = F(4)
      DSP.fract(dst, F([-855.2873870357871,-874.1913260892034,827.7887157164514,-665.0247904472053]))
      dst.should.be.identicalTo([0.7126129642128944,0.8086739107966423,0.7887157164514065,0.9752095527946949])

      dst = F(4)
      DSP.fract(dst, F([-585.557903163135,415.73498072102666,974.4284963235259,494.76925702765584]))
      dst.should.be.identicalTo([0.4420968368649483,0.734980721026659,0.4284963235259056,0.7692570276558399])

      dst = F(4)
      DSP.fract(dst, F([-4.3139285407960415,451.978859025985,40.14482768252492,293.4439522214234]))
      dst.should.be.identicalTo([0.6860714592039585,0.9788590259850025,0.1448276825249195,0.4439522214233875])

  describe ".sign", ->
    it "should provide correct results", ->
      dst = F(4)
      DSP.sign(dst, F([130,617,631,612]))
      dst.should.be.identicalTo([1,1,1,1])

      dst = F(4)
      DSP.sign(dst, F([110,64,246,881]))
      dst.should.be.identicalTo([1,1,1,1])

      dst = F(4)
      DSP.sign(dst, F([629,857,451,217]))
      dst.should.be.identicalTo([1,1,1,1])

      dst = F(4)
      DSP.sign(dst, F([79,180,435,821]))
      dst.should.be.identicalTo([1,1,1,1])

      dst = F(4)
      DSP.sign(dst, F([915,610,714,897]))
      dst.should.be.identicalTo([1,1,1,1])

      dst = F(4)
      DSP.sign(dst, F([337,586,631,281]))
      dst.should.be.identicalTo([1,1,1,1])

      dst = F(4)
      DSP.sign(dst, F([569,566,393,284]))
      dst.should.be.identicalTo([1,1,1,1])

      dst = F(4)
      DSP.sign(dst, F([554,920,598,185]))
      dst.should.be.identicalTo([1,1,1,1])

      dst = F(4)
      DSP.sign(dst, F([648,562,798,819]))
      dst.should.be.identicalTo([1,1,1,1])

    it "should be able to deal with negative values", ->
      dst = F(4)
      DSP.sign(dst, F([929,761,257,230]))
      dst.should.be.identicalTo([1,1,1,1])

      dst = F(4)
      DSP.sign(dst, F([-87,91,-960,996]))
      dst.should.be.identicalTo([-1,1,-1,1])

      dst = F(4)
      DSP.sign(dst, F([352,301,-790,-390]))
      dst.should.be.identicalTo([1,1,-1,-1])

      dst = F(4)
      DSP.sign(dst, F([461,384,739,-886]))
      dst.should.be.identicalTo([1,1,1,-1])

      dst = F(4)
      DSP.sign(dst, F([213,897,646,849]))
      dst.should.be.identicalTo([1,1,1,1])

      dst = F(4)
      DSP.sign(dst, F([573,797,407,843]))
      dst.should.be.identicalTo([1,1,1,1])

      dst = F(4)
      DSP.sign(dst, F([323,-996,-775,446]))
      dst.should.be.identicalTo([1,-1,-1,1])

      dst = F(4)
      DSP.sign(dst, F([-873,-873,903,-674]))
      dst.should.be.identicalTo([-1,-1,1,-1])

      dst = F(4)
      DSP.sign(dst, F([377,-8,-74,-36]))
      dst.should.be.identicalTo([1,-1,-1,-1])

    it "should be able to deal with decimal values", ->
      dst = F(4)
      DSP.sign(dst, F([258.9477892033756,-484.6998075954616,920.1819151639938,419.0220576710999]))
      dst.should.be.identicalTo([1,-1,1,1])

      dst = F(4)
      DSP.sign(dst, F([-240.4288682155311,-228.8427515886724,-227.70592337474227,-567.4404096789658]))
      dst.should.be.identicalTo([-1,-1,-1,-1])

      dst = F(4)
      DSP.sign(dst, F([895.6886469386518,744.3227935582399,661.9572904892266,504.5455996878445]))
      dst.should.be.identicalTo([1,1,1,1])

      dst = F(4)
      DSP.sign(dst, F([880.0077489577234,-5.984136834740639,-111.17326468229294,733.076230622828]))
      dst.should.be.identicalTo([1,-1,-1,1])

      dst = F(4)
      DSP.sign(dst, F([-833.1420538015664,3.8284859620034695,473.66902185603976,251.19194900617003]))
      dst.should.be.identicalTo([-1,1,1,1])

      dst = F(4)
      DSP.sign(dst, F([-821.4154010638595,-133.18621460348368,302.36184038221836,184.6135831438005]))
      dst.should.be.identicalTo([-1,-1,1,1])

      dst = F(4)
      DSP.sign(dst, F([-959.3544802628458,-252.93608754873276,751.2994636781514,-96.3865970261395]))
      dst.should.be.identicalTo([-1,-1,1,-1])

      dst = F(4)
      DSP.sign(dst, F([100.43798526749015,937.0219972915947,543.2295226491988,938.7200102210045]))
      dst.should.be.identicalTo([1,1,1,1])

      dst = F(4)
      DSP.sign(dst, F([361.35297920554876,-747.0349543727934,187.93214345350862,-189.53268276527524]))
      dst.should.be.identicalTo([1,-1,1,-1])

  it "should be able to distinguish signed zeros", ->
     dst = F(4)
     DSP.sign(dst, F([0.0, 0.0, 0.0, 0.0]))
     dst.should.be.identicalTo([1, 1, 1, 1])

     dst = F(4)
     DSP.sign(dst, F([-0.0, -0.0, -0.0, -0.0]))
     dst.should.be.identicalTo([-1, -1, -1, -1])

     dst = F(4)
     DSP.sign(dst, F([0.0, -0.0, 0.0, -0.0]))
     dst.should.be.identicalTo([1, -1, 1, -1])

     dst = F(4)
     DSP.sign(dst, F([-0.0, 0.0, 0.0, -0.0]))
     dst.should.be.identicalTo([-1, 1, 1, -1])

  describe ".sqrt", ->
    it "should provide correct results", ->
      dst = F(4)
      DSP.sqrt(dst, F([734,590,568,968]))
      dst.should.be.identicalTo([27.09243436828813,24.289915602982237,23.83275057562597,31.11269837220809])

      dst = F(4)
      DSP.sqrt(dst, F([151,519,781,942]))
      dst.should.be.identicalTo([12.288205727444508,22.781571499789035,27.94637722496424,30.692018506445613])

      dst = F(4)
      DSP.sqrt(dst, F([111,859,13,237]))
      dst.should.be.identicalTo([10.535653752852738,29.30870177950569,3.605551275463989,15.394804318340652])

      dst = F(4)
      DSP.sqrt(dst, F([17,16,831,966]))
      dst.should.be.identicalTo([4.123105625617661,4,28.827070610799147,31.080540535840107])

      dst = F(4)
      DSP.sqrt(dst, F([852,689,575,40]))
      dst.should.be.identicalTo([29.189039038652847,26.248809496813376,23.979157616563597,6.324555320336759])

      dst = F(4)
      DSP.sqrt(dst, F([295,249,128,833]))
      dst.should.be.identicalTo([17.175564037317667,15.7797338380595,11.313708498984761,28.861739379323623])

      dst = F(4)
      DSP.sqrt(dst, F([38,281,875,584]))
      dst.should.be.identicalTo([6.164414002968976,16.76305461424021,29.58039891549808,24.166091947189145])

      dst = F(4)
      DSP.sqrt(dst, F([861,834,484,591]))
      dst.should.be.identicalTo([29.34280150224242,28.879058156387302,22,24.310491562286437])

      dst = F(4)
      DSP.sqrt(dst, F([354,877,109,880]))
      dst.should.be.identicalTo([18.81488772222678,29.614185789921695,10.44030650891055,29.664793948382652])

    it "should be able to deal with negative values", ->
      dst = F(4)
      DSP.sqrt(dst, F([284,-202,428,-100]))
      dst.should.be.identicalTo([16.852299546352718,NaN,20.688160865577203,NaN])

      dst = F(4)
      DSP.sqrt(dst, F([84,867,817,-111]))
      dst.should.be.identicalTo([9.16515138991168,29.444863728670914,28.583211855912904,NaN])

      dst = F(4)
      DSP.sqrt(dst, F([555,-895,-392,597]))
      dst.should.be.identicalTo([23.558437978779494,NaN,NaN,24.43358344574123])

      dst = F(4)
      DSP.sqrt(dst, F([521,-528,-366,792]))
      dst.should.be.identicalTo([22.825424421026653,NaN,NaN,28.142494558940577])

      dst = F(4)
      DSP.sqrt(dst, F([-413,-496,553,-922]))
      dst.should.be.identicalTo([NaN,NaN,23.515952032609693,NaN])

      dst = F(4)
      DSP.sqrt(dst, F([-45,717,270,334]))
      dst.should.be.identicalTo([NaN,26.77685567799177,16.431676725154983,18.275666882497067])

      dst = F(4)
      DSP.sqrt(dst, F([-773,372,359,-974]))
      dst.should.be.identicalTo([NaN,19.28730152198591,18.947295321496416,NaN])

      dst = F(4)
      DSP.sqrt(dst, F([789,617,-715,448]))
      dst.should.be.identicalTo([28.089143810376278,24.839484696748443,NaN,21.166010488516726])

      dst = F(4)
      DSP.sqrt(dst, F([312,-894,553,398]))
      dst.should.be.identicalTo([17.663521732655695,NaN,23.515952032609693,19.949937343260004])

    it "should be able to deal with decimal values", ->
      dst = F(4)
      DSP.sqrt(dst, F([86.9071357883513,-987.0943161658943,-206.02329913526773,-291.2712078541517]))
      dst.should.be.identicalTo([9.322399679715051,NaN,NaN,NaN])

      dst = F(4)
      DSP.sqrt(dst, F([-698.8785550929606,531.6585469990969,528.1991087831557,-700.5601609125733]))
      dst.should.be.identicalTo([NaN,23.05772206873647,22.9825827265596,NaN])

      dst = F(4)
      DSP.sqrt(dst, F([89.56915466114879,106.55758623033762,51.93846579641104,-411.46731842309237]))
      dst.should.be.identicalTo([9.464098195874174,10.322673405195847,7.206834658600892,NaN])

      dst = F(4)
      DSP.sqrt(dst, F([-643.5476895421743,537.6169267110527,309.05946623533964,914.72577303648]))
      dst.should.be.identicalTo([NaN,23.186567807915267,17.580087207842276,30.244433752948325])

      dst = F(4)
      DSP.sqrt(dst, F([-154.47196085006,663.5629804804921,972.8392767719924,-573.1270415708423]))
      dst.should.be.identicalTo([NaN,25.75971623447145,31.19037153949905,NaN])

      dst = F(4)
      DSP.sqrt(dst, F([-443.8494793139398,911.9550795294344,562.6658839173615,-870.7681642845273]))
      dst.should.be.identicalTo([NaN,30.19859399921517,23.72057933351042,NaN])

      dst = F(4)
      DSP.sqrt(dst, F([564.3959366716444,139.22223774716258,-666.1825021728873,868.2855246588588]))
      dst.should.be.identicalTo([23.75701868231038,11.799247338163676,NaN,29.46668499609107])

      dst = F(4)
      DSP.sqrt(dst, F([-608.4274146705866,189.21877397224307,106.7221537232399,449.80013789609075]))
      dst.should.be.identicalTo([NaN,13.755681516095198,10.330641496211157,21.208492117453584])

      dst = F(4)
      DSP.sqrt(dst, F([665.7742406241596,-429.28703129291534,279.5810126699507,-181.96780048310757]))
      dst.should.be.identicalTo([25.802601431331677,NaN,16.72067620253292,NaN])

  describe ".log", ->
    it "should provide correct results", ->
      dst = F(4)
      DSP.log(dst, F([174,582,692,973]))
      dst.should.be.identicalTo([5.159055299214529,6.366470447731438,6.539585955617669,6.880384082186005])

      dst = F(4)
      DSP.log(dst, F([203,199,651,259]))
      dst.should.be.identicalTo([5.313205979041787,5.293304824724492,6.478509642208569,5.556828061699537])

      dst = F(4)
      DSP.log(dst, F([103,870,410,614]))
      dst.should.be.identicalTo([4.634728988229636,6.76849321164863,6.016157159698354,6.419994928147142])

      dst = F(4)
      DSP.log(dst, F([108,426,882,747]))
      dst.should.be.identicalTo([4.68213122712422,6.054439346269371,6.782192056006791,6.616065185132817])

      dst = F(4)
      DSP.log(dst, F([55,170,507,998]))
      dst.should.be.identicalTo([4.007333185232471,5.135798437050262,6.2285110035911835,6.905753276311464])

      dst = F(4)
      DSP.log(dst, F([653,125,645,89]))
      dst.should.be.identicalTo([6.481577129276431,4.8283137373023015,6.4692503167957724,4.48863636973214])

      dst = F(4)
      DSP.log(dst, F([85,980,84,56]))
      dst.should.be.identicalTo([4.442651256490317,6.887552571664617,4.430816798843313,4.02535169073515])

      dst = F(4)
      DSP.log(dst, F([508,744,602,793]))
      dst.should.be.identicalTo([6.230481447578482,6.612041034833092,6.400257445308821,6.675823221634848])

      dst = F(4)
      DSP.log(dst, F([834,833,777,981]))
      dst.should.be.identicalTo([6.726233402358747,6.725033642166843,6.655440350367647,6.8885724595653635])

    it "should be able to deal with negative values", ->
      dst = F(4)
      DSP.log(dst, F([868,-250,-491,-687]))
      dst.should.be.identicalTo([6.7661917146603505,NaN,NaN,NaN])

      dst = F(4)
      DSP.log(dst, F([151,-47,-811,279]))
      dst.should.be.identicalTo([5.017279836814924,NaN,NaN,5.631211781821365])

      dst = F(4)
      DSP.log(dst, F([-235,762,-464,727]))
      dst.should.be.identicalTo([NaN,6.635946555686647,NaN,6.588926477533519])

      dst = F(4)
      DSP.log(dst, F([-610,144,-933,717]))
      dst.should.be.identicalTo([NaN,4.969813299576001,NaN,6.57507584059962])

      dst = F(4)
      DSP.log(dst, F([397,-559,53,824]))
      dst.should.be.identicalTo([5.983936280687191,NaN,3.970291913552122,6.714170529909472])

      dst = F(4)
      DSP.log(dst, F([118,162,780,803]))
      dst.should.be.identicalTo([4.770684624465665,5.087596335232384,6.659293919683638,6.688354713946762])

      dst = F(4)
      DSP.log(dst, F([509,-135,-356,839]))
      dst.should.be.identicalTo([6.2324480165505225,NaN,NaN,6.732210706467206])

      dst = F(4)
      DSP.log(dst, F([-754,-683,-735,-888]))
      dst.should.be.identicalTo([NaN,NaN,NaN,NaN])

      dst = F(4)
      DSP.log(dst, F([-622,-266,595,-661]))
      dst.should.be.identicalTo([NaN,NaN,6.38856140554563,NaN])

    it "should be able to deal with decimal values", ->
      dst = F(4)
      DSP.log(dst, F([401.55292907729745,-910.5095849372447,-4.380463156849146,-915.7190010882914]))
      dst.should.be.identicalTo([5.995339353035205,NaN,NaN,NaN])

      dst = F(4)
      DSP.log(dst, F([803.5481157712638,829.9219533801079,-325.41520334780216,558.1515361554921]))
      dst.should.be.identicalTo([6.689037066111817,6.721331664297192,NaN,6.324630495683939])

      dst = F(4)
      DSP.log(dst, F([-444.7027575224638,-477.84934053197503,55.31778838485479,906.2505229376256]))
      dst.should.be.identicalTo([NaN,NaN,4.013094527415592,6.809315783203339])

      dst = F(4)
      DSP.log(dst, F([469.95865646749735,-645.5850675702095,396.8320772983134,937.2722241096199]))
      dst.should.be.identicalTo([6.152644725872189,NaN,5.983513212108852,6.842973767375034])

      dst = F(4)
      DSP.log(dst, F([111.12535605207086,401.92623948678374,972.4848861806095,-501.46336993202567]))
      dst.should.be.identicalTo([4.710658897897065,5.996268587920076,6.879854534169377,NaN])

      dst = F(4)
      DSP.log(dst, F([725.3296026028693,439.75142389535904,814.5238901488483,-875.3717090003192]))
      dst.should.be.identicalTo([6.586626175824187,6.086209621577995,6.70260375867254,NaN])

      dst = F(4)
      DSP.log(dst, F([708.6128387600183,-140.17587434500456,330.4808740504086,-272.0062448643148]))
      dst.should.be.identicalTo([6.563309310754417,NaN,5.800548787875646,NaN])

      dst = F(4)
      DSP.log(dst, F([-812.9501808434725,-507.7146580442786,-926.7521314322948,-459.9473630078137]))
      dst.should.be.identicalTo([NaN,NaN,NaN,NaN])

      dst = F(4)
      DSP.log(dst, F([-739.9054109118879,-854.4405372813344,-760.220292955637,-776.1022066697478]))
      dst.should.be.identicalTo([NaN,NaN,NaN,NaN])

  describe ".exp", ->
    it "should provide correct results", ->
      dst = F(4)
      DSP.exp(dst, F([705,813,589,558]))
      dst.should.be.identicalTo([Infinity,Infinity,Infinity,Infinity])

      dst = F(4)
      DSP.exp(dst, F([971,825,196,524]))
      dst.should.be.identicalTo([Infinity,Infinity,Infinity,Infinity])

      dst = F(4)
      DSP.exp(dst, F([733,432,541,832]))
      dst.should.be.identicalTo([Infinity,Infinity,Infinity,Infinity])

      dst = F(4)
      DSP.exp(dst, F([102,486,806,810]))
      dst.should.be.identicalTo([Infinity,Infinity,Infinity,Infinity])

      dst = F(4)
      DSP.exp(dst, F([40,578,74,749]))
      dst.should.be.identicalTo([235385270340419600,Infinity,1.3733829622695282e+32,Infinity])

      dst = F(4)
      DSP.exp(dst, F([444,626,233,90]))
      dst.should.be.identicalTo([Infinity,Infinity,Infinity,Infinity])

      dst = F(4)
      DSP.exp(dst, F([924,695,599,490]))
      dst.should.be.identicalTo([Infinity,Infinity,Infinity,Infinity])

      dst = F(4)
      DSP.exp(dst, F([42,151,311,69]))
      dst.should.be.identicalTo([1739274975342231600,Infinity,Infinity,9.253781621373885e+29])

      dst = F(4)
      DSP.exp(dst, F([939,968,341,148]))
      dst.should.be.identicalTo([Infinity,Infinity,Infinity,Infinity])

    it "should be able to deal with negative values", ->
      dst = F(4)
      DSP.exp(dst, F([-629,969,288,-347]))
      dst.should.be.identicalTo([0,Infinity,Infinity,0])

      dst = F(4)
      DSP.exp(dst, F([-209,824,-8,752]))
      dst.should.be.identicalTo([0,Infinity,0.000335462624207139,Infinity])

      dst = F(4)
      DSP.exp(dst, F([749,585,434,-356]))
      dst.should.be.identicalTo([Infinity,Infinity,Infinity,0])

      dst = F(4)
      DSP.exp(dst, F([-765,101,455,102]))
      dst.should.be.identicalTo([0,Infinity,Infinity,Infinity])

      dst = F(4)
      DSP.exp(dst, F([-61,377,334,-51]))
      dst.should.be.identicalTo([3.2213402768962287e-27,Infinity,Infinity,7.095474414148981e-23])

      dst = F(4)
      DSP.exp(dst, F([-643,-895,-860,460]))
      dst.should.be.identicalTo([0,0,0,Infinity])

      dst = F(4)
      DSP.exp(dst, F([-518,-584,306,965]))
      dst.should.be.identicalTo([0,0,Infinity,Infinity])

      dst = F(4)
      DSP.exp(dst, F([-652,-324,874,-420]))
      dst.should.be.identicalTo([0,0,Infinity,0])

      dst = F(4)
      DSP.exp(dst, F([60,-374,246,-195]))
      dst.should.be.identicalTo([1.1420073962419164e+26,0,Infinity,0])

    it "should be able to deal with decimal values", ->
      dst = F(4)
      DSP.exp(dst, F([-813.5456889867783,918.3146497234702,-665.0429107248783,-560.3719986975193]))
      dst.should.be.identicalTo([0,Infinity,0,0])

      dst = F(4)
      DSP.exp(dst, F([-409.5905045978725,-100.81147076562047,-663.9901311136782,673.2404991053045]))
      dst.should.be.identicalTo([0,1.6815581571897805e-44,0,Infinity])

      dst = F(4)
      DSP.exp(dst, F([489.7149307653308,-657.7387852594256,-517.3180843703449,-263.7515184469521]))
      dst.should.be.identicalTo([Infinity,0,0,0])

      dst = F(4)
      DSP.exp(dst, F([-672.1051950007677,899.3820804171264,935.7533389702439,-794.7192629799247]))
      dst.should.be.identicalTo([0,Infinity,Infinity,0])

      dst = F(4)
      DSP.exp(dst, F([-279.42896168679,-962.1608322486281,-570.6299101002514,556.1175267212093]))
      dst.should.be.identicalTo([0,0,0,Infinity])

      dst = F(4)
      DSP.exp(dst, F([76.22474944218993,-677.3958117701113,939.3651112914085,-547.1678883768618]))
      dst.should.be.identicalTo([1.2705391785673969e+33,0,Infinity,0])

      dst = F(4)
      DSP.exp(dst, F([383.8639077730477,661.4778218790889,784.6201579086483,691.6852374561131]))
      dst.should.be.identicalTo([Infinity,Infinity,Infinity,Infinity])

      dst = F(4)
      DSP.exp(dst, F([549.2953895591199,-484.826457221061,212.89680059999228,-984.7100330516696]))
      dst.should.be.identicalTo([Infinity,0,Infinity,0])

      dst = F(4)
      DSP.exp(dst, F([349.766603205353,671.0575385950506,573.497190605849,-415.3496460057795]))
      dst.should.be.identicalTo([Infinity,Infinity,Infinity,0])

  describe ".random", ->
    it "should provide results within bounds", ->
      dst = F(4)
      DSP.random(dst, -505.74774169921875, -364.25360107421875)
      for i in dst
        i.should.be.within(-505.74774169921875, -364.25360107421875)

      dst = F(4)
      DSP.random(dst, -645.1468505859375, 887.7542724609375)
      for i in dst
        i.should.be.within(-645.1468505859375, 887.7542724609375)

      dst = F(4)
      DSP.random(dst, 599.251953125, 617.5882568359375)
      for i in dst
        i.should.be.within(599.251953125, 617.5882568359375)

      dst = F(4)
      DSP.random(dst, 110.80574798583984, 178.7054901123047)
      for i in dst
        i.should.be.within(110.80574798583984, 178.7054901123047)

      dst = F(4)
      DSP.random(dst, -778.2592163085938, 360.3844909667969)
      for i in dst
        i.should.be.within(-778.2592163085938, 360.3844909667969)

      dst = F(4)
      DSP.random(dst, -439.63739013671875, 323.6299133300781)
      for i in dst
        i.should.be.within(-439.63739013671875, 323.6299133300781)

      dst = F(4)
      DSP.random(dst, 179.8490447998047, 444.4645080566406)
      for i in dst
        i.should.be.within(179.8490447998047, 444.4645080566406)

      dst = F(4)
      DSP.random(dst, -470.44146728515625, -122.72828674316406)
      for i in dst
        i.should.be.within(-470.44146728515625, -122.72828674316406)

      dst = F(4)
      DSP.random(dst, -187.23829650878906, 624.2064208984375)
      for i in dst
        i.should.be.within(-187.23829650878906, 624.2064208984375)

      dst = F(4)
      DSP.random(dst, -401.833251953125, 617.3110961914062)
      for i in dst
        i.should.be.within(-401.833251953125, 617.3110961914062)

      dst = F(4)
      DSP.random(dst, -147.5324249267578, 67.47258758544922)
      for i in dst
        i.should.be.within(-147.5324249267578, 67.47258758544922)

      dst = F(4)
      DSP.random(dst, -241.29754638671875, 883.778564453125)
      for i in dst
        i.should.be.within(-241.29754638671875, 883.778564453125)

      dst = F(4)
      DSP.random(dst, 493.2694396972656, 795.0589599609375)
      for i in dst
        i.should.be.within(493.2694396972656, 795.0589599609375)

      dst = F(4)
      DSP.random(dst, -76.12738800048828, 167.0929412841797)
      for i in dst
        i.should.be.within(-76.12738800048828, 167.0929412841797)

      dst = F(4)
      DSP.random(dst, 239.43917846679688, 956.3991088867188)
      for i in dst
        i.should.be.within(239.43917846679688, 956.3991088867188)

      dst = F(4)
      DSP.random(dst, 47.18735885620117, 130.5735321044922)
      for i in dst
        i.should.be.within(47.18735885620117, 130.5735321044922)

      dst = F(4)
      DSP.random(dst, -931.4014282226562, -91.81499481201172)
      for i in dst
        i.should.be.within(-931.4014282226562, -91.81499481201172)
