require '../lib/test-tools'

describe "Filter", ->
  describe "#filter", ->
    it "should provide correct results", ->
      dst = F(8)
      filter = new Filter(2, 2)
      filter.a.set([-0.7245308854617178,0.8529884675517678])
      filter.b.set([-0.14571235328912735,0.2730336715467274])
      filter.filter(dst, F([0.8393189101479948,0.3062421982176602,0.8105849833227694,0.5932443290948868,0.8880022815428674,0.12245151214301586,-0.027370119001716375,-0.48809899017214775]))
      dst.should.be.identicalTo([-0.12229912728071213,0.0959295704960823,0.13932588696479797,0.15399305522441864,0.02531212940812111,0.11159694939851761,0.09668603539466858,0.03851018846035004])

      dst = F(8)
      filter = new Filter(2, 2)
      filter.a.set([0.38379083713516593,-0.43738275626674294])
      filter.b.set([0.7031490132212639,-0.9523186446167529])
      filter.filter(dst, F([-0.5946194473654032,0.4354758928529918,0.9334455006755888,0.4159549316391349,0.18618940049782395,-0.06942694867029786,-0.7695735627785325,-0.5003264779224992]))
      dst.should.be.identicalTo([-0.4181060791015625,1.032936930656433,-0.3376646637916565,-0.015077883377671242,-0.4071047008037567,-0.07648087292909622,-0.6237162351608276,0.5870003700256348])

      dst = F(8)
      filter = new Filter(2, 2)
      filter.a.set([0.45427816919982433,-0.6927820011042058])
      filter.b.set([-0.28853908786550164,-0.22803021920844913])
      filter.filter(dst, F([-0.8576005441136658,0.08415870182216167,0.056199674028903246,-0.4864907911978662,-0.9222156228497624,-0.9463302250951529,-0.9124507061205804,0.06983948592096567]))
      dst.should.be.identicalTo([0.2474512755870819,0.058864057064056396,0.10928259789943695,0.11869163811206818,0.39881986379623413,0.38439857959747314,0.5807409286499023,0.19040140509605408])

      dst = F(8)
      filter = new Filter(2, 2)
      filter.a.set([-0.4717000829987228,0.8436321741901338])
      filter.b.set([-0.8548361696302891,-0.7317052353173494])
      filter.filter(dst, F([-0.6784710679203272,0.7781777111813426,0.37557892920449376,0.7932017236016691,-0.5495867892168462,-0.26863895542919636,0.9798932927660644,-0.3435705271549523]))
      dst.should.be.identicalTo([0.5799816250801086,0.10480375587940216,-1.3303104639053345,-1.66879403591156,0.22453919053077698,2.145541191101074,0.18153978884220123,-2.147711753845215])

      dst = F(8)
      filter = new Filter(2, 2)
      filter.a.set([-0.9216860071755946,-0.4505175561644137])
      filter.b.set([-0.5646745311096311,-0.09348437888547778])
      filter.filter(dst, F([-0.7323651942424476,0.9867613399401307,-0.25682152761146426,0.19380624638870358,-0.008662888314574957,0.7639216990210116,0.28027697606012225,-0.4657440334558487]))
      dst.should.be.identicalTo([0.41354799270629883,-0.10757292062044144,0.13993598520755768,-0.0049151089042425156,0.04528728872537613,-0.3910309672355652,-0.5696851015090942,-0.4644448161125183])

      dst = F(8)
      filter = new Filter(2, 2)
      filter.a.set([0.06183432647958398,0.24618201795965433])
      filter.b.set([0.7248360863886774,0.7017270233482122])
      filter.filter(dst, F([-0.6982480608858168,-0.8749930383637547,0.3726959521882236,0.19225919106975198,0.0539085753262043,-0.9770039054565132,0.366116208024323,0.5482939863577485]))
      dst.should.be.identicalTo([-0.5061154365539551,-1.0929107666015625,-0.15168684720993042,0.6793216466903687,0.16932553052902222,-0.8480455279350281,-0.4094623923301697,0.8884293437004089])

      dst = F(8)
      filter = new Filter(2, 2)
      filter.a.set([-0.9779784670099616,-0.4559980812482536])
      filter.b.set([-0.3993752268142998,0.7402999363839626])
      filter.filter(dst, F([-0.7509381431154907,-0.8065345929935575,-0.280559659935534,0.26211200980469584,0.5579092777334154,-0.9297182695008814,-0.3941344632767141,-0.5004479303024709]))
      dst.should.be.identicalTo([0.29990607500076294,0.05949217826128006,-0.29009026288986206,-0.5689530372619629,-0.7174780368804932,-0.1767929494380951,-1.0309311151504517,-1.18075692653656])

      dst = F(8)
      filter = new Filter(2, 2)
      filter.a.set([-0.3686783853918314,-0.27852048305794597])
      filter.b.set([-0.39278859039768577,-0.6188062271103263])
      filter.filter(dst, F([0.3768880353309214,-0.17512809671461582,0.42845930391922593,-0.7903124676086009,-0.2590331584215164,-0.17346649058163166,-0.9388220901601017,0.4776893206872046]))
      dst.should.be.identicalTo([-0.14803731441497803,-0.21901050209999084,-0.18189942836761475,-0.08276887983083725,0.5096177458763123,0.393259197473526,0.7630258798599243,0.7841599583625793])

      dst = F(8)
      filter = new Filter(2, 2)
      filter.a.set([0.6218817192129791,-0.040041996631771326])
      filter.b.set([0.22733043925836682,-0.48755569802597165])
      filter.filter(dst, F([0.444231144618243,0.12351675285026431,-0.9122333563864231,0.5987069900147617,-0.6581440917216241,-0.8999277437105775,0.9251277740113437,0.3634658046066761]))
      dst.should.be.identicalTo([0.1009872630238533,-0.25131043791770935,-0.10727061331272125,0.6375155448913574,-0.8422737717628479,0.6656230092048645,0.2014095038175583,-0.46702447533607483])

