Merge pull request #1157 from Kelimion/math_big_llvm12

LLVM 12 big math test workaround.
This commit is contained in:
Jeroen van Rijn authored and GitHub committed 2021-09-11 20:43:43 +02:00
commit 87f1815486
3 files changed
+36 -53

No files matched your search

+5 -1
View File
@@ -2,6 +2,7 @@
rem math/big tests
set PATH_TO_ODIN==..\..\..\..\odin
set TEST_ARGS=-fast-tests
set TEST_ARGS=-no-random
set TEST_ARGS=
set OUT_NAME=math_big_test_library
set COMMON=-build-mode:shared -show-timings -no-bounds-check -define:MATH_BIG_EXE=false -vet -strict-style
@@ -9,5 +10,8 @@ echo ---
echo Running core:math/big tests
echo ---
%PATH_TO_ODIN% build . %COMMON% -o:speed -out:%OUT_NAME%
rem Fails
:%PATH_TO_ODIN% build . %COMMON% -o:speed -out:%OUT_NAME%
rem Passes
%PATH_TO_ODIN% build . %COMMON% -o:size -out:%OUT_NAME%
python3 test.py %TEST_ARGS%
+25 -52
View File
@@ -24,6 +24,12 @@ PyRes :: struct {
err: big.Error,
}
print_to_buffer :: proc(val: ^big.Int) -> cstring {
context = runtime.default_context()
r, _ := big.int_itoa_cstring(val, 16, context.allocator)
return r
}
@export test_initialize_constants :: proc "c" () -> (res: u64) {
context = runtime.default_context()
res = u64(big.initialize_constants())
@@ -34,7 +40,7 @@ PyRes :: struct {
@export test_error_string :: proc "c" (err: big.Error) -> (res: cstring) {
context = runtime.default_context()
es := big.Error_String
return strings.clone_to_cstring(es[err], context.temp_allocator)
return strings.clone_to_cstring(es[err], context.allocator)
}
@export test_add :: proc "c" (a, b: cstring) -> (res: PyRes) {
@@ -52,9 +58,8 @@ PyRes :: struct {
if err = #force_inline big.internal_add(sum, aa, bb); err != nil { return PyRes{res=":add:add(sum,a,b):", err=err} }
}
r: cstring
r, err = big.int_itoa_cstring(sum, 16, context.temp_allocator)
if err != nil { return PyRes{res=":add:itoa(sum):", err=err} }
r := print_to_buffer(sum)
return PyRes{res = r, err = nil}
}
@@ -73,8 +78,7 @@ PyRes :: struct {
if err = #force_inline big.internal_sub(sum, aa, bb); err != nil { return PyRes{res=":sub:sub(sum,a,b):", err=err} }
}
r: cstring
r, err = big.int_itoa_cstring(sum, 16, context.temp_allocator)
r := print_to_buffer(sum)
if err != nil { return PyRes{res=":sub:itoa(sum):", err=err} }
return PyRes{res = r, err = nil}
}
@@ -90,9 +94,7 @@ PyRes :: struct {
if err = big.atoi(bb, string(b), 16); err != nil { return PyRes{res=":mul:atoi(b):", err=err} }
if err = #force_inline big.internal_mul(product, aa, bb); err != nil { return PyRes{res=":mul:mul(product,a,b):", err=err} }
r: cstring
r, err = big.int_itoa_cstring(product, 16, context.temp_allocator)
if err != nil { return PyRes{res=":mul:itoa(product):", err=err} }
r := print_to_buffer(product)
return PyRes{res = r, err = nil}
}
@@ -106,9 +108,7 @@ PyRes :: struct {
if err = big.atoi(aa, string(a), 16); err != nil { return PyRes{res=":sqr:atoi(a):", err=err} }
if err = #force_inline big.internal_sqr(square, aa); err != nil { return PyRes{res=":sqr:sqr(square,a):", err=err} }
r: cstring
r, err = big.int_itoa_cstring(square, 16, context.temp_allocator)
if err != nil { return PyRes{res=":sqr:itoa(square):", err=err} }
r := print_to_buffer(square)
return PyRes{res = r, err = nil}
}
@@ -126,13 +126,10 @@ PyRes :: struct {
if err = big.atoi(bb, string(b), 16); err != nil { return PyRes{res=":div:atoi(b):", err=err} }
if err = #force_inline big.internal_div(quotient, aa, bb); err != nil { return PyRes{res=":div:div(quotient,a,b):", err=err} }
r: cstring
r, err = big.int_itoa_cstring(quotient, 16, context.temp_allocator)
if err != nil { return PyRes{res=":div:itoa(quotient):", err=err} }
r := print_to_buffer(quotient)
return PyRes{res = r, err = nil}
}
/*
res = log(a, base)
*/
@@ -153,9 +150,7 @@ PyRes :: struct {
aa.used = 2
big.clamp(aa)
r: cstring
r, err = big.int_itoa_cstring(aa, 16, context.temp_allocator)
if err != nil { return PyRes{res=":log:itoa(res):", err=err} }
r := print_to_buffer(aa)
return PyRes{res = r, err = nil}
}
@@ -172,9 +167,7 @@ PyRes :: struct {
if err = big.atoi(bb, string(base), 16); err != nil { return PyRes{res=":pow:atoi(base):", err=err} }
if err = #force_inline big.internal_pow(dest, bb, power); err != nil { return PyRes{res=":pow:pow(dest, base, power):", err=err} }
r: cstring
r, err = big.int_itoa_cstring(dest, 16, context.temp_allocator)
if err != nil { return PyRes{res=":log:itoa(res):", err=err} }
r := print_to_buffer(dest)
return PyRes{res = r, err = nil}
}
@@ -191,9 +184,7 @@ PyRes :: struct {
if err = big.atoi(src, string(source), 16); err != nil { return PyRes{res=":sqrt:atoi(src):", err=err} }
if err = #force_inline big.internal_sqrt(src, src); err != nil { return PyRes{res=":sqrt:sqrt(src):", err=err} }
r: cstring
r, err = big.int_itoa_cstring(src, 16, context.temp_allocator)
if err != nil { return PyRes{res=":log:itoa(res):", err=err} }
r := print_to_buffer(src)
return PyRes{res = r, err = nil}
}
@@ -210,9 +201,7 @@ PyRes :: struct {
if err = big.atoi(src, string(source), 16); err != nil { return PyRes{res=":root_n:atoi(src):", err=err} }
if err = #force_inline big.internal_root_n(src, src, power); err != nil { return PyRes{res=":root_n:root_n(src):", err=err} }
r: cstring
r, err = big.int_itoa_cstring(src, 16, context.temp_allocator)
if err != nil { return PyRes{res=":root_n:itoa(res):", err=err} }
r := print_to_buffer(src)
return PyRes{res = r, err = nil}
}
@@ -229,9 +218,7 @@ PyRes :: struct {
if err = big.atoi(src, string(source), 16); err != nil { return PyRes{res=":shr_digit:atoi(src):", err=err} }
if err = #force_inline big.internal_shr_digit(src, digits); err != nil { return PyRes{res=":shr_digit:shr_digit(src):", err=err} }
r: cstring
r, err = big.int_itoa_cstring(src, 16, context.temp_allocator)
if err != nil { return PyRes{res=":shr_digit:itoa(res):", err=err} }
r := print_to_buffer(src)
return PyRes{res = r, err = nil}
}
@@ -248,9 +235,7 @@ PyRes :: struct {
if err = big.atoi(src, string(source), 16); err != nil { return PyRes{res=":shl_digit:atoi(src):", err=err} }
if err = #force_inline big.internal_shl_digit(src, digits); err != nil { return PyRes{res=":shl_digit:shr_digit(src):", err=err} }
r: cstring
r, err = big.int_itoa_cstring(src, 16, context.temp_allocator)
if err != nil { return PyRes{res=":shl_digit:itoa(res):", err=err} }
r := print_to_buffer(src)
return PyRes{res = r, err = nil}
}
@@ -267,9 +252,7 @@ PyRes :: struct {
if err = big.atoi(src, string(source), 16); err != nil { return PyRes{res=":shr:atoi(src):", err=err} }
if err = #force_inline big.internal_shr(src, src, bits); err != nil { return PyRes{res=":shr:shr(src, bits):", err=err} }
r: cstring
r, err = big.int_itoa_cstring(src, 16, context.temp_allocator)
if err != nil { return PyRes{res=":shr:itoa(res):", err=err} }
r := print_to_buffer(src)
return PyRes{res = r, err = nil}
}
@@ -286,9 +269,7 @@ PyRes :: struct {
if err = big.atoi(src, string(source), 16); err != nil { return PyRes{res=":shr_signed:atoi(src):", err=err} }
if err = #force_inline big.internal_shr_signed(src, src, bits); err != nil { return PyRes{res=":shr_signed:shr_signed(src, bits):", err=err} }
r: cstring
r, err = big.int_itoa_cstring(src, 16, context.temp_allocator)
if err != nil { return PyRes{res=":shr_signed:itoa(res):", err=err} }
r := print_to_buffer(src)
return PyRes{res = r, err = nil}
}
@@ -305,9 +286,7 @@ PyRes :: struct {
if err = big.atoi(src, string(source), 16); err != nil { return PyRes{res=":shl:atoi(src):", err=err} }
if err = #force_inline big.internal_shl(src, src, bits); err != nil { return PyRes{res=":shl:shl(src, bits):", err=err} }
r: cstring
r, err = big.int_itoa_cstring(src, 16, context.temp_allocator)
if err != nil { return PyRes{res=":shl:itoa(res):", err=err} }
r := print_to_buffer(src)
return PyRes{res = r, err = nil}
}
@@ -323,9 +302,7 @@ PyRes :: struct {
if err = #force_inline big.internal_int_factorial(dest, n); err != nil { return PyRes{res=":factorial:factorial(n):", err=err} }
r: cstring
r, err = big.int_itoa_cstring(dest, 16, context.temp_allocator)
if err != nil { return PyRes{res=":factorial:itoa(res):", err=err} }
r := print_to_buffer(dest)
return PyRes{res = r, err = nil}
}
@@ -343,9 +320,7 @@ PyRes :: struct {
if err = big.atoi(bi, string(b), 16); err != nil { return PyRes{res=":gcd:atoi(b):", err=err} }
if err = #force_inline big.internal_int_gcd_lcm(dest, nil, ai, bi); err != nil { return PyRes{res=":gcd:gcd(a, b):", err=err} }
r: cstring
r, err = big.int_itoa_cstring(dest, 16, context.temp_allocator)
if err != nil { return PyRes{res=":gcd:itoa(res):", err=err} }
r := print_to_buffer(dest)
return PyRes{res = r, err = nil}
}
@@ -363,9 +338,7 @@ PyRes :: struct {
if err = big.atoi(bi, string(b), 16); err != nil { return PyRes{res=":lcm:atoi(b):", err=err} }
if err = #force_inline big.internal_int_gcd_lcm(nil, dest, ai, bi); err != nil { return PyRes{res=":lcm:lcm(a, b):", err=err} }
r: cstring
r, err = big.int_itoa_cstring(dest, 16, context.temp_allocator)
if err != nil { return PyRes{res=":lcm:itoa(res):", err=err} }
r := print_to_buffer(dest)
return PyRes{res = r, err = nil}
}
+6
View File
@@ -509,6 +509,10 @@ TESTS = {
[ 1234, 5432],
[ 0xd3b4e926aaba3040e1c12b5ea553b5, 0x1a821e41257ed9281bee5bc7789ea7 ],
[ 1 << 21_105, 1 << 21_501 ],
[
1730049336780927115956819686084386761976649380496856295804733690382760679622521498499921378784999570040271671925282244844227926513254947505760453265751925233363030016710223529453611114150096214358876871544215680932353097397897122621984375092474133393053294977255698548380501779165732851763338230363578093763769439102609171758268746816086960113106882499458387307669542211952704912157356576861961972768593905554420978528580995386554359520223733821688040356932599460903642004593989258224090066200205811545449328342874985004936989038151949680315248981915720041124876396153675254746544866867028149203350976744445435225126520798064171376343984296634838803422918301298254984982665599902379373705468835781969789807400857256337356383393961948567488204866782561661516542741894721525263376596495934506415330671185934290682139796941439411384604901664995378273710569974505716752886145273338333891832366700048762023254741569307251599758237233773781429091918051518799686824417084288083651448165395380039381015360363773971673121312498405250931600966368271888969486090874111776466343306964128647016555509147202959928525495091285313778400354945501547606122608174049426458283906654605017272762789394862530631456378675885996618520988466391688295798533253809765316410882810991690837065239007520466766004127431689022253919911135407947926638077005426651048535013175810559524255472354897202098221602023343651307693092594595360916333574712793311566096740232505174235926796670762625867042793655130238521985025204494551431086964825393205742515852874523288485034055478725362889688070393834278042164537803763851055914331239178122380835108766976077034143441567602291243077986687725000039509776134269255948365679462005506286749635355692967678000137403769294016297074060159759958317333838183102961577247353080391899380925437019232361883658021468008626726340998633758018693007791420933588169821810101049458198325500017716951681696808012893297261929276815421897289964433942270688119583435216485766144260090560765441294877258212550540337102518762499129074888234322963229378578567988816715822301010709403075393789989770675527771854132912072315260600909792474033475665370488822055013572703331421366250253857961301330238864830844458292605005914325375618249733031623536934624536852343616515661053681173955269638737116947238948249548629819827998846959450749725369804986271927749582045980299289917776988677895104094745962452512491680956045772823555404030003162937740443845867469746904408025223895782807886855239537989132423006372119600868205973133604844769569791145608016444032946191020200576534243394193912801091722722241519777526906505124763900211982937072618715161818565145685306927315199322818876860612197941236260782243172598045161156734259422066932002893512561419310981825851272999858949983337436890302365344666481416720248061311845178104735892705675864159873031989853816586787033390034673399302527048969000571597056500471799485619607682961163996605458680900518142302640900244347937450870396258768686407877177058812610043549822495930513342101301685377267950709023913123118184810480469280363562564884653831970201667432585603615619490494224693972998053027375230118709801926300034079053018961758730437332325252251350871203856288581014729514119560028148702180915117133398079363829103930529685044592367216255367190344182262795831891396761345379486553003619077290827379834924118492352991278451970215860985161359740489218979048771848630734561772340413962282961951804839625192043526541100859135769664389353539653630387616786543322936429843226114776303864861511695088506754638071413183425075157412033344878110436795248633793319478706590787894029114890373877308647612480475135214049464963978960668902827298257063068707176495355541396976529698791443461770107134798292939666824250865906686636698298197121275208617399798893909663169890996536443582415047536165536175951228939095370262297540739547030517255966952547257702145967949012072201028511301852718794364319420244621446892329053553246148144112081349361624442771772388755907316964438478859218275909737233525949036317571033995766105927660789131388251571227854553974279399708496051956380863384593620968959971485529230649053881484031745181426655178676848017753052407611172598644994015055915246460354688848624422876857835341735842161346022540204702522267158458602984859826599961545022260296316276614178053663813496408301794503725163099263816293240353309262025728123008689433505658663285062523880631681698771921612557802476061765240639561588595265817294323233970250837840575194407464234222979084474077958037785835381666582687877520067943278544017087958639705129542601285058824285572725116601751577454014615064562691406682443953290955190682772857673269166420239497581367393789984827784359106010906907058631730428203252038517507628886546612909267330933695114669909915658899947655985966169811892262417427166701685411877537404682428835743477163267979780725082034393056636608881552476411102026459078465300516694338277916543090502895827917092227860170900169467257173674074040468421319196473491980178317Line truncated
2792137305616803816125736371202973842588346907871060193054596221054431637248346525789679785002348132727403381050304333403521587481999372458732683632074946655377226940586292319536282433288785140521353343308120807715685064882137593035298916678320083374661595910612775567155701908996438831713949883784550281569922822457622483208201069251422918253408268112431251358808846071984701166253332282516847624734963781054838320368378806085407578003670518453665342046001889832393119117981341763310622979760755154908902675663856179579170795549470005409764197071438300067489902175089330223064432949726633984891191217176923572344031319455165221390100825635588930238712211222900630755916931560094286195805301756672856225362900244385069233409314804800555961055112156915896179495209531521091435382602595906681453589203960409330978681534220701636627295448211492515088551856302206336820688924876541862852433315779578401739255143867316193807225825715088332912079762451987915314991328087937869306870185231839600162732468104581586152236000750824310995237864293343076286813472691908460982179549036215799901611606423103486063968144180643595753778104520856295571372210315676707071859268823314407120141976675397217336731750795995085232031550730601606044459215570889361983964918472534668526006951123584013924608101570234604877448321092888556603237971244202651109712462161745773547686312884958613172030057699852955140949056233828521648810014892164015132153435011571445381241333780422537123555422435609629862120174301124523055521576485380354301671470141661212013573861351884055770762914906495885949222560999728824951688440107934227374154118679817743711808528809954738849359290001209496723174655240141359924552463330058881371406476600283097970722993054002258834190103641779964974253356931460360048162772804601446022399431015079317112767461578236761288013160789539641472439762181155222054214898090412728062295571731377939868071718985282868670884355757224431507927345732372304163280099866736872721892104636961718101143568602345468944046398382072225271834301304572610815491239030099291767882628770553815655662175838187711099718792290209526514091707024088965625034258707633779373243346268648329011153933286770043104417809552124808102136896675994089547278593004073015362968463599596578808554308520819477600709399168831674255233814165978438526056464478361078391570301959747951289682375087784454254875832221297205223901288838563060542703593685527750869144993727690389411606195646234819572249449567243254465740006482986141506934764083958093696735082026903459069667976547476516046890396191667227069623602398724393529957207486930237108727816598703252336372477271447734620874259257795128322794191544771805411025396764711020975687954299867611459526389083964109961947440978470627588649814866591303328893199861375161351958311192953547610275226193511445893322412132479577605643259736796700502677627676267041108462702498261065294302672511049691223029856778461413499388902372985325489354381113828400128516099643753556431806252824133845353202718540757824181008426150764385827590610022246644888836091709210250256398141051312513942928954281436235203212567329074893150623351979520678490139460207349640843291411935584566997192161120659139802646742056374022348966159384272092526970237017924564363344493535352294266381140549452439197336725170887381697376886867046749323594343191610842495649736825742316119130427699443475457713598478466346701382298420337950120109995758607430701428567672350707901408092793306772973362032467941978203984901698196532107974266061183843855638984220193220163705886917993169740301478717686350138061573948448741546857385535907921238736855169291062872344097792957993007878225570218484070546472765435925667231916054161810140888976824496637911413419457929009269183006205319984045418637498768203719778261755449850497212353922333319713911122334012343134900598916132270604644829454913634527563629404058568623810952755998640033078156451155513267560035484543574043019538784339291871629242325012384135204944882954281389553477879152189124185640959913574077763346382522067410470664241929898503518376560219743198942917391546341101346576855027761227615741812857212781462286291281590403815100866266423178896838999326288367507389614853952328467348264448254848365058616869337644188901694696995597838072259497574878250630600839142179130636622540992856173959139004457390425665695792424693753125303601262422567700409003968093051687322744044494593827435761811466144076164950315807153252935989036175890085157965570880415587551579321808355449005861634711633242567666630114041548642355332004815350423836237355785553577904690555782852626348974775339521215576039797408230631782562433766133887679273870867449928642255968517342018207630614890818003729320237201378717014670107160543911914739280475504823611684049206124135234239649426264861333817106553364926318082950317482140041827480077919125447928404894685157009517457024722358190275650378618567733069775349818673041206914762974760977283863231733835125792093849471287070810803893410185857944700112882461Line truncated
]
],
test_sqr: [
[ 5432],
@@ -534,6 +538,8 @@ TESTS = {
[ 42, 1 ], # 1
[ 42, 0 ], # 42
[ 42, 2 ], # 42*42
[ 1023423462055631945665902260039819522, 6],
[ 2351415513563017480724958108064794964140712340951636081608226461329298597792428177392182921045756382154475969841516481766099091057155043079113409578271460350765774152509347176654430118446048617733844782454267084644777022821998489944144604889308377152515711394170267839394315842510152114743680838721625924309675796181595284284935359605488617487126635442626578631, 4],
],
test_sqrt: [
[ -1, Error.Invalid_Argument, ],