require '../lib/test-tools'

describe "DSP", ->
  describe ".min", ->
    it "should provide correct results", ->
      DSP.min(F([404474.46875,-575393.0625,-752941.1875,-584019.0625])).should.be.approximately -752941.1875

      DSP.min(F([-53441.85546875,199070.671875,708793.375,808142.9375])).should.be.approximately -53441.85546875

      DSP.min(F([-512241.875,17514.123046875,-725988.125,-433939.90625])).should.be.approximately -725988.125

      DSP.min(F([153179.8125,318713.71875,418263.5,-209827.703125])).should.be.approximately -209827.703125

      DSP.min(F([-581313.375,892136.625,-225462.25,-104278.4140625])).should.be.approximately -581313.375

      DSP.min(F([94326.03125,381226.5,-93250.453125,-983235.625])).should.be.approximately -983235.625

      DSP.min(F([-689730.8125,-227581.25,371085.90625,-67330.96875])).should.be.approximately -689730.8125

      DSP.min(F([456807.90625,-844945.875,-579861.9375,506312.09375])).should.be.approximately -844945.875

      DSP.min(F([877294.0625,503354.6875,494772.5625,52005.44140625])).should.be.approximately 52005.44140625

      DSP.min(F([672569.0625,94133.75,-839275.4375,-679757.125])).should.be.approximately -839275.4375

      DSP.min(F([163396.75,-101302.9140625,-960061.375,-461484.5])).should.be.approximately -960061.375

      DSP.min(F([-213312.890625,716794.125,469851.09375,-231961.171875])).should.be.approximately -231961.171875

      DSP.min(F([950853.0625,228486.921875,561127.5625,-246708.796875])).should.be.approximately -246708.796875

      DSP.min(F([-40533.62890625,735715.375,586634.6875,-51200.07421875])).should.be.approximately -51200.07421875

      DSP.min(F([257783.6875,-703520.25,61757.65234375,88710.890625])).should.be.approximately -703520.25

      DSP.min(F([-737285.5625,-416709.46875,-221370.5625,255630.75])).should.be.approximately -737285.5625

      DSP.min(F([-901572.75,369890,602369.5,617101])).should.be.approximately -901572.75

      DSP.min(F([-253057.546875,402670.875,-860758.875,-711219.3125])).should.be.approximately -860758.875

      DSP.min(F([804425.75,-195976.140625,92507.9921875,617922.9375])).should.be.approximately -195976.140625

      DSP.min(F([-641645.25,-182985.125,271320.4375,715901.375])).should.be.approximately -641645.25

      DSP.min(F([-263838.21875,-698293.375,-726004.1875,-494101.15625])).should.be.approximately -726004.1875

      DSP.min(F([890092,297043.15625,881586.5,376247.1875])).should.be.approximately 297043.15625

      DSP.min(F([672066,-271405.59375,853387.5,345409.75])).should.be.approximately -271405.59375

      DSP.min(F([-978191.1875,2037.3643798828125,229095.546875,286019.625])).should.be.approximately -978191.1875

      DSP.min(F([-801170.1875,621042.9375,267991.34375,-261758.171875])).should.be.approximately -801170.1875

  describe ".max", ->
    it "should provide correct results", ->
      DSP.max(F([351644.40625,470965.71875,299256.40625,-387536.375])).should.be.approximately 470965.71875

      DSP.max(F([-75881.484375,-732590.125,530419.125,-205384.5625])).should.be.approximately 530419.125

      DSP.max(F([260655.609375,696485,-651914.25,-88363.015625])).should.be.approximately 696485

      DSP.max(F([-465937.6875,-83870.828125,-300479.21875,-237965.140625])).should.be.approximately -83870.828125

      DSP.max(F([461260.53125,-173018.375,-930909.6875,490347.5])).should.be.approximately 490347.5

      DSP.max(F([-370335.875,-254633.0625,-173266.390625,-428123.09375])).should.be.approximately -173266.390625

      DSP.max(F([817974.625,-242562.234375,-686387.1875,-492119.90625])).should.be.approximately 817974.625

      DSP.max(F([-433583.71875,304169.03125,-906774.25,-137884.8125])).should.be.approximately 304169.03125

      DSP.max(F([-762722.4375,999625.125,504400.21875,604146.5])).should.be.approximately 999625.125

      DSP.max(F([719360.4375,285499.46875,600805.875,-543539.3125])).should.be.approximately 719360.4375

      DSP.max(F([-792779.25,439886.28125,991819.8125,-663324.0625])).should.be.approximately 991819.8125

      DSP.max(F([-426915.875,241888.578125,657284.25,626115.25])).should.be.approximately 657284.25

      DSP.max(F([547127.75,-235531.40625,54632.09765625,984320])).should.be.approximately 984320

      DSP.max(F([326684.1875,56752.29296875,224662.28125,-278777.15625])).should.be.approximately 326684.1875

      DSP.max(F([-82642.671875,615236.6875,97114.9140625,73081.578125])).should.be.approximately 615236.6875

      DSP.max(F([920438.625,338732.6875,-526784.4375,-159629.09375])).should.be.approximately 920438.625

      DSP.max(F([-120169.6484375,-94636.5703125,806836.9375,-575676.6875])).should.be.approximately 806836.9375

      DSP.max(F([528128,-263978.65625,182243,919677.9375])).should.be.approximately 919677.9375

      DSP.max(F([-875010.8125,963253.25,732985.25,678220.3125])).should.be.approximately 963253.25

      DSP.max(F([-830019.8125,-664845.9375,-677838.8125,925548.4375])).should.be.approximately 925548.4375

      DSP.max(F([790046.5625,165997.71875,-291402.65625,756011.3125])).should.be.approximately 790046.5625

      DSP.max(F([607189.3125,-282185.65625,125102.9140625,161605.609375])).should.be.approximately 607189.3125

      DSP.max(F([-81048.515625,-821916.5625,433617.15625,435334.1875])).should.be.approximately 435334.1875

      DSP.max(F([-871075.125,625336.1875,179881.375,-1844.4075927734375])).should.be.approximately 625336.1875

      DSP.max(F([-326943.4375,722647.625,-166455.171875,-127337.2265625])).should.be.approximately 722647.625

  describe ".sum", ->
    it "should provide correct results", ->
      DSP.sum(F([389725.78125,265101.59375,-884485.625,655265.5])).should.be.approximately 425607.25

      DSP.sum(F([670813.8125,-499556,575912.4375,-827048.6875])).should.be.approximately -79878.4375

      DSP.sum(F([374291.96875,-796794.375,-77225.640625,150354.34375])).should.be.approximately -349373.71875

      DSP.sum(F([-327648.9375,266154.1875,293663,-960691.3125])).should.be.approximately -728523.0625

      DSP.sum(F([216837.875,-902051,-284521.25,299019.03125])).should.be.approximately -670715.375

      DSP.sum(F([-919986.0625,-297847.78125,-95159.8125,-25573.73046875])).should.be.approximately -1338567.5

      DSP.sum(F([491832.8125,509779.65625,747915,914531.875])).should.be.approximately 2664059.5

      DSP.sum(F([-75014.625,220515,-992038.3125,655819.5])).should.be.approximately -190718.4375

      DSP.sum(F([957330.875,418416.34375,477609.8125,909117.875])).should.be.approximately 2762475

      DSP.sum(F([958343,-829649,-34431.7734375,-873264.5])).should.be.approximately -779002.25

      DSP.sum(F([901364.25,-36638.04296875,-74679.296875,-747119.1875])).should.be.approximately 42927.6875

      DSP.sum(F([-212508.5,-445690.40625,159581.3125,118550.5546875])).should.be.approximately -380067

      DSP.sum(F([390638.28125,971926.5625,15349.5341796875,-510954.34375])).should.be.approximately 866960

      DSP.sum(F([-224698.4375,142800.890625,-526066.6875,193450.625])).should.be.approximately -414513.625

      DSP.sum(F([388012.40625,708072.0625,34948.8515625,-574708.6875])).should.be.approximately 556324.6875

      DSP.sum(F([854676.875,-875666.5625,398049.84375,-681586.6875])).should.be.approximately -304526.53125

      DSP.sum(F([770676.125,587475.375,875591.25,-562909.125])).should.be.approximately 1670833.625

      DSP.sum(F([-961881.5625,926862.625,-425575,-172272.546875])).should.be.approximately -632866.5

      DSP.sum(F([-212874.640625,883395.375,-725261.6875,-621362.5])).should.be.approximately -676103.4375

      DSP.sum(F([696466.0625,-989006.25,-4317.14990234375,504794.15625])).should.be.approximately 207936.8125

      DSP.sum(F([-984023.9375,-45924.2265625,989976.3125,-397042.25])).should.be.approximately -437014.125

      DSP.sum(F([270080.09375,-19615.3125,-943903.5625,835796])).should.be.approximately 142357.25

      DSP.sum(F([-999023.6875,659594.625,-453959.6875,-440942.78125])).should.be.approximately -1234331.5

      DSP.sum(F([667051.8125,882948.625,131196.265625,-541580.6875])).should.be.approximately 1139616

      DSP.sum(F([765734.5625,-130662.515625,-552211.625,-671661.6875])).should.be.approximately -588801.25

