From 2621ef6e9257e64679ed37af190b0c90663f8953 Mon Sep 17 00:00:00 2001 From: Rigidity Date: Sun, 14 Jul 2024 12:48:44 -0400 Subject: [PATCH] Address comments --- op-tests/test-modpow.txt | 90 +++++++++++++------------- tools/src/bin/generate-modpow-tests.rs | 26 ++++---- 2 files changed, 56 insertions(+), 60 deletions(-) diff --git a/op-tests/test-modpow.txt b/op-tests/test-modpow.txt index 106bccdc..b5240f54 100644 --- a/op-tests/test-modpow.txt +++ b/op-tests/test-modpow.txt @@ -1,90 +1,90 @@ ; This file was generated by tools/src/bin/generate-modpow-tests.rs -modpow 9341829497586649593865894363733490755438507694201597 556606291647424564814177367572458554425074604463581598568935778451121529 4373238041963667894698452839741832172073 => 645485963992042551624174571461937584879 | 26775 +modpow 9341829497586649593865894363733490755438507694201597 1210240773130959764769120133170459961402409292412037359552670422841498247 4373238041963667894698452839741832172073 => 2912281904633073096861733532970144633243 | 26958 modpow -476732895853059832558302 7430267589416313592667327913663122195977723920851401316336706748042 -26167714251475187590813905172573050731376766903667 => -7832564589158312925597206789179808084666064591837 | 29203 -modpow 3176338195276115163542008085847836908465426470485099431688135852834465 355738 1224041001 => 554112094 | 18505 +modpow 3176338195276115163542008085847836908465426470485099431688135852834465 16421478 1224041001 => 148156774 | 18526 modpow 19 92 380280709006605916949985940193758631 => 347680718951591107801505629119257663 | 21916 modpow -120920267493683383759156844 436966163512 8010894840926221885543822098627005424197901931579057857358777704072 => 4524530934640363873312233129004175691619967677468653353889781643248 | 34237 -modpow 1897595367258387458729 34702152440947713892141815856 62230553565297885500358019 => 30785909580253472213307463 | 20425 +modpow 1897595367258387458729 44526010073316623701402134480 62230553565297885500358019 => 15236285268573541589617777 | 20500 modpow -30400433066974082485090271880 3103390276275710143455308261151950955814387224189582271330407363500 634413337097422449160106470279193260 => 79693557408633139094247309912860960 | 24683 modpow -9453314410597358289935064437261122658011016 279652508 -440590092552209928903922868001141004 => -300044005983362999554342470883236884 | 22607 -modpow 2055922121462269081080035226670233042139818664405744228421 83291747601510668846010711489463143463 -1368536944400669038480367343580162103430726580490485450947602433122206 => -818309760516914871187479067326692341892495931127231657324784250087183 | 36631 -modpow -319532400143113171681849062932340882 388613076700957004231993 108610697402368 => 79147074609152 | 18686 +modpow 2055922121462269081080035226670233042139818664405744228421 256990619319427794617363895942305067993 -1368536944400669038480367343580162103430726580490485450947602433122206 => -23655381696124822547982343557817989384078438506427297144595196105901 | 36730 +modpow -319532400143113171681849062932340882 820312742913672170474183 108610697402368 => 35970810009600 | 18749 modpow 272121335863712254974348117699104848327443046245915591684558287895015935 1017744808981627175467121281944460 1285811470547643122103 => 107417850327975619453 | 20519 -modpow -11636540683832019721917271964271644846968060372608938100 1988651454847818503054173565699326937440527731 -469519461242 => -55698782578 | 19532 -modpow -39216272508398798502349496526650406359643571637126438413055767713 117268036971104422660551640755141580178 -1839038486931841387393192793326590298101736435 => -1210077912177725189345946798872385223162964746 | 26565 -modpow 11019779323414485884980307120007133736618442553873344 20502551282126045480870765599053506589865127614313145 8623519486327530178793824086704 => 1549836756547853475989826189232 | 22967 +modpow -11636540683832019721917271964271644846968060372608938100 3720339315976021021178970312098653608090458765 -469519461242 => -347436496508 | 19649 +modpow -39216272508398798502349496526650406359643571637126438413055767713 223014329949834040802822966676626631278 -1839038486931841387393192793326590298101736435 => -1627194575894667748458703640104725723253737806 | 26664 +modpow 11019779323414485884980307120007133736618442553873344 75278420021992008166525923597840817386306067522161991 8623519486327530178793824086704 => 3809028517752267868538857069312 | 23102 modpow 9568296001419589505649118887381676967992 495437680773274413611541798759358875355495393192328923818314543966808712 681056404546131358982880922426 => 627532484555180543884943539002 | 24025 modpow -20210200139652968214353172922139655268276 44520526032129438453058815998409255888911660462821140 -31 => -30 | 19129 modpow -123306576588996994480705308725194131675597672843525 14509458069247667 84 => 51 | 17976 -modpow -139977492253643843815578476296854790857918956556164524962451384656929776791 5007069584326031186023882485069354118754887025633673203 -478470020404575948621768324210923331 => -112955385112581055693890589220207022 | 24640 -modpow -64791059622358908478686621053081647219908135162502 80909319458481885599580389165438283237 -628971748148499256891768906727879036694477620703795395915537 => -76329016345600002485554275462046175109318415701103097727930 | 31941 -modpow 243156859672519307321153581212021253 3260555702553945468884134968721480838704280527914072474823588572815815 -6448682941026310750680909931385071426263300630552724744641678647271286687166 => -3751211169313838089229611655755985482068309791863217518245299527773779575177 | 41917 +modpow -139977492253643843815578476296854790857918956556164524962451384656929776791 19512859069528190547709669949335592819144938929303961613 -478470020404575948621768324210923331 => -331653651412512405999254992766293929 | 24781 +modpow -64791059622358908478686621053081647219908135162502 259373047462456577863794218266329928219 -628971748148499256891768906727879036694477620703795395915537 => -20072206811775331334994887278787091736471675272047921518690 | 32040 +modpow 243156859672519307321153581212021253 3641190644236618318550620893555544613746828444256314080338935650983481 -6448682941026310750680909931385071426263300630552724744641678647271286687166 => -5464821456987553501680981728678180223974876080629186697142515889378484820657 | 42094 modpow 332990358763 5319908016577498551406650550098427701661334 -1418540 => -372931 | 18381 modpow 2299905292354191513900875902563 141875065336 -359995929159108042289699858 => -117862348126845195613248329 | 20703 -modpow 5058552831645192517142546827814 141409045121590851424050383664983586242427877197317750668025268451131166 36454984700573552857817740498113823744702 => 23962121418473798618593707102387684183736 | 26433 -modpow -31058705335766256775673230807063961482065523947546630680590106305 540502993822042054673675089287998 -8582000119412484362352833588324729734580806960914559096388411045433 => -6040302398596929424132016848598338831574272609843737865312439063765 | 35358 -modpow 450185812621580731388660381102060832250262640606903284632422 639177811409739648718710971103596230617531539602876881335 -37215428319727867228492123498292592629393612796950462 => -8658180443230874923523824836612603492818855400192656 | 30062 +modpow 5058552831645192517142546827814 1625438019656793478159247117077934929585056019678301207453580932841488610 36454984700573552857817740498113823744702 => 9450908221078334164871598443422783721108 | 26616 +modpow -31058705335766256775673230807063961482065523947546630680590106305 4651793864712785573856821239932098 -8582000119412484362352833588324729734580806960914559096388411045433 => -5880070472603794445640853282191652074416683314019015363838871962288 | 35445 +modpow 450185812621580731388660381102060832250262640606903284632422 5637923923976941115117078452104070185484823904861157631561 -37215428319727867228492123498292592629393612796950462 => -27368870699362488595766137299661022798077373415587740 | 30209 modpow -145160972129861106445703102507465589037742175677454 124785588168670701668598318914002314 490476952379857173846900864905598628109813484911 => 224284025754767503650515588566634710586983908242 | 27073 modpow 14900447450068660502639555504585260221327972103936751 11990827323921805152935876162 -763927185089818535009220889480213408697433297618737015272998586932332195 => -548193401300666541184113198526976454504298297255311900659826864177726504 | 37468 -modpow 25891 28036138523148292690307127507194478609203106929224185950274460 2909513255560508821459738484023925099827690399901476555124360165927276 => 1894144191344909070509796443440327738743833538126812591492406272981469 | 37055 -modpow 41307950130866512177414748499853635907835185218669972808009565559037628450235 1287580913045529151393205181180348236208723138 1501757892 => 1297404549 | 19675 +modpow 25891 383340000807153217848435168132143147636480859479170779886877796 2909513255560508821459738484023925099827690399901476555124360165927276 => 415647085889616467229511448274171657245833163369025880943307675572281 | 37214 +modpow 41307950130866512177414748499853635907835185218669972808009565559037628450235 4421409857778310372839938696617632309322263358 1501757892 => 1184200317 | 19792 modpow 84647271967992305728988965527532345194 14216733774722474 -1201891202879276439 => -3845101726434132 | 19169 modpow 21022030067493390571638110 19 3985415524780515210882174439738 => 1676359633942413918978194501486 | 21100 modpow -16121320513256377 122798613469119683696460684212838550475730845978283 646232262405045884006780874240087 => 148979182098512240211935817349550 | 22845 -modpow -497910514207506245119004766927772641 6812067747587075695746734586206054391240219 -18895 => -12531 | 18646 +modpow -497910514207506245119004766927772641 15488677450943547445788983686442307114740197 -18895 => -6821 | 18757 modpow -45042160830367584437888590274500444458095213709979869898604841883 31284448460145775480751922158500475999252639551207627773276642275 33881409773617763466725026579 => 7048906115113633036478184470 | 23357 modpow -222695427896 32634579984002805653822136187291281675895282788337321 2107839364582346862216167200209701614366099472236591123323 => 1370216355315947428903544001341088945497913298431783571048 | 30978 -modpow 349522504978587389691128535519397627948502341249 140147107477918 -24388799035691830948123625264990232606940242694126288570884791930903232947088 => -1648296291322202792621927114026463769681705038002357875185694024195339005375 | 39692 -modpow 395373886030 26711761331328296625555980546539894114961292899691804 -505059883498364527727 => -97501515076946998340 | 20433 -modpow -21208806673538363726799712017159877692322187608066968098621176850 1412083823851111946201229201633496241679815187887622753507786753358 949849158335274244510 => 467255654746174302090 | 22169 +modpow 349522504978587389691128535519397627948502341249 141327869232738 -24388799035691830948123625264990232606940242694126288570884791930903232947088 => -9639699804694820701631500585319673182916020299755682155734383017206535585215 | 39731 +modpow 395373886030 69069209972789757021840708650354429861209902236783332 -505059883498364527727 => -401946996822365743463 | 20568 +modpow -21208806673538363726799712017159877692322187608066968098621176850 25547862843299527848465785885386134431957329234652949727595823495858 949849158335274244510 => 528304257439127684060 | 22340 modpow 2187097494224051361861682022282383 35356314838399485713681029677055871742640478000454763 -2677197097065677078601991589099350884393559453105069925076 => -1097070520450280631251017080447490682055185935961558066153 | 31320 modpow -880943435642031162346365810939871128448747126273995235228388261288457003 163061405189328543258463495393992158999032919120937336406476760957478641558 -13 => -1 | 21054 -modpow 16804 29675 1 => 0 | 17109 +modpow 16804 35861 1 => 0 | 17124 modpow -29266802130473256517648802151907615801121 8844966875039522515976657521287 1225182 => 238141 | 18372 modpow -2521147352512965065562079108663271128230970503056281463210 0 -12036589568929727 => -12036589568929726 | 19011 -modpow 105837586171729199470400227234998962416778470834434774861087120464775998593 28078293973268922776862779420 18499006439208771529999986232688481048472799235897018528780818392401821642 => 12171491747814777956501631194108799586920015397887859900056945851522040007 | 39101 -modpow 0 8410866175793820679156946652188825469478503 -535830741188057205231809853135733813 => 0 | 22697 +modpow 105837586171729199470400227234998962416778470834434774861087120464775998593 51149868540995414816681170916 18499006439208771529999986232688481048472799235897018528780818392401821642 => 16341713735209367200437513068030593935874533391232919396303315595665613949 | 39176 +modpow 0 13889879022736802462378771620459536036501913 -535830741188057205231809853135733813 => 0 | 22808 modpow -2101408409170353056693406214837788400838850383773751031003 148676776591162894020595802 137437467293319177270021120639265599962059703189683350903118047515006002498 => 19306979843727088026682656439765439378005906016655686429226359207792605963 | 38766 modpow -6834923916052042579592442345975496188967309410236449318474115003914867208562 22816 -34831066691124259 => -26961179491780916 | 19327 modpow 2238808757102169696124755491832409587738505694836065499609453399775101 14669302852624075 -1184037686142548176744049443332120052102126211 => -419439233503463695637460728568489953618653771 | 26020 -modpow 19122244989422039462212531134757542194292 43092030317760146580863222295853973265523 25231082412015014190968267040381799856374403837298365225848277 => 17921801117027594824179078237819423877224458299843140550422560 | 32969 +modpow 19122244989422039462212531134757542194292 44020255614000100065760677206678688867213 25231082412015014190968267040381799856374403837298365225848277 => 18214814511038258361826445181477114130898718332596781823825164 | 33074 modpow 28730735215185463122491807665 34684081401840169956086861836313141047480199439578439490165182275596264033804 13791455045232558 => 2519276773814077 | 21627 modpow -1231896809978407204929623641632273 29244798 6578088425203394999670366462595472508621919576083272657 => 4219776548597043790706621877707419480878455320147570523 | 28919 -modpow 2685979064248344529970095922740325496982685803 189531787963074999872417017120181666284633774770740745576047652141759 414673301940229919241680839861152145312956393170 => 278225318362069572041941962453177102163399539547 | 28845 +modpow 2685979064248344529970095922740325496982685803 6712214558827488787562338845156843786166475197399645809586476571657537 414673301940229919241680839861152145312956393170 => 136956479045902418349355090984914419370420947843 | 29022 modpow -6107397341423535862409001955860924107102764229348969800262098638280055710995 5143 1892887305122419093117 => 1490603504940180143306 | 20019 -modpow 9327269001805104201783831231869108640672160 151181716517717341445466515718312599723033633218745071661717290908758801074 -378370235446048088333269161012738612 => -288388478263718841109586780361067208 | 25442 -modpow 1788 328348035999299733936967721222170419267006591028766101207760333413 -1181114911067829001770499127126966 => -440227708687771376794772875109674 | 23684 +modpow 9327269001805104201783831231869108640672160 301131132065549046927857644471874540328802244381413381617413896622151861582 -378370235446048088333269161012738612 => -6076862902327366942723687463768456 | 25631 +modpow 1788 26631598631151340060730047365797460254370137831511806379895849915803 -1181114911067829001770499127126966 => -603841598655388131499297713207714 | 23855 modpow -2088672468461047937671393658120552769957178222 58811566506236884831421560846289322247 -440359948039165830601779131763146952763014924 => -52662294815776389701579809028498412703409920 | 26261 -modpow -413554889550878109394427 17770482216643826 2685976723368638488172569973687889460886588084 => 1909622343708139741054383450442131811226054469 | 25298 +modpow -413554889550878109394427 54287111821284110 2685976723368638488172569973687889460886588084 => 307718657845512697343496789278213028997057425 | 25343 modpow 22503486042702 3649389308827170028245374703142714003988267689432493055654091418723654381 1872822 => 843402 | 20330 modpow 16 81 18 => 10 | 17072 modpow 105264707192472590460764606431723643173913108513272218434095816628988196397 561925103773649073828 -2011337710193729414458242846655738 => -1481226858421090197144233652850103 | 22677 modpow -1556063180244785076730254370715253 886394114349939750260442380107925 21673600565554679413103836476648220636949938301018984732142353379 => 6612044475755744445157169012190514149900285446567802489274301883 | 33699 -modpow 11018719240679211400064280626176877151158 12785448599537988 -116850540263088960146291306847811352624803238504907211527138295500385968641 => -6758414731075208676043763946915437421045511364930855107171685490501465863 | 38284 +modpow 11018719240679211400064280626176877151158 59272145438389948 -116850540263088960146291306847811352624803238504907211527138295500385968641 => -109885445415545371389585423855557235211545461529825012732332307941659263807 | 38329 modpow 12427825052544284970857936507626889354412007436838474648998499819468821518195 512657913033070157655119 -41904548395284854631440219805703610431175 => -1559406221375566057616486141752353634700 | 24755 -modpow 204328576391261868990424914252320091898741895008053660216112503139737307706 138688377761200524300233816734100307912 -1960943074189674661514499705335955576846966327793302830316938131405977 => -137186383551909737202770933679114191732603792945662498547680246628216 | 36897 +modpow 204328576391261868990424914252320091898741895008053660216112503139737307706 201593989159737939163140790697667903544 -1960943074189674661514499705335955576846966327793302830316938131405977 => -1246341535939857673546801125371169906144652759891733240850159277471613 | 36996 modpow -6 30138465620737564 726928931209577062470827916633114366611111238684785264589368311 => 661176240160392645106434971039496513772304918821143036582895453 | 32764 modpow -240479032143817459279536319357568617 3052041526079063130765795546614741084919945461296943492148307945978606 -1794701639765299254306715020962886497653805097955442750872504610304937 => -1647022723217388312573591829141149477446206964002042421934730284039218 | 38044 modpow 44 5382155083578524 -18946 => -16446 | 17289 modpow 2382491227351527824121904076036 2366553480930035916351834891416166 206084344072900994463538229219404962402416767984089901321116749017333 => 67943375914165129535273275193593217343143151412736498336095035970623 | 36033 -modpow 23258187105707320739278112614 7917922667604749725149180349721817446780686636843083519 1 => 0 | 19064 -modpow 8670863752535413128 1868257382503913533352 55075311331347915103890023176548556566482409408120877305150928892986889894658 => 33787765181624380116650016624306967311919517369622229111825127547407743502940 | 39371 -modpow 984206940936480543327909996514863176553036873731926353232 8270523329166451163026064574411 472571284609832441689410 => 138026865931375102233688 | 20619 -modpow -1354430444353840323286370383169814632912271012804023644116831698584986170141 108139643608966326896582205547706756268971939435648394629370736 1162433088218164 => 430526826401245 | 21343 +modpow 23258187105707320739278112614 16602005986249472008584372084683129491119139318094551297 1 => 0 | 19205 +modpow 8670863752535413128 2854109100365731680344 55075311331347915103890023176548556566482409408120877305150928892986889894658 => 23692279080294181357137534504261458720180518988934213718794329931531782201658 | 39428 +modpow 984206940936480543327909996514863176553036873731926353232 12011886274485219260921186711605 472571284609832441689410 => 153639113761134309582562 | 20700 +modpow -1354430444353840323286370383169814632912271012804023644116831698584986170141 303236495721335183642160090091630869976712026972746571207781520 1162433088218164 => 176620765935425 | 21502 modpow 33786105728739852970036897571980297154428 0 45089358623573236161578682056206310549785050161612411 => 1 | 27820 -modpow 510918259215217773827404 2988888793133482134407311956698672082359846295077637375114 31835286396270615641169955733288714095333832445276181 => 27471949546721693024969506139885429680620279342680149 | 29492 +modpow 510918259215217773827404 3288212942253198629428477466508994333742509149386397137782 31835286396270615641169955733288714095333832445276181 => 2910157908004489504441083014170799548027784783243995 | 29639 modpow -21763517261285168198304522403631449116302061329166893 48987287752474643027476841109859020152704603845238583224443396893665320441693 25491638648357 => 22793607330710 | 21724 -modpow 10123758058400610168643864507971741089684750710354199671 137951224006078384912187441092554157039521564500796 -836411821147741413765283278196305076075515487397557849751 => -512673022995469182702022922155921667678125132908826429833 | 31533 -modpow 10762 445599801321789027313490 -3151283992561367894431635059126621662380715304024871763380175840924019 => -2523004165020474520043505336741034272415896828724574953206863574640468 | 35327 -modpow -4308966843024579935015442371979092725243272 7802078821906207661390809784288609668563687907461378398864385745270 -110408218668101715627739605731232045029618165860046101668018398555026741 => -13000454049382211882274761633509979320220538994165789299568857423151733 | 39236 -modpow -165393788252323640232028048841451272473505570096101873312903731 88668425 -365186968029295825675051061047050288 => -64281662389497004117757772253201011 | 22911 -modpow 712677000565973058284944677081637470041783525252 132169728272455040473137631826004006300680083725 -751786394 => -663079926 | 19336 +modpow 10123758058400610168643864507971741089684750710354199671 236193195150632762147955876082814295992397166501060 -836411821147741413765283278196305076075515487397557849751 => -560897185947248536534949242647974345025929546411813786608 | 31662 +modpow 10762 763326018292840147392686 -3151283992561367894431635059126621662380715304024871763380175840924019 => -2555003943170154617775305967983977375714513226409384942266416635310358 | 35390 +modpow -4308966843024579935015442371979092725243272 19157867845244432133276205302731021005073456515079194082239224503946 -110408218668101715627739605731232045029618165860046101668018398555026741 => -39329924239353993029013032325000539539558333711269780682014543124077471 | 39407 +modpow -165393788252323640232028048841451272473505570096101873312903731 4206298871 -365186968029295825675051061047050288 => -219142522426309445388588890607210987 | 22938 +modpow 712677000565973058284944677081637470041783525252 1329331909058447877730547200890279013355252459251 -751786394 => -512646514 | 19459 modpow -144091525567649281811542156 3970058046654299831845768537288120180393479027509189 69565046683529034581878249711653242383645753726802900452245993087660969732 => 36699723862121918150955129075525593945428004199620543319736930453465798928 | 39361 modpow -19518081325073017371106001092 0 -29039249998853041243814600013432890133232180307864374561387159015 => -29039249998853041243814600013432890133232180307864374561387159014 | 33035 -modpow -1686795998744384171078699640180316 10697027011083871481051626351394660371383136 -8196970237052878732109591494358498962857858669786 => -6003380352717069717533678866418494492209558134912 | 27975 -modpow 464185131013900743123541188050409486085298225019184585917893189378634461 101 -9479922881624255967936758049736327579022023 => -6277057721814217985777983990943243085016530 | 25127 -modpow 212 121997902378403719486162919 -751397167063598739926475911479263150619573292 => -464940708909182255488735424830269362067252228 | 25210 +modpow -1686795998744384171078699640180316 11603718187446751660484091921253701134597280 -8196970237052878732109591494358498962857858669786 => -1843191644507417543723732693473896012459233554226 | 28086 +modpow 464185131013900743123541188050409486085298225019184585917893189378634461 155 -9479922881624255967936758049736327579022023 => -6087672803740892655030698871673868709719849 | 25136 +modpow 212 187487107442941349238618137 -751397167063598739926475911479263150619573292 => -105883526503204229034269453479932611557904732 | 25279 modpow 11017884725758462464678677279249069075307947 2208263840608182118874111437673808716352821258875321596963752756242007 488506724319461348001335813868232607905166873 => 334094675097948608107483306076589768127991558 | 27978 modpow -96 2194567477140854331776864636732647599186895072 -1198345849523374249319 => -673315108862000198734 | 19912 modpow 149274197819683829092301700826802280221428550446213488814827 2432708850317871612590945612848367902306300123489220424092181509969687 -25264081665781874294767502093095153695983048503995777743137241506118 => -4943923426910753346367334978617166076057013570945737603629352430667 | 38414 @@ -92,9 +92,9 @@ modpow 315740025680709282988 423905010031994570445993407739782579877313864703910 modpow 9942837946427862 539668802232935884452960966290047629606689719768290637950474 21475206879329467850583977827569277270763285430587565512159746506778353804304 => 10312064540474098848767660252352563298788273245585694027916102233539251632592 | 40965 modpow 80693375499465459726065751 76046315686619 29880170441352637154183461256521444725588828 => 24414055950096265028132178586301463536165991 | 25297 modpow 23699 744670906939376197160 -77427118040969712569445272614859580977 => -54785947393213069227146711882977457218 | 22855 -modpow 6055319393741373770 18236757081607999985627736326847549279059480797084992934293376083965723574157 -78036222958371430327672390510956343667153367657486 => -10530795840518438072974114014300918805753296909856 | 29847 +modpow 6055319393741373770 97555332155708195437943248681840358574210503868555571105164207923947406065779 -78036222958371430327672390510956343667153367657486 => -70215459020925866408303429722914985443541645485418 | 30042 modpow -11591409428029140540304087043480200129329955291832962260490116 8425828709091229994 -32029127403376683267945349927621619868223356800741 => -20776274314970869757535187897458470062299152466450 | 27651 -modpow 1179851004250039019608327739190133438259325144959302175941 32761422093976943431678646539504790829888 -78748001118200482009042750723114980330414623979 => -66729720418573121476420304638821491319292982066 | 27379 +modpow 1179851004250039019608327739190133438259325144959302175941 54350863837783303214945252963027871302848 -78748001118200482009042750723114980330414623979 => -53475918790551437378310968390246913451277327381 | 27484 modpow 19042294903859697 5867850 -23700075345122183 => -18817788509551926 | 18392 modpow 289522979948940146746954 121958 -10179294340966250348948035777 => -2984029956443741104695992008 | 20551 modpow -558219413071622452365509205200044071724207098994032620079796 16099812995534856 41313693123402349702377041402941342064840262266693187796245988721071901989780 => 20055527661893958142519361451570306971653172747578901362009413767976656443796 | 39921 diff --git a/tools/src/bin/generate-modpow-tests.rs b/tools/src/bin/generate-modpow-tests.rs index 61745473..6fd6c025 100644 --- a/tools/src/bin/generate-modpow-tests.rs +++ b/tools/src/bin/generate-modpow-tests.rs @@ -1,7 +1,7 @@ use std::fs; use clvmr::Allocator; -use num_bigint::BigInt; +use num_bigint::{BigInt, Sign}; use num_integer::Integer; use rand::{Rng, SeedableRng}; use rand_chacha::ChaCha8Rng; @@ -25,10 +25,7 @@ fn main() { let base = BigInt::from_signed_bytes_be(&bytes(0, 32)); // Generate a random exponent, but ensure it's positive. - let mut exponent = BigInt::from_signed_bytes_be(&bytes(0, 32)); - if exponent < BigInt::ZERO { - exponent = -exponent; - } + let exponent = BigInt::from_bytes_be(Sign::Plus, &bytes(0, 32)); // Generate a random modulus, but ensure it's non-zero. let mut modulus = BigInt::from_signed_bytes_be(&bytes(0, 32)); @@ -36,12 +33,12 @@ fn main() { modulus += 1; } - let base_len = to_atom(base.clone()).len(); - let exponent_len = to_atom(exponent.clone()).len(); - let modulus_len = to_atom(modulus.clone()).len(); + let base_len = atom_len(base.clone()); + let exponent_len = atom_len(exponent.clone()); + let modulus_len = atom_len(modulus.clone()); let result = base.modpow(&exponent, &modulus); - let result_len = to_atom(result.clone()).len(); + let result_len = atom_len(result.clone()); let cost = 17000 + base_len * 38 + exponent_len * exponent_len * 3 @@ -62,12 +59,12 @@ fn main() { modulus += 1; } - let base_len = to_atom(base.clone()).len(); - let modulus_len = to_atom(modulus.clone()).len(); + let base_len = atom_len(base.clone()); + let modulus_len = atom_len(modulus.clone()); // CLVM uses neither `%` nor `mod_euclid`, but rather `mod_floor`. let result = base.mod_floor(&modulus); - let result_len = to_atom(result.clone()).len(); + let result_len = atom_len(result.clone()); let cost = 988 + base_len * 4 + modulus_len * 4 + result_len * 10; tests.push_str(&format!("% {base} {modulus} => {result} | {cost}\n")); @@ -77,9 +74,8 @@ fn main() { } // Convert a `BigInt` to a CLVM atom. -fn to_atom(num: BigInt) -> Vec { +fn atom_len(num: BigInt) -> usize { let mut allocator = Allocator::new(); let ptr = allocator.new_number(num).unwrap(); - let atom = allocator.atom(ptr); - atom.as_ref().to_vec() + allocator.atom_len(ptr) }