local fail = false

print("Test: pow...")

if a ^ 22 ~= bn("87878769976207414484509354182271548750400543212890625") then
    print("\tFail: a ^ 22")
    fail = true
end

if f ^ 192 ~= bn("1139165225263043358989118623634677715441555978278372785378681637145525035482949152570926522568348"..
    "18209692192539314733421431007600513581979631087903643429781552753216135234966994692581992914008080040636137495"..
    "60507528309199827976404184738393549648890838718479907542454450554401463260619773835994366840076069636989995687"..
    "02317040699124630302483479828089741830466623992882372522143826516283855676751401736689528344950783585207235612"..
    "60551829589037729933399328153688609535474421887049578332678769209386509477738682358029083387386082112931050224"..
    "27234441208526600291482302152793132698246083841427995363567752358173584970209519051038277762081499700708560408"..
    "23029107726295643185629528718043703225608491701013032810488334797162624126580055702541881758521885891580585129"..
    "84830946597661884542478568013789349457729005202743266693000185296153812122098050317132598698396321340139524035"..
    "35255956977047401537132166333088495609473837058604644104963431974176803314629748881601826162612055314015784541"..
    "93851425105341976373528090636037411452847574119636654523415896101467089993969802030186951546354694475070705017"..
    "77288260311699624195048648749598260462211952004477990542459788573141801795777509359452916344270269367364061090"..
    "49987867081126788401407079267993992706843225439096599985096637880949096167823807622965722026253080593637915905"..
    "13041595271961541086042694600051987137279401441938875535196795675425708633394213277975198041273772824997429776"..
    "84104079213643293349767139306059335366718830152764083900896041753955361634980443043499868776111932141415420861"..
    "53448913263010336729838953982432257502198402089226868687652423071694728959880625195607601743626864362921718374"..
    "98253167959815469034012151811112953721723860906964813141748635535661141194040047336103900539511586173523222640"..
    "88498604933486595317353272092843315789629464868370249910794355476620899686664293513254255131994710838833904669"..
    "81169082958304042662462105017846369020452191332402735617754844736974416801291816288407218621046482364793368022"..
    "54855195218635045585235542538087266455501354766223038600330675375944686902439407898277682876994172475757959492"..
    "13605776646074942514833166559414751355312343736742225808676044778796227467808045421114856813063311088875298376"..
    "90633082725234674996069342954955852997710050236935125491582715639864569392922570930012095301032377866090778596"..
    "71814872431179571959037939096988286152031278660008640921967220611890721585627864790583699359176565814410586390"..
    "83977701628623378173882765076356897192636086057924070303205536891253450996213854860108568733217601939975015939"..
    "27119196409638822902381695374897891894177081833708611693799368514177806177736835205393644057585976309903182534"..
    "53328337192303269736159208057042283430543385996011048439310645906357574961392448551737202761726764816073855396"..
    "95814218094004338546549301488924022829538797958726576843522467274571300172392088509596845088153696579670824257"..
    "49254901584858560939067294573942380767138580148920211045475973917664989156020582864574236100446664906452593948"..
    "35656195329632886350091019975018476752423157785972149733431316795038027141280687275004701460996771422451734846"..
    "94822142476954034238687918112895122624323926929943473025377204403268197434986110532436528022227618927011250191"..
    "21758977220207251162822212321342057403557463896224095707820145982691411265692049002664931068740517139346889677"..
    "86244414076122871483832655304936026595482993825716258481514715337095846056998119885036513603161990215182930642"..
    "64413180929169901852323115645792145609090748126656175759134955304785124517220224450274140988937479033709653704"..
    "94968302756004170410751875468628092813201971090745721739423941846254280195856744887089256547071725541158621723"..
    "74044466921312166509580863811000557423423230896109004106619977392256259918212890625")
then
    print("\tFail: f ^ 192")
    fail = true
end

if d ^ 44 ~= bn("7796394108873368820860488183417763942927663757327066559740264209196152458716924816672762589634815"..
    "1416059727536808039676763393648168169251749029082247837974390888033988987617936876035608361915143387346551484"..
    "9598632663342668774990274116215214833399291791471072193483982535574152483336649806416437461863519015170731006"..
    "2484735698940069606420663667266317906698109681399581819865890561986712975886338246210128659659914450326835903"..
    "2274078673731826208338168541160685091899132247232725341167607235952921697060895410536546910055977259073677897"..
    "0366451080435394518538295618547759621652322636545090128060714050424211823735983442360193224401998209149087302"..
    "4567012004234023496328576249050310815893593921702277680856026635448702032622320691381474263287120638652190664"..
    "0932368484882184010043999626349081914383145797888876218597938520299608836220868209258477615039513557498477796"..
    "7496851710829567156655020852533925857989569420795436572222129665607916457227510789482883785518170426958735708"..
    "1479061806896969052015230604407696614772990003959299319504415540804154925714553867978642846841224791661298993"..
    "967898470770609550566916987648513027999177805163984545849531133310686283288902860383257331490833821372481")
then
    print("\tFail: d ^ 44")
    fail = true
end

if 1 ^ b ~= bn(1) then
    print("\tFail: 1 ^ b")
    fail = true
end

if not fail then
    print("\tPass")
end
