diff --git a/cardano-constitution/cardano-constitution.cabal b/cardano-constitution/cardano-constitution.cabal index c36a4b57d72..0e1a67d6cb6 100644 --- a/cardano-constitution/cardano-constitution.cabal +++ b/cardano-constitution/cardano-constitution.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: cardano-constitution -version: 1.56.0.0 +version: 1.56.0.1 license: Apache-2.0 license-files: LICENSE diff --git a/plutus-benchmark/marlowe/test/budgets.golden.tsv b/plutus-benchmark/marlowe/test/budgets.golden.tsv index 3903cfa6227..480d6bdc510 100644 --- a/plutus-benchmark/marlowe/test/budgets.golden.tsv +++ b/plutus-benchmark/marlowe/test/budgets.golden.tsv @@ -1,200 +1,200 @@ -301137473 1460513 11275 -395666424 1632030 11275 -890369254 4423273 11275 -744909977 3391976 11275 -829415121 2319186 11275 -277127668 1349750 11275 -691051775 3234118 11275 -723218842 3519131 11275 -669990210 3098979 11275 -1077348502 4936736 11275 -1089558512 4769686 11275 -934881171 4501592 11275 -1047651082 5015665 11275 -1230185100 5749300 11275 -433093177 2116528 11275 -708896414 3398397 11275 -455708817 2224126 11275 -696490812 3369395 11275 -279349608 1354652 11275 -812887064 3751213 11275 -708397137 3142529 11275 -279404166 1354652 11275 -957406163 1239515 11275 -3873475314 1679698 11275 -313833075 1480740 11275 -277127668 1349750 11275 -482205675 2360755 11275 -1750211674 1612785 11275 -866532136 3247810 11275 -725277948 3532481 11275 -686197861 3081116 11275 -982421873 4774172 11275 -279349608 1354652 11275 -428157255 2100118 11275 -549064462 2671686 11275 -658649396 3094549 11275 -277127668 1349750 11275 -783903144 3663594 11275 -277127668 1349750 11275 -936001102 4545913 11275 -630297546 3066708 11275 -356414975 1532990 11275 -346603144 1655541 11275 -360154680 1723019 11275 -277127668 1349750 11275 -669830311 3257645 11275 -277127668 1349750 11275 -444215857 2167812 11275 -969999812 4527079 11275 -932765782 4444658 11275 -473217982 2272955 11275 -279349608 1354652 11275 -644075352 3083226 11275 -446101027 2176404 11275 -582644178 2822621 11275 -2157565956 1883126 11275 -1309342596 5534246 11275 -946320357 4564745 11275 -3873475314 1679698 11275 -446383353 2172714 11275 -725143764 3415402 11275 -435369675 2121430 11275 -725621304 3493632 11275 -709521586 3478717 11275 -629879902 3067128 11275 -490488101 2322321 11275 -420907740 1947985 11275 -1298331711 5394496 11275 -985559429 4685589 11275 -313833075 1480740 11275 -279349608 1354652 11275 -1085075619 4959376 11275 -360154680 1723019 11275 -490488101 2322321 11275 -562012332 2670167 11275 -317660437 1485681 11275 -508543076 2451623 11275 -1231241000 5749845 11275 -680950121 3295147 11275 -857712574 4181713 11275 -664013981 3258569 11275 -725000108 3493339 11275 -947081162 1184963 11275 -780236226 3735263 11275 -748387341 3566474 11275 -450568158 2193349 11275 -17813432889 1041483 11275 -929344412 4530482 11275 -277127668 1349750 11275 -430379195 2105020 11275 -676431662 3294241 11275 -324582631 1437576 11275 -351933935 1679378 11275 -279349608 1354652 11275 -878847948 2540535 11275 -277127668 1349750 11275 -592304224 2738804 11275 -722873155 2950395 11275 -3751569883 1136897 11275 -835570926 3929828 11275 -234128709 1129624 2427 -314105481 1564848 2427 -245533460 1187893 2427 -209893161 1002260 2427 -230184679 1103668 2427 -219316548 1047707 2427 -218378849 1042505 2427 -255828322 1235513 2427 -243875818 1179482 2427 -229269363 1098648 2427 -247333217 1194728 2427 -247529296 1201308 2427 -283288411 1392736 2427 -214602640 1026579 2427 -226118198 1084945 2427 -210369636 994599 2427 -245551572 1196981 2427 -223217455 1069220 2427 -223169584 1081552 2427 -250958161 1221054 2427 -217392424 1042207 2427 -236021560 1137857 2427 -234128709 1129624 2427 -244808822 1187875 2427 -217517949 1036108 2427 -214607145 1023388 2427 -218414958 1043503 2427 -213664865 1021377 2427 -234023565 1121572 2427 -225844721 1081255 2427 -234862680 1133748 2427 -217517949 1036108 2427 -209852471 1004453 2427 -226372285 1086744 2427 -214602564 1026579 2427 -214602564 1026579 2427 -250744050 1219949 2427 -221765519 1061892 2427 -247537229 1207006 2427 -234128709 1129624 2427 -253824587 1224386 2427 -217477259 1038301 2427 -217477259 1038301 2427 -222559891 1069820 2427 -274612090 1348027 2427 -259027367 1257408 2427 -226503921 1095776 2427 -217477259 1038301 2427 -287296787 1423954 2427 -245551572 1196981 2427 -222559891 1069820 2427 -253193021 1234134 2427 -236441360 1144921 2427 -213664865 1021377 2427 -210369636 994599 2427 -217477259 1038301 2427 -218414958 1043503 2427 -217477259 1038301 2427 -218414958 1043503 2427 -240673050 1173991 2427 -248819926 1214449 2427 -250014387 1223444 2427 -232628966 1127997 2427 -222032327 1064331 2427 -229333737 1101219 2427 -238110342 1146433 2427 -208955576 997058 2427 -217477259 1038301 2427 -256148135 1260647 2427 -218414958 1043503 2427 -217477259 1038301 2427 -218414958 1043503 2427 -249842460 1215745 2427 -218414958 1043503 2427 -278655575 1358918 2427 -301797839 1492341 2427 -218414958 1043503 2427 -242217672 1181897 2427 -244808822 1187875 2427 -219316548 1047707 2427 -228816572 1111073 2427 -229419306 1105305 2427 -258125935 1264974 2427 -210369636 994599 2427 -219316548 1047707 2427 -241527409 1158328 2427 -236763500 1138971 2427 -242217672 1181897 2427 -222265976 1068021 2427 -225017212 1076055 2427 -225918802 1080259 2427 -218414958 1043503 2427 -242579645 1167163 2427 -244808822 1187875 2427 -217477259 1038301 2427 -214602564 1026579 2427 -233231700 1122229 2427 -218414958 1043503 2427 -225844721 1081255 2427 -252279389 1223434 2427 +248424032 1171399 11644 +346885177 1363330 11644 +778379524 3802257 11644 +609129152 2644588 11644 +735919276 1805188 11644 +231590438 1099056 11644 +607019942 2769054 11644 +604290223 2862691 11644 +568086331 2536969 11644 +895525256 3933858 11644 +872997034 3569860 11644 +800710216 3757830 11644 +897844156 4187667 11644 +1084302254 4939522 11644 +370757708 1773200 11644 +571230119 2640107 11644 +389181200 1856992 11644 +580692905 2726471 11644 +233812378 1103958 11644 +711795408 3190619 11644 +602722318 2558715 11644 +233866936 1103958 11644 +908624916 970815 11644 +3804911212 1303748 11644 +269377184 1236048 11644 +231590438 1099056 11644 +411013995 1968507 11644 +1695228763 1310369 11644 +756378275 2638394 11644 +604463859 2865139 11644 +602166028 2616052 11644 +863356240 4113344 11644 +233812378 1103958 11644 +361064430 1730082 11644 +473406133 2253536 11644 +574029694 2625685 11644 +231590438 1099056 11644 +639204667 2868286 11644 +231590438 1099056 11644 +810457150 3850269 11644 +541084995 2573930 11644 +307633728 1264290 11644 +288089846 1332823 11644 +295153348 1364289 11644 +231590438 1099056 11644 +578997629 2754867 11644 +231590438 1099056 11644 +381880388 1824484 11644 +836088840 3787211 11644 +813692610 3787316 11644 +408131966 1913823 11644 +233812378 1103958 11644 +561341120 2625264 11644 +383765558 1833076 11644 +505100379 2393569 11644 +2080073934 1458058 11644 +1073317016 4226384 11644 +820776405 3869101 11644 +3804911212 1303748 11644 +384047884 1829386 11644 +587477469 2657112 11644 +373034206 1778102 11644 +618041614 2897026 11644 +605712836 2903915 11644 +538781881 2563448 11644 +394446073 1792917 11644 +372126493 1679285 11644 +1035547674 3943356 11644 +859427608 3986145 11644 +269377184 1236048 11644 +233812378 1103958 11644 +903252373 3956498 11644 +295153348 1364289 11644 +394446073 1792917 11644 +488239473 2262919 11644 +256481276 1147561 11644 +437487311 2058583 11644 +1083472684 4929165 11644 +588231969 2781467 11644 +742660581 3548371 11644 +574801430 2765791 11644 +619305888 2907635 11644 +902625271 940271 11644 +681030040 3185571 11644 +648377024 3011882 11644 +388232689 1850021 11644 +17773302354 820799 11644 +805685930 3845740 11644 +231590438 1099056 11644 +363286370 1734984 11644 +583713510 2780561 11644 +280126740 1192884 11644 +298827332 1386670 11644 +233812378 1103958 11644 +774538713 1966517 11644 +231590438 1099056 11644 +500865342 2235014 11644 +612719294 2340979 11644 +3707113992 892205 11644 +723581196 3308812 11644 +179723132 835100 2621 +258953488 1266920 2621 +194066823 909973 2621 +158170524 722740 2621 +175779102 809144 2621 +164281763 749881 2621 +163344064 744679 2621 +203052215 950291 2621 +188969033 882456 2621 +175736048 809324 2621 +193055640 901004 2621 +194625189 915286 2621 +229138834 1099812 2621 +161506533 739357 2621 +173086091 798123 2621 +155900059 699675 2621 +194020935 918661 2621 +171622818 790500 2621 +172884417 810134 2621 +199491524 943134 2621 +165733787 763087 2621 +183053453 851435 2621 +179723132 835100 2621 +190467245 893751 2621 +163048372 741184 2621 +160945830 733264 2621 +163945381 748579 2621 +160568758 734155 2621 +179681988 827448 2621 +171439144 786731 2621 +181894573 847326 2621 +163048372 741184 2621 +158129834 724933 2621 +173340178 799922 2621 +161506457 739357 2621 +161506457 739357 2621 +195837265 922923 2621 +168733412 775070 2621 +196006592 928686 2621 +179723132 835100 2621 +199611010 931062 2621 +163007682 743377 2621 +163007682 743377 2621 +170901254 790700 2621 +223273453 1070907 2621 +206251260 972186 2621 +174845284 816656 2621 +163007682 743377 2621 +233955472 1135830 2621 +194020935 918661 2621 +170901254 790700 2621 +200288914 948112 2621 +182035783 850397 2621 +160568758 734155 2621 +155900059 699675 2621 +163007682 743377 2621 +163945381 748579 2621 +163007682 743377 2621 +163945381 748579 2621 +189078413 895271 2621 +197289289 936129 2621 +198483750 945124 2621 +179596859 841175 2621 +169000220 777509 2621 +174928160 806695 2621 +183768765 852309 2621 +157232939 717538 2621 +163007682 743377 2621 +204617498 982327 2621 +163945381 748579 2621 +163007682 743377 2621 +163945381 748579 2621 +195500883 921621 2621 +163945381 748579 2621 +224569998 1066394 2621 +249213732 1208319 2621 +163945381 748579 2621 +190623035 903177 2621 +190467245 893751 2621 +164281763 749881 2621 +177157935 831953 2621 +176387199 818483 2621 +205221828 978952 2621 +155900059 699675 2621 +164281763 749881 2621 +186684624 861702 2621 +182421923 844847 2621 +190623035 903177 2621 +170607339 788901 2621 +170611635 781531 2621 +170948017 782833 2621 +163945381 748579 2621 +188302068 873439 2621 +190467245 893751 2621 +163007682 743377 2621 +161506457 739357 2621 +178826123 827705 2621 +163945381 748579 2621 +171439144 786731 2621 +198001812 929710 2621 diff --git a/plutus-benchmark/marlowe/test/data.budgets.golden.tsv b/plutus-benchmark/marlowe/test/data.budgets.golden.tsv index 66b72c0a7e9..b0c70d597f2 100644 --- a/plutus-benchmark/marlowe/test/data.budgets.golden.tsv +++ b/plutus-benchmark/marlowe/test/data.budgets.golden.tsv @@ -1,200 +1,200 @@ -316420351 1471303 12479 -443538497 1784994 12479 -1106684273 5063466 12479 -845597574 3697989 12479 -888793505 2476280 12479 -291882546 1357240 12479 -779145126 3487529 12479 -848156642 3832376 12479 -766124349 3388838 12479 -1123046713 5068472 12479 -1147981976 4965084 12479 -1102673751 4979005 12479 -1262459897 5643974 12479 -1405474119 6279947 12479 -475159388 2225564 12479 -797725765 3656408 12479 -502637997 2366712 12479 -802496902 3616100 12479 -294104486 1362142 12479 -931241146 4055897 12479 -787486179 3356360 12479 -294159044 1362142 12479 -1003806236 1383279 12479 -3930625500 1865520 12479 -361705148 1633704 12479 -291882546 1357240 12479 -564388652 2655807 12479 -1806091138 1792283 12479 -924075600 3437708 12479 -848266329 3835858 12479 -765894903 3298747 12479 -1206510744 5443743 12479 -294104486 1362142 12479 -469417185 2220118 12479 -632253898 2904241 12479 -746150747 3344260 12479 -291882546 1357240 12479 -864288186 3885525 12479 -291882546 1357240 12479 -1145902664 5137465 12479 -718848904 3298003 12479 -404287048 1685954 12479 -361358022 1663031 12479 -374909558 1730509 12479 -291882546 1357240 12479 -795786374 3607970 12479 -291882546 1357240 12479 -486186068 2276248 12479 -1092518744 4826980 12479 -1071808965 4928812 12479 -515284193 2381991 12479 -294104486 1362142 12479 -743434949 3380939 12479 -488071238 2284840 12479 -661509220 3035052 12479 -2214069420 2066524 12479 -1369238060 5738844 12479 -1157094608 5168851 12479 -3930625500 1865520 12479 -488353564 2281150 12479 -813110658 3665511 12479 -477435886 2230466 12479 -841566072 3790909 12479 -845282762 3854564 12479 -702576366 3231927 12479 -516402370 2376045 12479 -470251813 2110149 12479 -1344517386 5489956 12479 -1171420989 5225841 12479 -361705148 1633704 12479 -294104486 1362142 12479 -1130773830 5091112 12479 -374909558 1730509 12479 -516402370 2376045 12479 -657060014 2950724 12479 -319024800 1449171 12479 -586576118 2658854 12479 -1397390416 6248770 12479 -796284694 3591405 12479 -978956006 4614695 12479 -795979392 3638043 12479 -860177482 3869870 12479 -993481235 1328727 12479 -916998881 4115351 12479 -871146373 3879150 12479 -492634369 2302385 12479 -17859832962 1185247 12479 -1157895507 5202909 12479 -291882546 1357240 12479 -471639125 2225020 12479 -796587185 3601091 12479 -372454704 1590540 12479 -399806008 1832342 12479 -294104486 1362142 12479 -930692480 2669751 12479 -291882546 1357240 12479 -688246363 3027463 12479 -778944619 3131093 12479 -3797969956 1280661 12479 -970991712 4289616 12479 -150985921 672865 1690 -332736557 1439089 1690 -190115365 820375 1690 -122155085 542448 1690 -152968897 670387 1690 -120554622 554310 1690 -121492321 559512 1690 -192413183 849841 1690 -185042282 808645 1690 -145612115 656098 1690 -172183567 770065 1690 -203695052 892923 1690 -254783828 1066332 1690 -120554698 554310 1690 -147829032 639523 1690 -113039745 496657 1690 -202094779 904785 1690 -149085243 653220 1690 -166389512 724367 1690 -207684072 885832 1690 -131153445 602910 1690 -160616714 704041 1690 -150985921 672865 1690 -183441933 820507 1690 -122155085 542448 1690 -122155085 542448 1690 -120554622 554310 1690 -121492321 559512 1690 -148028246 661128 1690 -140145091 643790 1690 -167896502 754392 1690 -122155085 542448 1690 -121492321 559512 1690 -152968897 670387 1690 -120554622 554310 1690 -120554622 554310 1690 -183985713 796982 1690 -135013292 607498 1690 -196028252 845140 1690 -150985921 672865 1690 -195694024 836778 1690 -121492321 559512 1690 -121492321 559512 1690 -152968897 670387 1690 -250378052 1066989 1690 -229777135 1023020 1690 -150985921 672865 1690 -121492321 559512 1690 -280227246 1215661 1690 -202094779 904785 1690 -152968897 670387 1690 -198444383 850170 1690 -164789163 736229 1690 -121492321 559512 1690 -113039745 496657 1690 -121492321 559512 1690 -120554622 554310 1690 -121492321 559512 1690 -120554622 554310 1690 -190357276 824065 1690 -194584536 845582 1690 -207839514 920877 1690 -164789163 736229 1690 -140145091 643790 1690 -150414264 657580 1690 -166501588 718145 1690 -123092670 547650 1690 -121492321 559512 1690 -229307268 1002786 1690 -120554622 554310 1690 -121492321 559512 1690 -120554622 554310 1690 -183985713 796982 1690 -120554622 554310 1690 -232656983 1001000 1690 -322571118 1424176 1690 -120554622 554310 1690 -183985713 796982 1690 -183441933 820507 1690 -120554622 554310 1690 -164789163 736229 1690 -150017891 655441 1690 -224985294 975130 1690 -113039745 496657 1690 -120554622 554310 1690 -158627069 709728 1690 -174989357 757652 1690 -183985713 796982 1690 -147819132 639523 1690 -131153445 602910 1690 -131153445 602910 1690 -120554622 554310 1690 -177450631 812346 1690 -183441933 820507 1690 -121492321 559512 1690 -120554622 554310 1690 -150017891 655441 1690 -120554622 554310 1690 -140145091 643790 1690 -197772729 877129 1690 +268046813 1204901 12727 +385737985 1465976 12727 +969122366 4297504 12727 +696868669 2875981 12727 +791085352 1937974 12727 +251117219 1131958 12727 +688049230 2982351 12727 +727742672 3164638 12727 +652473467 2759210 12727 +941244823 4062702 12727 +919303894 3696338 12727 +962612089 4199437 12727 +1099268207 4738754 12727 +1242440076 5372937 12727 +415629275 1896744 12727 +650835407 2844504 12727 +431316340 1972768 12727 +691198869 2996386 12727 +253339159 1136860 12727 +822923797 3454685 12727 +675997975 2738736 12727 +253393717 1136860 12727 +946005724 1064261 12727 +3851704794 1431650 12727 +308229992 1338694 12727 +251117219 1131958 12727 +474163764 2158219 12727 +1740815623 1432347 12727 +803629135 2770772 12727 +727204097 3164320 12727 +676961685 2805573 12727 +1059986387 4627565 12727 +253339159 1136860 12727 +399320867 1833076 12727 +549808714 2447079 12727 +654418982 2834982 12727 +251117219 1131958 12727 +712576324 3048907 12727 +251117219 1131958 12727 +1007639287 4368001 12727 +630997025 2810831 12727 +346486536 1366936 12727 +307616627 1365725 12727 +314680129 1397191 12727 +251117219 1131958 12727 +694012797 3043370 12727 +251117219 1131958 12727 +426655955 1947428 12727 +958167629 4081716 12727 +945548414 4230458 12727 +452955533 2037067 12727 +253339159 1136860 12727 +649864637 2861557 12727 +428541125 1956020 12727 +579064036 2577890 12727 +2125660794 1580036 12727 +1121095876 4362062 12727 +1020669778 4409491 12727 +3851704794 1431650 12727 +428823451 1952330 12727 +666544431 2855507 12727 +417905773 1901646 12727 +726670974 3151989 12727 +726386439 3193536 12727 +618401581 2764963 12727 +422466906 1856151 12727 +412451301 1791131 12727 +1081887360 4036124 12727 +1031871703 4451367 12727 +308229992 1338694 12727 +253339159 1136860 12727 +948971940 4085342 12727 +314680129 1397191 12727 +422466906 1856151 12727 +572776283 2483458 12727 +262745542 1137263 12727 +510618968 2237704 12727 +1236194920 5351864 12727 +696293926 3036309 12727 +847945107 3891823 12727 +700267610 3106159 12727 +741281159 3208842 12727 +940006079 1033717 12727 +804356176 3490131 12727 +763910363 3283940 12727 +433104256 1973565 12727 +17810683162 914245 12727 +1016765452 4417041 12727 +251117219 1131958 12727 +401542807 1837978 12727 +696596417 3045995 12727 +318979548 1295530 12727 +337680140 1489316 12727 +253339159 1136860 12727 +824009484 2081529 12727 +251117219 1131958 12727 +585204478 2456955 12727 +658498154 2464157 12727 +3744494800 985651 12727 +851600289 3626882 12727 +136459454 590143 1630 +294376358 1221527 1630 +172785143 722147 1630 +110170088 474728 1630 +137216014 581261 1630 +107605494 480690 1630 +108543193 485892 1630 +172541491 736611 1630 +165521513 698113 1630 +130472440 570174 1630 +154502422 669139 1630 +180406397 760985 1630 +234912136 953102 1630 +107605570 480690 1630 +134266696 562701 1630 +102018879 434837 1630 +177841993 766947 1630 +134909699 573196 1630 +150636629 635241 1630 +190353850 787604 1630 +116626978 520188 1630 +145477039 618117 1630 +136459454 590143 1630 +162957033 704075 1630 +110170088 474728 1630 +110170088 474728 1630 +107605494 480690 1630 +108543193 485892 1630 +132888571 575204 1630 +123428077 548764 1630 +148375733 643860 1630 +110170088 474728 1630 +108543193 485892 1630 +137216014 581261 1630 +107605494 480690 1630 +107605494 480690 1630 +167881907 705158 1630 +121450956 530676 1630 +179311238 750114 1630 +136459454 590143 1630 +178363802 738550 1630 +108543193 485892 1630 +108543193 485892 1630 +137216014 581261 1630 +228929021 944657 1630 +198952708 848270 1630 +136459454 590143 1630 +108543193 485892 1630 +249402819 1040911 1630 +177841993 766947 1630 +137216014 581261 1630 +181727369 755144 1630 +148072149 641203 1630 +108543193 485892 1630 +102018879 434837 1630 +108543193 485892 1630 +107605494 480690 1630 +108543193 485892 1630 +107605494 480690 1630 +171800638 719433 1630 +176903391 744656 1630 +184550859 788939 1630 +148072149 641203 1630 +123428077 548764 1630 +135625512 574354 1630 +152326044 638121 1630 +111107673 479930 1630 +108543193 485892 1630 +205054482 864948 1630 +107605494 480690 1630 +108543193 485892 1630 +107605494 480690 1630 +167881907 705158 1630 +107605494 480690 1630 +211207952 878668 1630 +279478902 1179308 1630 +107605494 480690 1630 +167881907 705158 1630 +162957033 704075 1630 +107605494 480690 1630 +148072149 641203 1630 +136455555 578619 1630 +201696639 843192 1630 +102018879 434837 1630 +107605494 480690 1630 +141910055 614702 1630 +156432719 653020 1630 +167881907 705158 1630 +134256796 562701 1630 +116626978 520188 1630 +116626978 520188 1630 +107605494 480690 1630 +153197845 674508 1630 +162957033 704075 1630 +108543193 485892 1630 +107605494 480690 1630 +136455555 578619 1630 +107605494 480690 1630 +123428077 548764 1630 +174484074 745191 1630 diff --git a/plutus-core/plutus-core.cabal b/plutus-core/plutus-core.cabal index 15ae0eeb18e..f152b6eecda 100644 --- a/plutus-core/plutus-core.cabal +++ b/plutus-core/plutus-core.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: plutus-core -version: 1.56.0.0 +version: 1.56.0.1 license: Apache-2.0 license-files: LICENSE diff --git a/plutus-executables/plutus-executables.cabal b/plutus-executables/plutus-executables.cabal index 4fdf5c2ab55..1a315d607eb 100644 --- a/plutus-executables/plutus-executables.cabal +++ b/plutus-executables/plutus-executables.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: plutus-executables -version: 1.56.0.0 +version: 1.56.0.1 synopsis: Tools for running plutus core programs homepage: https://github.com/IntersectMBO/plutus license: Apache-2.0 diff --git a/plutus-ledger-api/CHANGELOG.md b/plutus-ledger-api/CHANGELOG.md index e2aa3aef2ac..6355273dae7 100644 --- a/plutus-ledger-api/CHANGELOG.md +++ b/plutus-ledger-api/CHANGELOG.md @@ -1,4 +1,11 @@ + +# 1.56.0.1 — 2026-04-07 + +## Added + +- Brought back Ratio.from/toGHC as deprecated. + # 1.56.0.0 — 2025-11-27 diff --git a/plutus-ledger-api/changelog.d/20251127_160032_bezirg.md b/plutus-ledger-api/changelog.d/20251127_160032_bezirg.md deleted file mode 100644 index 5caba6dfc8c..00000000000 --- a/plutus-ledger-api/changelog.d/20251127_160032_bezirg.md +++ /dev/null @@ -1,3 +0,0 @@ -### Added - -- Brought back Ratio.from/toGHC as deprecated. diff --git a/plutus-ledger-api/plutus-ledger-api.cabal b/plutus-ledger-api/plutus-ledger-api.cabal index 17ecf693330..246cf5c6dd4 100644 --- a/plutus-ledger-api/plutus-ledger-api.cabal +++ b/plutus-ledger-api/plutus-ledger-api.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: plutus-ledger-api -version: 1.56.0.0 +version: 1.56.0.1 license: Apache-2.0 license-files: LICENSE diff --git a/plutus-metatheory/plutus-metatheory.cabal b/plutus-metatheory/plutus-metatheory.cabal index 9e13bd05ca5..513a39ed575 100644 --- a/plutus-metatheory/plutus-metatheory.cabal +++ b/plutus-metatheory/plutus-metatheory.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: plutus-metatheory -version: 1.56.0.0 +version: 1.56.0.1 synopsis: Command line tool for running plutus core programs homepage: https://github.com/IntersectMBO/plutus license: Apache-2.0 diff --git a/plutus-tx-plugin/CHANGELOG.md b/plutus-tx-plugin/CHANGELOG.md index 31223bcc62c..8a359c94cac 100644 --- a/plutus-tx-plugin/CHANGELOG.md +++ b/plutus-tx-plugin/CHANGELOG.md @@ -1,4 +1,11 @@ + +# 1.56.0.1 — 2026-04-07 + +## Fixed + +- Backport: replaced `caseInteger` SoP fallback (runtime list-indexing via `PlutusTx.List.!!`) with a compile-time `equalsInteger`/`ifThenElse` chain, fixing a 3-5x cost regression in `unsafeFromBuiltinData` for multi-constructor types. Also fixed a latent bug in `compileHaskellList` that silently dropped list elements when GHC used `(:)`-chain representation. + # 1.55.0.0 — 2025-11-11 diff --git a/plutus-tx-plugin/plutus-tx-plugin.cabal b/plutus-tx-plugin/plutus-tx-plugin.cabal index 65888661efe..27518d26a43 100644 --- a/plutus-tx-plugin/plutus-tx-plugin.cabal +++ b/plutus-tx-plugin/plutus-tx-plugin.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: plutus-tx-plugin -version: 1.56.0.0 +version: 1.56.0.1 license: Apache-2.0 license-files: LICENSE @@ -143,6 +143,9 @@ test-suite plutus-tx-plugin-tests IntegerLiterals.NoStrict.NoNegativeLiterals.Spec IntegerLiterals.Strict.NegativeLiterals.Spec IntegerLiterals.Strict.NoNegativeLiterals.Spec + IsData.Budget.BuiltinCasing + IsData.Budget.Lib + IsData.Budget.SoP IsData.Spec Lift.Spec List.Properties1 diff --git a/plutus-tx-plugin/src/PlutusTx/Compiler/Expr.hs b/plutus-tx-plugin/src/PlutusTx/Compiler/Expr.hs index d52f36911a2..1205600aea6 100644 --- a/plutus-tx-plugin/src/PlutusTx/Compiler/Expr.hs +++ b/plutus-tx-plugin/src/PlutusTx/Compiler/Expr.hs @@ -45,7 +45,6 @@ import PlutusTx.Compiler.Types import PlutusTx.Compiler.Utils import PlutusTx.Coverage import PlutusTx.Function qualified -import PlutusTx.List qualified import PlutusTx.Optimize.Inline qualified import PlutusTx.PIRTypes import PlutusTx.PLCTypes (PLCType, PLCVar) @@ -57,7 +56,7 @@ import PlutusTx.Trace import PlutusIR qualified as PIR import PlutusIR.Analysis.Builtins import PlutusIR.Compiler.Definitions qualified as PIR -import PlutusIR.Compiler.Names (safeFreshName) +import PlutusIR.Compiler.Names (safeFreshName, safeFreshTyName) import PlutusIR.Compiler.Types qualified as PIR import PlutusIR.Core.Type (Term (..)) import PlutusIR.MkPir qualified as PIR @@ -862,13 +861,22 @@ compileHaskellList = buildList . strip throwPlain $ CompilationError "Unexpected expression where a list constructor was expected" - -- This is when the list is a single element and GHC will specialize list builder directly. - -- GHC will generate core that looks like below: - -- (:) @resTy e ([] @resTy) - buildList (GHC.App (GHC.App (GHC.App (GHC.Var _con) _ty) e) _) = traverse compileExpr [e] - -- This is when the list has more than one elements. GHC will generate core that looks like below: - -- build @resTy (\con nil -> con e1 (con e2 (... nil))) - -- 'build' is some special function that abstracts the list type. + -- GHC may represent lists in two forms: + -- 1. Cons chain: (:) @ty e1 ((:) @ty e2 (... ([] @ty))) + -- 2. Build form: build @ty (\con nil -> con e1 (con e2 (... nil))) + -- Form 1 is used when GHC inlines 'build' (e.g. for recursive types with + -- many constructors). Form 2 is used when build/foldr fusion is possible. + + -- Form 1: explicit (:) chain. Walk the spine, collecting elements. + buildList expr@(GHC.App (GHC.App (GHC.App (GHC.Var con) _ty) _e) _rest) + | GHC.isDataConWorkId con = + let consumeCons = \case + GHC.App (GHC.App (GHC.App (GHC.Var _con) _ty') e) rest -> + (e :) <$> consumeCons (strip rest) + GHC.App (GHC.Var _nil) _ty' -> pure [] -- [] @ty + _ -> err + in consumeCons expr >>= traverse compileExpr + -- Form 2: build-based list. buildList (GHC.App (GHC.App _build _ty) (GHC.Lam _tyArg (GHC.Lam con (GHC.Lam nil li)))) = let consume :: GHC.CoreExpr -> m [GHC.CoreExpr] @@ -922,7 +930,6 @@ compileExpr e = traceCompilation 2 ("Compiling expr:" GHC.<+> GHC.ppr e) $ do inlineName <- lookupGhcName 'PlutusTx.Optimize.Inline.inline caseIntegerName <- lookupGhcName 'Builtins.caseInteger - listIndexId <- lookupGhcId '(PlutusTx.List.!!) let compileMkNil @@ -971,14 +978,36 @@ compileExpr e = traceCompilation 2 ("Compiling expr:" GHC.<+> GHC.ppr e) $ do scrut' <- compileExpr scrut branches <- compileHaskellList li pure $ PIR.kase annAlwaysInline resTy' scrut' branches - | GHC.getName var == caseIntegerName -> - -- This is when we don't have bultin casing. We have to use something - -- else. Currently, it will use PlutusTx.List.!!, but this will be quite a bit - -- less efficient since it will also build the list and than index on the built - -- list. Ideally, It is possible to have some custom PIR here that will generate - -- chain of if-statements so that can skip the list construction work if we want - -- to optimize more here. - compileExpr $ GHC.App (GHC.App (GHC.App (GHC.Var listIndexId) (GHC.Type resTy)) li) scrut + -- SumsOfProducts/Scott: compile to a lazy equalsInteger/ifThenElse chain. + | GHC.getName var == caseIntegerName -> do + resTy' <- compileTypeNorm resTy + scrut' <- compileExpr scrut + branches <- compileHaskellList li + dead <- safeFreshTyName "dead" + let thunkTy = PLC.TyForall annMayInline dead (PLC.Type annMayInline) resTy' + thunk = PIR.TyAbs annMayInline dead (PLC.Type annMayInline) + unthunk t = PIR.TyInst annMayInline t resTy' + -- Uses the (all dead. resTy) / (/\dead -> branch) encoding to avoid + -- evaluating non-matching branches. + -- e.g. ifThenElse {all dead. resTy} (equalsInteger scrut 0) + -- (/\dead -> b0) (/\dead -> ifThenElse ...) {resTy} + mkChain _ [] = PIR.Error annMayInline resTy' + mkChain idx (b : bs) = + unthunk $ + PIR.mkIterApp + (PIR.tyInst annMayInline (PIR.builtin annMayInline PLC.IfThenElse) thunkTy) + [ + ( annMayInline + , PIR.mkIterApp + (PIR.builtin annMayInline PLC.EqualsInteger) + [ (annMayInline, PIR.mkConstant @Integer annMayInline idx) + , (annMayInline, scrut') + ] + ) + , (annMayInline, thunk b) + , (annMayInline, thunk (mkChain (idx + 1) bs)) + ] + pure $ mkChain (0 :: Integer) branches {- Note [Lazy boolean operators] (||) and (&&) have a special treatment: we want them lazy in the second argument, as this is the behavior in Haskell and other PLs. diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing.hs b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing.hs new file mode 100644 index 00000000000..798f780dc5e --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing.hs @@ -0,0 +1,67 @@ +{-# LANGUAGE BlockArguments #-} +{-# LANGUAGE DataKinds #-} +{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE TemplateHaskell #-} +{-# LANGUAGE NoImplicitPrelude #-} +{-# OPTIONS_GHC -fplugin-opt PlutusTx.Plugin:datatypes=BuiltinCasing #-} + +module IsData.Budget.BuiltinCasing where + +import IsData.Budget.Lib + +import PlutusTx.Prelude + +import PlutusTx.Builtins () +import PlutusTx.Code (CompiledCode, unsafeApplyCode) +import PlutusTx.IsData () +import PlutusTx.Lift (liftCodeDef) +import PlutusTx.TH (compile) +import PlutusTx.Test (goldenBundle) +import System.FilePath qualified as Haskell +import Test.Tasty.Extras (TestNested, testNested, testNestedGhc) +import Prelude qualified as Haskell + +decodeSingle :: CompiledCode (BuiltinData -> Integer) +decodeSingle = + $$( compile + [||\d -> case unsafeFromBuiltinData d of Single x -> x||] + ) + +decodePair :: CompiledCode (BuiltinData -> Integer) +decodePair = + $$( compile + [|| + \d -> case unsafeFromBuiltinData d of + PairA x -> x + PairB x -> x + 1 + ||] + ) + +decodeABC :: CompiledCode (BuiltinData -> Integer) +decodeABC = + $$( compile + [|| + \d -> case unsafeFromBuiltinData d of + A x -> x + B x -> x + 100 + C x -> x + 200 + ||] + ) + +tests :: TestNested +tests = + testNested ("IsData" Haskell. "Budget" Haskell. "BuiltinCasing") + . Haskell.pure + $ testNestedGhc + [ goldenBundle "decodeSingle" decodeSingle (decodeSingle `unsafeApplyCode` inpSingle) + , goldenBundle "decodePairA" decodePair (decodePair `unsafeApplyCode` inpPairA) + , goldenBundle "decodePairB" decodePair (decodePair `unsafeApplyCode` inpPairB) + , goldenBundle "decodeA" decodeABC (decodeABC `unsafeApplyCode` inpA) + , goldenBundle "decodeC" decodeABC (decodeABC `unsafeApplyCode` inpC) + ] + where + inpSingle = liftCodeDef (toBuiltinData (Single 99)) + inpPairA = liftCodeDef (toBuiltinData (PairA 10)) + inpPairB = liftCodeDef (toBuiltinData (PairB 20)) + inpA = liftCodeDef (toBuiltinData (A 42)) + inpC = liftCodeDef (toBuiltinData (C 7)) diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodeA.golden.eval b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodeA.golden.eval new file mode 100644 index 00000000000..31c76961a04 --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodeA.golden.eval @@ -0,0 +1,6 @@ +CPU: 512_582 +Memory: 2_596 +AST Size: 52 +Flat Size: 69 + +(con integer 42) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodeA.golden.pir b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodeA.golden.pir new file mode 100644 index 00000000000..625defd5218 --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodeA.golden.pir @@ -0,0 +1,26 @@ +let + data ABC | ABC_match where + A : integer -> ABC + B : integer -> ABC + C : integer -> ABC +in +\(d : data) -> + ABC_match + ((let + b = list data + in + /\r -> \(p : pair integer b) (f : integer -> b -> r) -> case r p [f]) + {ABC} + (unConstrData d) + (\(index : integer) (args : list data) -> + case + (list data -> ABC) + index + [ (\(ds : list data) -> A (unIData (headList {data} ds))) + , (\(ds : list data) -> B (unIData (headList {data} ds))) + , (\(ds : list data) -> C (unIData (headList {data} ds))) ] + args)) + {integer} + (\(x : integer) -> x) + (\(x : integer) -> addInteger 100 x) + (\(x : integer) -> addInteger 200 x) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodeA.golden.uplc b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodeA.golden.uplc new file mode 100644 index 00000000000..ce44a731249 --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodeA.golden.uplc @@ -0,0 +1,14 @@ +(program + 1.1.0 + (\d -> + case + (case + (unConstrData d) + [ (\index args -> + case + index + [ (\ds -> constr 0 [(unIData (force headList ds))]) + , (\ds -> constr 1 [(unIData (force headList ds))]) + , (\ds -> constr 2 [(unIData (force headList ds))]) ] + args) ]) + [(\x -> x), (\x -> addInteger 100 x), (\x -> addInteger 200 x)])) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodeC.golden.eval b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodeC.golden.eval new file mode 100644 index 00000000000..da301254da8 --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodeC.golden.eval @@ -0,0 +1,6 @@ +CPU: 677_790 +Memory: 2_998 +AST Size: 52 +Flat Size: 68 + +(con integer 207) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodeC.golden.pir b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodeC.golden.pir new file mode 100644 index 00000000000..625defd5218 --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodeC.golden.pir @@ -0,0 +1,26 @@ +let + data ABC | ABC_match where + A : integer -> ABC + B : integer -> ABC + C : integer -> ABC +in +\(d : data) -> + ABC_match + ((let + b = list data + in + /\r -> \(p : pair integer b) (f : integer -> b -> r) -> case r p [f]) + {ABC} + (unConstrData d) + (\(index : integer) (args : list data) -> + case + (list data -> ABC) + index + [ (\(ds : list data) -> A (unIData (headList {data} ds))) + , (\(ds : list data) -> B (unIData (headList {data} ds))) + , (\(ds : list data) -> C (unIData (headList {data} ds))) ] + args)) + {integer} + (\(x : integer) -> x) + (\(x : integer) -> addInteger 100 x) + (\(x : integer) -> addInteger 200 x) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodeC.golden.uplc b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodeC.golden.uplc new file mode 100644 index 00000000000..ce44a731249 --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodeC.golden.uplc @@ -0,0 +1,14 @@ +(program + 1.1.0 + (\d -> + case + (case + (unConstrData d) + [ (\index args -> + case + index + [ (\ds -> constr 0 [(unIData (force headList ds))]) + , (\ds -> constr 1 [(unIData (force headList ds))]) + , (\ds -> constr 2 [(unIData (force headList ds))]) ] + args) ]) + [(\x -> x), (\x -> addInteger 100 x), (\x -> addInteger 200 x)])) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodePairA.golden.eval b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodePairA.golden.eval new file mode 100644 index 00000000000..a3241809396 --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodePairA.golden.eval @@ -0,0 +1,6 @@ +CPU: 512_582 +Memory: 2_596 +AST Size: 38 +Flat Size: 51 + +(con integer 10) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodePairA.golden.pir b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodePairA.golden.pir new file mode 100644 index 00000000000..27b9e0e78d0 --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodePairA.golden.pir @@ -0,0 +1,23 @@ +let + data Pair | Pair_match where + PairA : integer -> Pair + PairB : integer -> Pair +in +\(d : data) -> + Pair_match + ((let + b = list data + in + /\r -> \(p : pair integer b) (f : integer -> b -> r) -> case r p [f]) + {Pair} + (unConstrData d) + (\(index : integer) (args : list data) -> + case + (list data -> Pair) + index + [ (\(ds : list data) -> PairA (unIData (headList {data} ds))) + , (\(ds : list data) -> PairB (unIData (headList {data} ds))) ] + args)) + {integer} + (\(x : integer) -> x) + (\(x : integer) -> addInteger 1 x) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodePairA.golden.uplc b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodePairA.golden.uplc new file mode 100644 index 00000000000..e83f460ede1 --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodePairA.golden.uplc @@ -0,0 +1,13 @@ +(program + 1.1.0 + (\d -> + case + (case + (unConstrData d) + [ (\index args -> + case + index + [ (\ds -> constr 0 [(unIData (force headList ds))]) + , (\ds -> constr 1 [(unIData (force headList ds))]) ] + args) ]) + [(\x -> x), (\x -> addInteger 1 x)])) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodePairB.golden.eval b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodePairB.golden.eval new file mode 100644 index 00000000000..44dc5d05f57 --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodePairB.golden.eval @@ -0,0 +1,6 @@ +CPU: 677_790 +Memory: 2_998 +AST Size: 38 +Flat Size: 51 + +(con integer 21) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodePairB.golden.pir b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodePairB.golden.pir new file mode 100644 index 00000000000..27b9e0e78d0 --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodePairB.golden.pir @@ -0,0 +1,23 @@ +let + data Pair | Pair_match where + PairA : integer -> Pair + PairB : integer -> Pair +in +\(d : data) -> + Pair_match + ((let + b = list data + in + /\r -> \(p : pair integer b) (f : integer -> b -> r) -> case r p [f]) + {Pair} + (unConstrData d) + (\(index : integer) (args : list data) -> + case + (list data -> Pair) + index + [ (\(ds : list data) -> PairA (unIData (headList {data} ds))) + , (\(ds : list data) -> PairB (unIData (headList {data} ds))) ] + args)) + {integer} + (\(x : integer) -> x) + (\(x : integer) -> addInteger 1 x) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodePairB.golden.uplc b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodePairB.golden.uplc new file mode 100644 index 00000000000..e83f460ede1 --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodePairB.golden.uplc @@ -0,0 +1,13 @@ +(program + 1.1.0 + (\d -> + case + (case + (unConstrData d) + [ (\index args -> + case + index + [ (\ds -> constr 0 [(unIData (force headList ds))]) + , (\ds -> constr 1 [(unIData (force headList ds))]) ] + args) ]) + [(\x -> x), (\x -> addInteger 1 x)])) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodeSingle.golden.eval b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodeSingle.golden.eval new file mode 100644 index 00000000000..7b41fb3134b --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodeSingle.golden.eval @@ -0,0 +1,6 @@ +CPU: 512_582 +Memory: 2_596 +AST Size: 24 +Flat Size: 37 + +(con integer 99) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodeSingle.golden.pir b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodeSingle.golden.pir new file mode 100644 index 00000000000..70fc450a718 --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodeSingle.golden.pir @@ -0,0 +1,20 @@ +let + data Single | Single_match where + Single : integer -> Single +in +\(d : data) -> + Single_match + ((let + b = list data + in + /\r -> \(p : pair integer b) (f : integer -> b -> r) -> case r p [f]) + {Single} + (unConstrData d) + (\(index : integer) (args : list data) -> + case + (list data -> Single) + index + [(\(ds : list data) -> Single (unIData (headList {data} ds)))] + args)) + {integer} + (\(x : integer) -> x) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodeSingle.golden.uplc b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodeSingle.golden.uplc new file mode 100644 index 00000000000..d75a2eb61c1 --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.12/decodeSingle.golden.uplc @@ -0,0 +1,10 @@ +(program + 1.1.0 + (\d -> + case + (case + (unConstrData d) + [ (\index args -> + case index [(\ds -> constr 0 [(unIData (force headList ds))])] + args) ]) + [(\x -> x)])) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodeA.golden.eval b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodeA.golden.eval new file mode 100644 index 00000000000..31c76961a04 --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodeA.golden.eval @@ -0,0 +1,6 @@ +CPU: 512_582 +Memory: 2_596 +AST Size: 52 +Flat Size: 69 + +(con integer 42) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodeA.golden.pir b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodeA.golden.pir new file mode 100644 index 00000000000..625defd5218 --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodeA.golden.pir @@ -0,0 +1,26 @@ +let + data ABC | ABC_match where + A : integer -> ABC + B : integer -> ABC + C : integer -> ABC +in +\(d : data) -> + ABC_match + ((let + b = list data + in + /\r -> \(p : pair integer b) (f : integer -> b -> r) -> case r p [f]) + {ABC} + (unConstrData d) + (\(index : integer) (args : list data) -> + case + (list data -> ABC) + index + [ (\(ds : list data) -> A (unIData (headList {data} ds))) + , (\(ds : list data) -> B (unIData (headList {data} ds))) + , (\(ds : list data) -> C (unIData (headList {data} ds))) ] + args)) + {integer} + (\(x : integer) -> x) + (\(x : integer) -> addInteger 100 x) + (\(x : integer) -> addInteger 200 x) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodeA.golden.uplc b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodeA.golden.uplc new file mode 100644 index 00000000000..ce44a731249 --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodeA.golden.uplc @@ -0,0 +1,14 @@ +(program + 1.1.0 + (\d -> + case + (case + (unConstrData d) + [ (\index args -> + case + index + [ (\ds -> constr 0 [(unIData (force headList ds))]) + , (\ds -> constr 1 [(unIData (force headList ds))]) + , (\ds -> constr 2 [(unIData (force headList ds))]) ] + args) ]) + [(\x -> x), (\x -> addInteger 100 x), (\x -> addInteger 200 x)])) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodeC.golden.eval b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodeC.golden.eval new file mode 100644 index 00000000000..da301254da8 --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodeC.golden.eval @@ -0,0 +1,6 @@ +CPU: 677_790 +Memory: 2_998 +AST Size: 52 +Flat Size: 68 + +(con integer 207) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodeC.golden.pir b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodeC.golden.pir new file mode 100644 index 00000000000..625defd5218 --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodeC.golden.pir @@ -0,0 +1,26 @@ +let + data ABC | ABC_match where + A : integer -> ABC + B : integer -> ABC + C : integer -> ABC +in +\(d : data) -> + ABC_match + ((let + b = list data + in + /\r -> \(p : pair integer b) (f : integer -> b -> r) -> case r p [f]) + {ABC} + (unConstrData d) + (\(index : integer) (args : list data) -> + case + (list data -> ABC) + index + [ (\(ds : list data) -> A (unIData (headList {data} ds))) + , (\(ds : list data) -> B (unIData (headList {data} ds))) + , (\(ds : list data) -> C (unIData (headList {data} ds))) ] + args)) + {integer} + (\(x : integer) -> x) + (\(x : integer) -> addInteger 100 x) + (\(x : integer) -> addInteger 200 x) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodeC.golden.uplc b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodeC.golden.uplc new file mode 100644 index 00000000000..ce44a731249 --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodeC.golden.uplc @@ -0,0 +1,14 @@ +(program + 1.1.0 + (\d -> + case + (case + (unConstrData d) + [ (\index args -> + case + index + [ (\ds -> constr 0 [(unIData (force headList ds))]) + , (\ds -> constr 1 [(unIData (force headList ds))]) + , (\ds -> constr 2 [(unIData (force headList ds))]) ] + args) ]) + [(\x -> x), (\x -> addInteger 100 x), (\x -> addInteger 200 x)])) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodePairA.golden.eval b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodePairA.golden.eval new file mode 100644 index 00000000000..a3241809396 --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodePairA.golden.eval @@ -0,0 +1,6 @@ +CPU: 512_582 +Memory: 2_596 +AST Size: 38 +Flat Size: 51 + +(con integer 10) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodePairA.golden.pir b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodePairA.golden.pir new file mode 100644 index 00000000000..27b9e0e78d0 --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodePairA.golden.pir @@ -0,0 +1,23 @@ +let + data Pair | Pair_match where + PairA : integer -> Pair + PairB : integer -> Pair +in +\(d : data) -> + Pair_match + ((let + b = list data + in + /\r -> \(p : pair integer b) (f : integer -> b -> r) -> case r p [f]) + {Pair} + (unConstrData d) + (\(index : integer) (args : list data) -> + case + (list data -> Pair) + index + [ (\(ds : list data) -> PairA (unIData (headList {data} ds))) + , (\(ds : list data) -> PairB (unIData (headList {data} ds))) ] + args)) + {integer} + (\(x : integer) -> x) + (\(x : integer) -> addInteger 1 x) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodePairA.golden.uplc b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodePairA.golden.uplc new file mode 100644 index 00000000000..e83f460ede1 --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodePairA.golden.uplc @@ -0,0 +1,13 @@ +(program + 1.1.0 + (\d -> + case + (case + (unConstrData d) + [ (\index args -> + case + index + [ (\ds -> constr 0 [(unIData (force headList ds))]) + , (\ds -> constr 1 [(unIData (force headList ds))]) ] + args) ]) + [(\x -> x), (\x -> addInteger 1 x)])) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodePairB.golden.eval b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodePairB.golden.eval new file mode 100644 index 00000000000..44dc5d05f57 --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodePairB.golden.eval @@ -0,0 +1,6 @@ +CPU: 677_790 +Memory: 2_998 +AST Size: 38 +Flat Size: 51 + +(con integer 21) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodePairB.golden.pir b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodePairB.golden.pir new file mode 100644 index 00000000000..27b9e0e78d0 --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodePairB.golden.pir @@ -0,0 +1,23 @@ +let + data Pair | Pair_match where + PairA : integer -> Pair + PairB : integer -> Pair +in +\(d : data) -> + Pair_match + ((let + b = list data + in + /\r -> \(p : pair integer b) (f : integer -> b -> r) -> case r p [f]) + {Pair} + (unConstrData d) + (\(index : integer) (args : list data) -> + case + (list data -> Pair) + index + [ (\(ds : list data) -> PairA (unIData (headList {data} ds))) + , (\(ds : list data) -> PairB (unIData (headList {data} ds))) ] + args)) + {integer} + (\(x : integer) -> x) + (\(x : integer) -> addInteger 1 x) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodePairB.golden.uplc b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodePairB.golden.uplc new file mode 100644 index 00000000000..e83f460ede1 --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodePairB.golden.uplc @@ -0,0 +1,13 @@ +(program + 1.1.0 + (\d -> + case + (case + (unConstrData d) + [ (\index args -> + case + index + [ (\ds -> constr 0 [(unIData (force headList ds))]) + , (\ds -> constr 1 [(unIData (force headList ds))]) ] + args) ]) + [(\x -> x), (\x -> addInteger 1 x)])) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodeSingle.golden.eval b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodeSingle.golden.eval new file mode 100644 index 00000000000..7b41fb3134b --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodeSingle.golden.eval @@ -0,0 +1,6 @@ +CPU: 512_582 +Memory: 2_596 +AST Size: 24 +Flat Size: 37 + +(con integer 99) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodeSingle.golden.pir b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodeSingle.golden.pir new file mode 100644 index 00000000000..70fc450a718 --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodeSingle.golden.pir @@ -0,0 +1,20 @@ +let + data Single | Single_match where + Single : integer -> Single +in +\(d : data) -> + Single_match + ((let + b = list data + in + /\r -> \(p : pair integer b) (f : integer -> b -> r) -> case r p [f]) + {Single} + (unConstrData d) + (\(index : integer) (args : list data) -> + case + (list data -> Single) + index + [(\(ds : list data) -> Single (unIData (headList {data} ds)))] + args)) + {integer} + (\(x : integer) -> x) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodeSingle.golden.uplc b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodeSingle.golden.uplc new file mode 100644 index 00000000000..d75a2eb61c1 --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/BuiltinCasing/9.6/decodeSingle.golden.uplc @@ -0,0 +1,10 @@ +(program + 1.1.0 + (\d -> + case + (case + (unConstrData d) + [ (\index args -> + case index [(\ds -> constr 0 [(unIData (force headList ds))])] + args) ]) + [(\x -> x)])) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/Lib.hs b/plutus-tx-plugin/test/IsData/Budget/Lib.hs new file mode 100644 index 00000000000..3459d439b82 --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/Lib.hs @@ -0,0 +1,31 @@ +{-# LANGUAGE MultiParamTypeClasses #-} +{-# LANGUAGE TemplateHaskell #-} +{-# LANGUAGE ViewPatterns #-} +{-# LANGUAGE NoImplicitPrelude #-} + +module IsData.Budget.Lib where + +import PlutusTx.Prelude + +import PlutusTx.IsData (unstableMakeIsData) +import PlutusTx.Lift (makeLift) + +data Single = Single Integer + +unstableMakeIsData ''Single +makeLift ''Single + +data Pair = PairA Integer | PairB Integer + +unstableMakeIsData ''Pair +makeLift ''Pair + +data Mixed = MNone | MOne Integer | MTwo Integer Integer + +unstableMakeIsData ''Mixed +makeLift ''Mixed + +data ABC = A Integer | B Integer | C Integer + +unstableMakeIsData ''ABC +makeLift ''ABC diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP.hs b/plutus-tx-plugin/test/IsData/Budget/SoP.hs new file mode 100644 index 00000000000..f41b8253860 --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/SoP.hs @@ -0,0 +1,81 @@ +{-# LANGUAGE BlockArguments #-} +{-# LANGUAGE DataKinds #-} +{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE TemplateHaskell #-} +{-# LANGUAGE NoImplicitPrelude #-} +{-# OPTIONS_GHC -fplugin-opt PlutusTx.Plugin:datatypes=SumsOfProducts #-} + +module IsData.Budget.SoP where + +import IsData.Budget.Lib + +import PlutusTx.Prelude + +import PlutusTx.Builtins () +import PlutusTx.Code (CompiledCode, unsafeApplyCode) +import PlutusTx.IsData () +import PlutusTx.Lift (liftCodeDef) +import PlutusTx.TH (compile) +import PlutusTx.Test (goldenBundle) +import System.FilePath qualified as Haskell +import Test.Tasty.Extras (TestNested, testNested, testNestedGhc) +import Prelude qualified as Haskell + +decodeSingle :: CompiledCode (BuiltinData -> Integer) +decodeSingle = + $$( compile + [||\d -> case unsafeFromBuiltinData d of Single x -> x||] + ) + +decodePair :: CompiledCode (BuiltinData -> Integer) +decodePair = + $$( compile + [|| + \d -> case unsafeFromBuiltinData d of + PairA x -> x + PairB x -> x + 1 + ||] + ) + +decodeMixed :: CompiledCode (BuiltinData -> Integer) +decodeMixed = + $$( compile + [|| + \d -> case unsafeFromBuiltinData d of + MNone -> 0 + MOne x -> x + MTwo x y -> x + y + ||] + ) + +decodeABC :: CompiledCode (BuiltinData -> Integer) +decodeABC = + $$( compile + [|| + \d -> case unsafeFromBuiltinData d of + A x -> x + B x -> x + 100 + C x -> x + 200 + ||] + ) + +tests :: TestNested +tests = + testNested ("IsData" Haskell. "Budget" Haskell. "SoP") + . Haskell.pure + $ testNestedGhc + [ goldenBundle "decodeMixedNone" decodeMixed do + decodeMixed `unsafeApplyCode` liftCodeDef (toBuiltinData MNone) + , goldenBundle "decodeMixedTwo" decodeMixed do + decodeMixed `unsafeApplyCode` liftCodeDef (toBuiltinData (MTwo 3 4)) + , goldenBundle "decodeSingle" decodeSingle do + decodeSingle `unsafeApplyCode` liftCodeDef (toBuiltinData (Single 99)) + , goldenBundle "decodePairA" decodePair do + decodePair `unsafeApplyCode` liftCodeDef (toBuiltinData (PairA 10)) + , goldenBundle "decodePairB" decodePair do + decodePair `unsafeApplyCode` liftCodeDef (toBuiltinData (PairB 20)) + , goldenBundle "decodeA" decodeABC do + decodeABC `unsafeApplyCode` liftCodeDef (toBuiltinData (A 42)) + , goldenBundle "decodeC" decodeABC do + decodeABC `unsafeApplyCode` liftCodeDef (toBuiltinData (C 7)) + ] diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeA.golden.eval b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeA.golden.eval new file mode 100644 index 00000000000..437010f6f4d --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeA.golden.eval @@ -0,0 +1,6 @@ +CPU: 1_292_851 +Memory: 4_962 +AST Size: 100 +Flat Size: 113 + +(con integer 42) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeA.golden.pir b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeA.golden.pir new file mode 100644 index 00000000000..95b5dd78fd8 --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeA.golden.pir @@ -0,0 +1,42 @@ +let + data ABC | ABC_match where + A : integer -> ABC + B : integer -> ABC + C : integer -> ABC +in +\(d : data) -> + ABC_match + ((let + b = list data + in + /\r -> + \(p : pair integer b) (f : integer -> b -> r) -> + f (fstPair {integer} {b} p) (sndPair {integer} {b} p)) + {ABC} + (unConstrData d) + (\(index : integer) (args : list data) -> + ifThenElse + {all dead. list data -> ABC} + (equalsInteger 0 index) + (/\dead -> \(ds : list data) -> A (unIData (headList {data} ds))) + (/\dead -> + ifThenElse + {all dead. list data -> ABC} + (equalsInteger 1 index) + (/\dead -> + \(ds : list data) -> B (unIData (headList {data} ds))) + (/\dead -> + ifThenElse + {all dead. list data -> ABC} + (equalsInteger 2 index) + (/\dead -> + \(ds : list data) -> C (unIData (headList {data} ds))) + (/\dead -> error {list data -> ABC}) + {list data -> ABC}) + {list data -> ABC}) + {list data -> ABC} + args)) + {integer} + (\(x : integer) -> x) + (\(x : integer) -> addInteger 100 x) + (\(x : integer) -> addInteger 200 x) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeA.golden.uplc b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeA.golden.uplc new file mode 100644 index 00000000000..80725e47b4b --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeA.golden.uplc @@ -0,0 +1,42 @@ +(program + 1.1.0 + (\d -> + case + ((\p -> + (\index args -> + force + (case + (constr 0 + [ (equalsInteger 0 index) + , (delay + (\ds -> constr 0 [(unIData (force headList ds))])) + , (delay + (force + (case + (constr 0 + [ (equalsInteger 1 index) + , (delay + (\ds -> + constr 1 + [(unIData (force headList ds))])) + , (delay + (force + (case + (constr 0 + [ (equalsInteger 2 index) + , (delay + (\ds -> + constr 2 + [ (unIData + (force + headList + ds)) ])) + , (delay error) ]) + [(force ifThenElse)]))) ]) + [(force ifThenElse)]))) ]) + [(force ifThenElse)]) + args) + (force (force fstPair) p) + (force (force sndPair) p)) + (unConstrData d)) + [(\x -> x), (\x -> addInteger 100 x), (\x -> addInteger 200 x)])) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeC.golden.eval b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeC.golden.eval new file mode 100644 index 00000000000..885c9cd3f60 --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeC.golden.eval @@ -0,0 +1,6 @@ +CPU: 2_098_823 +Memory: 7_768 +AST Size: 100 +Flat Size: 112 + +(con integer 207) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeC.golden.pir b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeC.golden.pir new file mode 100644 index 00000000000..95b5dd78fd8 --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeC.golden.pir @@ -0,0 +1,42 @@ +let + data ABC | ABC_match where + A : integer -> ABC + B : integer -> ABC + C : integer -> ABC +in +\(d : data) -> + ABC_match + ((let + b = list data + in + /\r -> + \(p : pair integer b) (f : integer -> b -> r) -> + f (fstPair {integer} {b} p) (sndPair {integer} {b} p)) + {ABC} + (unConstrData d) + (\(index : integer) (args : list data) -> + ifThenElse + {all dead. list data -> ABC} + (equalsInteger 0 index) + (/\dead -> \(ds : list data) -> A (unIData (headList {data} ds))) + (/\dead -> + ifThenElse + {all dead. list data -> ABC} + (equalsInteger 1 index) + (/\dead -> + \(ds : list data) -> B (unIData (headList {data} ds))) + (/\dead -> + ifThenElse + {all dead. list data -> ABC} + (equalsInteger 2 index) + (/\dead -> + \(ds : list data) -> C (unIData (headList {data} ds))) + (/\dead -> error {list data -> ABC}) + {list data -> ABC}) + {list data -> ABC}) + {list data -> ABC} + args)) + {integer} + (\(x : integer) -> x) + (\(x : integer) -> addInteger 100 x) + (\(x : integer) -> addInteger 200 x) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeC.golden.uplc b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeC.golden.uplc new file mode 100644 index 00000000000..80725e47b4b --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeC.golden.uplc @@ -0,0 +1,42 @@ +(program + 1.1.0 + (\d -> + case + ((\p -> + (\index args -> + force + (case + (constr 0 + [ (equalsInteger 0 index) + , (delay + (\ds -> constr 0 [(unIData (force headList ds))])) + , (delay + (force + (case + (constr 0 + [ (equalsInteger 1 index) + , (delay + (\ds -> + constr 1 + [(unIData (force headList ds))])) + , (delay + (force + (case + (constr 0 + [ (equalsInteger 2 index) + , (delay + (\ds -> + constr 2 + [ (unIData + (force + headList + ds)) ])) + , (delay error) ]) + [(force ifThenElse)]))) ]) + [(force ifThenElse)]))) ]) + [(force ifThenElse)]) + args) + (force (force fstPair) p) + (force (force sndPair) p)) + (unConstrData d)) + [(\x -> x), (\x -> addInteger 100 x), (\x -> addInteger 200 x)])) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeMixedNone.golden.eval b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeMixedNone.golden.eval new file mode 100644 index 00000000000..97dd29f7c07 --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeMixedNone.golden.eval @@ -0,0 +1,6 @@ +CPU: 1_076_957 +Memory: 4_198 +AST Size: 99 +Flat Size: 106 + +(con integer 0) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeMixedNone.golden.pir b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeMixedNone.golden.pir new file mode 100644 index 00000000000..96845628636 --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeMixedNone.golden.pir @@ -0,0 +1,45 @@ +let + data Mixed | Mixed_match where + MNone : Mixed + MOne : integer -> Mixed + MTwo : integer -> integer -> Mixed +in +\(d : data) -> + Mixed_match + ((let + b = list data + in + /\r -> + \(p : pair integer b) (f : integer -> b -> r) -> + f (fstPair {integer} {b} p) (sndPair {integer} {b} p)) + {Mixed} + (unConstrData d) + (\(index : integer) (args : list data) -> + ifThenElse + {all dead. list data -> Mixed} + (equalsInteger 0 index) + (/\dead -> \(ds : list data) -> MNone) + (/\dead -> + ifThenElse + {all dead. list data -> Mixed} + (equalsInteger 1 index) + (/\dead -> + \(ds : list data) -> MOne (unIData (headList {data} ds))) + (/\dead -> + ifThenElse + {all dead. list data -> Mixed} + (equalsInteger 2 index) + (/\dead -> + \(ds : list data) -> + MTwo + (unIData (headList {data} ds)) + (unIData (headList {data} (tailList {data} ds)))) + (/\dead -> error {list data -> Mixed}) + {list data -> Mixed}) + {list data -> Mixed}) + {list data -> Mixed} + args)) + {integer} + 0 + (\(x : integer) -> x) + (\(x : integer) (y : integer) -> addInteger x y) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeMixedNone.golden.uplc b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeMixedNone.golden.uplc new file mode 100644 index 00000000000..2861c935db8 --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeMixedNone.golden.uplc @@ -0,0 +1,48 @@ +(program + 1.1.0 + (\d -> + case + ((\p -> + (\index + args -> + force + (case + (constr 0 + [ (equalsInteger 0 index) + , (delay (\ds -> constr 0 [])) + , (delay + (force + (case + (constr 0 + [ (equalsInteger 1 index) + , (delay + (\ds -> + constr 1 + [(unIData (force headList ds))])) + , (delay + (force + (case + (constr 0 + [ (equalsInteger 2 index) + , (delay + (\ds -> + constr 2 + [ (unIData + (force + headList + ds)) + , (unIData + (force + headList + (force + tailList + ds))) ])) + , (delay error) ]) + [(force ifThenElse)]))) ]) + [(force ifThenElse)]))) ]) + [(force ifThenElse)]) + args) + (force (force fstPair) p) + (force (force sndPair) p)) + (unConstrData d)) + [0, (\x -> x), (\x y -> addInteger x y)])) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeMixedTwo.golden.eval b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeMixedTwo.golden.eval new file mode 100644 index 00000000000..e31892500c9 --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeMixedTwo.golden.eval @@ -0,0 +1,6 @@ +CPU: 2_444_380 +Memory: 8_864 +AST Size: 99 +Flat Size: 109 + +(con integer 7) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeMixedTwo.golden.pir b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeMixedTwo.golden.pir new file mode 100644 index 00000000000..96845628636 --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeMixedTwo.golden.pir @@ -0,0 +1,45 @@ +let + data Mixed | Mixed_match where + MNone : Mixed + MOne : integer -> Mixed + MTwo : integer -> integer -> Mixed +in +\(d : data) -> + Mixed_match + ((let + b = list data + in + /\r -> + \(p : pair integer b) (f : integer -> b -> r) -> + f (fstPair {integer} {b} p) (sndPair {integer} {b} p)) + {Mixed} + (unConstrData d) + (\(index : integer) (args : list data) -> + ifThenElse + {all dead. list data -> Mixed} + (equalsInteger 0 index) + (/\dead -> \(ds : list data) -> MNone) + (/\dead -> + ifThenElse + {all dead. list data -> Mixed} + (equalsInteger 1 index) + (/\dead -> + \(ds : list data) -> MOne (unIData (headList {data} ds))) + (/\dead -> + ifThenElse + {all dead. list data -> Mixed} + (equalsInteger 2 index) + (/\dead -> + \(ds : list data) -> + MTwo + (unIData (headList {data} ds)) + (unIData (headList {data} (tailList {data} ds)))) + (/\dead -> error {list data -> Mixed}) + {list data -> Mixed}) + {list data -> Mixed}) + {list data -> Mixed} + args)) + {integer} + 0 + (\(x : integer) -> x) + (\(x : integer) (y : integer) -> addInteger x y) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeMixedTwo.golden.uplc b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeMixedTwo.golden.uplc new file mode 100644 index 00000000000..2861c935db8 --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeMixedTwo.golden.uplc @@ -0,0 +1,48 @@ +(program + 1.1.0 + (\d -> + case + ((\p -> + (\index + args -> + force + (case + (constr 0 + [ (equalsInteger 0 index) + , (delay (\ds -> constr 0 [])) + , (delay + (force + (case + (constr 0 + [ (equalsInteger 1 index) + , (delay + (\ds -> + constr 1 + [(unIData (force headList ds))])) + , (delay + (force + (case + (constr 0 + [ (equalsInteger 2 index) + , (delay + (\ds -> + constr 2 + [ (unIData + (force + headList + ds)) + , (unIData + (force + headList + (force + tailList + ds))) ])) + , (delay error) ]) + [(force ifThenElse)]))) ]) + [(force ifThenElse)]))) ]) + [(force ifThenElse)]) + args) + (force (force fstPair) p) + (force (force sndPair) p)) + (unConstrData d)) + [0, (\x -> x), (\x y -> addInteger x y)])) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodePairA.golden.eval b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodePairA.golden.eval new file mode 100644 index 00000000000..e3db4dad5ba --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodePairA.golden.eval @@ -0,0 +1,6 @@ +CPU: 1_292_851 +Memory: 4_962 +AST Size: 74 +Flat Size: 83 + +(con integer 10) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodePairA.golden.pir b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodePairA.golden.pir new file mode 100644 index 00000000000..f0c27388343 --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodePairA.golden.pir @@ -0,0 +1,34 @@ +let + data Pair | Pair_match where + PairA : integer -> Pair + PairB : integer -> Pair +in +\(d : data) -> + Pair_match + ((let + b = list data + in + /\r -> + \(p : pair integer b) (f : integer -> b -> r) -> + f (fstPair {integer} {b} p) (sndPair {integer} {b} p)) + {Pair} + (unConstrData d) + (\(index : integer) (args : list data) -> + ifThenElse + {all dead. list data -> Pair} + (equalsInteger 0 index) + (/\dead -> + \(ds : list data) -> PairA (unIData (headList {data} ds))) + (/\dead -> + ifThenElse + {all dead. list data -> Pair} + (equalsInteger 1 index) + (/\dead -> + \(ds : list data) -> PairB (unIData (headList {data} ds))) + (/\dead -> error {list data -> Pair}) + {list data -> Pair}) + {list data -> Pair} + args)) + {integer} + (\(x : integer) -> x) + (\(x : integer) -> addInteger 1 x) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodePairA.golden.uplc b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodePairA.golden.uplc new file mode 100644 index 00000000000..914ce7ee672 --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodePairA.golden.uplc @@ -0,0 +1,29 @@ +(program + 1.1.0 + (\d -> + case + ((\p -> + (\index args -> + force + (case + (constr 0 + [ (equalsInteger 0 index) + , (delay + (\ds -> constr 0 [(unIData (force headList ds))])) + , (delay + (force + (case + (constr 0 + [ (equalsInteger 1 index) + , (delay + (\ds -> + constr 1 + [(unIData (force headList ds))])) + , (delay error) ]) + [(force ifThenElse)]))) ]) + [(force ifThenElse)]) + args) + (force (force fstPair) p) + (force (force sndPair) p)) + (unConstrData d)) + [(\x -> x), (\x -> addInteger 1 x)])) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodePairB.golden.eval b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodePairB.golden.eval new file mode 100644 index 00000000000..38501ab3dec --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodePairB.golden.eval @@ -0,0 +1,6 @@ +CPU: 1_778_441 +Memory: 6_566 +AST Size: 74 +Flat Size: 83 + +(con integer 21) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodePairB.golden.pir b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodePairB.golden.pir new file mode 100644 index 00000000000..f0c27388343 --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodePairB.golden.pir @@ -0,0 +1,34 @@ +let + data Pair | Pair_match where + PairA : integer -> Pair + PairB : integer -> Pair +in +\(d : data) -> + Pair_match + ((let + b = list data + in + /\r -> + \(p : pair integer b) (f : integer -> b -> r) -> + f (fstPair {integer} {b} p) (sndPair {integer} {b} p)) + {Pair} + (unConstrData d) + (\(index : integer) (args : list data) -> + ifThenElse + {all dead. list data -> Pair} + (equalsInteger 0 index) + (/\dead -> + \(ds : list data) -> PairA (unIData (headList {data} ds))) + (/\dead -> + ifThenElse + {all dead. list data -> Pair} + (equalsInteger 1 index) + (/\dead -> + \(ds : list data) -> PairB (unIData (headList {data} ds))) + (/\dead -> error {list data -> Pair}) + {list data -> Pair}) + {list data -> Pair} + args)) + {integer} + (\(x : integer) -> x) + (\(x : integer) -> addInteger 1 x) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodePairB.golden.uplc b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodePairB.golden.uplc new file mode 100644 index 00000000000..914ce7ee672 --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodePairB.golden.uplc @@ -0,0 +1,29 @@ +(program + 1.1.0 + (\d -> + case + ((\p -> + (\index args -> + force + (case + (constr 0 + [ (equalsInteger 0 index) + , (delay + (\ds -> constr 0 [(unIData (force headList ds))])) + , (delay + (force + (case + (constr 0 + [ (equalsInteger 1 index) + , (delay + (\ds -> + constr 1 + [(unIData (force headList ds))])) + , (delay error) ]) + [(force ifThenElse)]))) ]) + [(force ifThenElse)]) + args) + (force (force fstPair) p) + (force (force sndPair) p)) + (unConstrData d)) + [(\x -> x), (\x -> addInteger 1 x)])) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeSingle.golden.eval b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeSingle.golden.eval new file mode 100644 index 00000000000..8002de6a1da --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeSingle.golden.eval @@ -0,0 +1,6 @@ +CPU: 1_244_851 +Memory: 4_662 +AST Size: 45 +Flat Size: 55 + +(con integer 99) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeSingle.golden.pir b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeSingle.golden.pir new file mode 100644 index 00000000000..83be3ca333a --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeSingle.golden.pir @@ -0,0 +1,25 @@ +let + data Single | Single_match where + Single : integer -> Single +in +\(d : data) -> + Single_match + ((let + b = list data + in + /\r -> + \(p : pair integer b) (f : integer -> b -> r) -> + f (fstPair {integer} {b} p) (sndPair {integer} {b} p)) + {Single} + (unConstrData d) + (\(index : integer) (args : list data) -> + ifThenElse + {all dead. list data -> Single} + (equalsInteger 0 index) + (/\dead -> + \(ds : list data) -> Single (unIData (headList {data} ds))) + (/\dead -> error {list data -> Single}) + {list data -> Single} + args)) + {integer} + (\(x : integer) -> x) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeSingle.golden.uplc b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeSingle.golden.uplc new file mode 100644 index 00000000000..a0bdabcdb96 --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.12/decodeSingle.golden.uplc @@ -0,0 +1,18 @@ +(program + 1.1.0 + (\d -> + case + ((\p -> + (\args -> + force + (case + (constr 0 + [ (equalsInteger 0 (force (force fstPair) p)) + , (delay + (\ds -> constr 0 [(unIData (force headList ds))])) + , (delay error) ]) + [(force ifThenElse)]) + args) + (force (force sndPair) p)) + (unConstrData d)) + [(\x -> x)])) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeA.golden.eval b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeA.golden.eval new file mode 100644 index 00000000000..3e70914eec3 --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeA.golden.eval @@ -0,0 +1,6 @@ +CPU: 1_308_851 +Memory: 5_062 +AST Size: 103 +Flat Size: 110 + +(con integer 42) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeA.golden.pir b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeA.golden.pir new file mode 100644 index 00000000000..95b5dd78fd8 --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeA.golden.pir @@ -0,0 +1,42 @@ +let + data ABC | ABC_match where + A : integer -> ABC + B : integer -> ABC + C : integer -> ABC +in +\(d : data) -> + ABC_match + ((let + b = list data + in + /\r -> + \(p : pair integer b) (f : integer -> b -> r) -> + f (fstPair {integer} {b} p) (sndPair {integer} {b} p)) + {ABC} + (unConstrData d) + (\(index : integer) (args : list data) -> + ifThenElse + {all dead. list data -> ABC} + (equalsInteger 0 index) + (/\dead -> \(ds : list data) -> A (unIData (headList {data} ds))) + (/\dead -> + ifThenElse + {all dead. list data -> ABC} + (equalsInteger 1 index) + (/\dead -> + \(ds : list data) -> B (unIData (headList {data} ds))) + (/\dead -> + ifThenElse + {all dead. list data -> ABC} + (equalsInteger 2 index) + (/\dead -> + \(ds : list data) -> C (unIData (headList {data} ds))) + (/\dead -> error {list data -> ABC}) + {list data -> ABC}) + {list data -> ABC}) + {list data -> ABC} + args)) + {integer} + (\(x : integer) -> x) + (\(x : integer) -> addInteger 100 x) + (\(x : integer) -> addInteger 200 x) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeA.golden.uplc b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeA.golden.uplc new file mode 100644 index 00000000000..4605836d12d --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeA.golden.uplc @@ -0,0 +1,31 @@ +(program + 1.1.0 + (\d -> + case + ((\p -> + (\index args -> + force + (force ifThenElse + (equalsInteger 0 index) + (delay (\ds -> constr 0 [(unIData (force headList ds))])) + (delay + (force + (force ifThenElse + (equalsInteger 1 index) + (delay + (\ds -> + constr 1 [(unIData (force headList ds))])) + (delay + (force + (force ifThenElse + (equalsInteger 2 index) + (delay + (\ds -> + constr 2 + [(unIData (force headList ds))])) + (delay error)))))))) + args) + (force (force fstPair) p) + (force (force sndPair) p)) + (unConstrData d)) + [(\x -> x), (\x -> addInteger 100 x), (\x -> addInteger 200 x)])) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeC.golden.eval b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeC.golden.eval new file mode 100644 index 00000000000..baf113ef56a --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeC.golden.eval @@ -0,0 +1,6 @@ +CPU: 2_146_823 +Memory: 8_068 +AST Size: 103 +Flat Size: 109 + +(con integer 207) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeC.golden.pir b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeC.golden.pir new file mode 100644 index 00000000000..95b5dd78fd8 --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeC.golden.pir @@ -0,0 +1,42 @@ +let + data ABC | ABC_match where + A : integer -> ABC + B : integer -> ABC + C : integer -> ABC +in +\(d : data) -> + ABC_match + ((let + b = list data + in + /\r -> + \(p : pair integer b) (f : integer -> b -> r) -> + f (fstPair {integer} {b} p) (sndPair {integer} {b} p)) + {ABC} + (unConstrData d) + (\(index : integer) (args : list data) -> + ifThenElse + {all dead. list data -> ABC} + (equalsInteger 0 index) + (/\dead -> \(ds : list data) -> A (unIData (headList {data} ds))) + (/\dead -> + ifThenElse + {all dead. list data -> ABC} + (equalsInteger 1 index) + (/\dead -> + \(ds : list data) -> B (unIData (headList {data} ds))) + (/\dead -> + ifThenElse + {all dead. list data -> ABC} + (equalsInteger 2 index) + (/\dead -> + \(ds : list data) -> C (unIData (headList {data} ds))) + (/\dead -> error {list data -> ABC}) + {list data -> ABC}) + {list data -> ABC}) + {list data -> ABC} + args)) + {integer} + (\(x : integer) -> x) + (\(x : integer) -> addInteger 100 x) + (\(x : integer) -> addInteger 200 x) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeC.golden.uplc b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeC.golden.uplc new file mode 100644 index 00000000000..4605836d12d --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeC.golden.uplc @@ -0,0 +1,31 @@ +(program + 1.1.0 + (\d -> + case + ((\p -> + (\index args -> + force + (force ifThenElse + (equalsInteger 0 index) + (delay (\ds -> constr 0 [(unIData (force headList ds))])) + (delay + (force + (force ifThenElse + (equalsInteger 1 index) + (delay + (\ds -> + constr 1 [(unIData (force headList ds))])) + (delay + (force + (force ifThenElse + (equalsInteger 2 index) + (delay + (\ds -> + constr 2 + [(unIData (force headList ds))])) + (delay error)))))))) + args) + (force (force fstPair) p) + (force (force sndPair) p)) + (unConstrData d)) + [(\x -> x), (\x -> addInteger 100 x), (\x -> addInteger 200 x)])) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeMixedNone.golden.eval b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeMixedNone.golden.eval new file mode 100644 index 00000000000..1c076998388 --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeMixedNone.golden.eval @@ -0,0 +1,6 @@ +CPU: 1_092_957 +Memory: 4_298 +AST Size: 102 +Flat Size: 102 + +(con integer 0) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeMixedNone.golden.pir b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeMixedNone.golden.pir new file mode 100644 index 00000000000..96845628636 --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeMixedNone.golden.pir @@ -0,0 +1,45 @@ +let + data Mixed | Mixed_match where + MNone : Mixed + MOne : integer -> Mixed + MTwo : integer -> integer -> Mixed +in +\(d : data) -> + Mixed_match + ((let + b = list data + in + /\r -> + \(p : pair integer b) (f : integer -> b -> r) -> + f (fstPair {integer} {b} p) (sndPair {integer} {b} p)) + {Mixed} + (unConstrData d) + (\(index : integer) (args : list data) -> + ifThenElse + {all dead. list data -> Mixed} + (equalsInteger 0 index) + (/\dead -> \(ds : list data) -> MNone) + (/\dead -> + ifThenElse + {all dead. list data -> Mixed} + (equalsInteger 1 index) + (/\dead -> + \(ds : list data) -> MOne (unIData (headList {data} ds))) + (/\dead -> + ifThenElse + {all dead. list data -> Mixed} + (equalsInteger 2 index) + (/\dead -> + \(ds : list data) -> + MTwo + (unIData (headList {data} ds)) + (unIData (headList {data} (tailList {data} ds)))) + (/\dead -> error {list data -> Mixed}) + {list data -> Mixed}) + {list data -> Mixed}) + {list data -> Mixed} + args)) + {integer} + 0 + (\(x : integer) -> x) + (\(x : integer) (y : integer) -> addInteger x y) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeMixedNone.golden.uplc b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeMixedNone.golden.uplc new file mode 100644 index 00000000000..54b4049f034 --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeMixedNone.golden.uplc @@ -0,0 +1,34 @@ +(program + 1.1.0 + (\d -> + case + ((\p -> + (\index args -> + force + (force ifThenElse + (equalsInteger 0 index) + (delay (\ds -> constr 0 [])) + (delay + (force + (force ifThenElse + (equalsInteger 1 index) + (delay + (\ds -> + constr 1 [(unIData (force headList ds))])) + (delay + (force + (force ifThenElse + (equalsInteger 2 index) + (delay + (\ds -> + constr 2 + [ (unIData (force headList ds)) + , (unIData + (force headList + (force tailList ds))) ])) + (delay error)))))))) + args) + (force (force fstPair) p) + (force (force sndPair) p)) + (unConstrData d)) + [0, (\x -> x), (\x y -> addInteger x y)])) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeMixedTwo.golden.eval b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeMixedTwo.golden.eval new file mode 100644 index 00000000000..f709578c824 --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeMixedTwo.golden.eval @@ -0,0 +1,6 @@ +CPU: 2_492_380 +Memory: 9_164 +AST Size: 102 +Flat Size: 105 + +(con integer 7) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeMixedTwo.golden.pir b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeMixedTwo.golden.pir new file mode 100644 index 00000000000..96845628636 --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeMixedTwo.golden.pir @@ -0,0 +1,45 @@ +let + data Mixed | Mixed_match where + MNone : Mixed + MOne : integer -> Mixed + MTwo : integer -> integer -> Mixed +in +\(d : data) -> + Mixed_match + ((let + b = list data + in + /\r -> + \(p : pair integer b) (f : integer -> b -> r) -> + f (fstPair {integer} {b} p) (sndPair {integer} {b} p)) + {Mixed} + (unConstrData d) + (\(index : integer) (args : list data) -> + ifThenElse + {all dead. list data -> Mixed} + (equalsInteger 0 index) + (/\dead -> \(ds : list data) -> MNone) + (/\dead -> + ifThenElse + {all dead. list data -> Mixed} + (equalsInteger 1 index) + (/\dead -> + \(ds : list data) -> MOne (unIData (headList {data} ds))) + (/\dead -> + ifThenElse + {all dead. list data -> Mixed} + (equalsInteger 2 index) + (/\dead -> + \(ds : list data) -> + MTwo + (unIData (headList {data} ds)) + (unIData (headList {data} (tailList {data} ds)))) + (/\dead -> error {list data -> Mixed}) + {list data -> Mixed}) + {list data -> Mixed}) + {list data -> Mixed} + args)) + {integer} + 0 + (\(x : integer) -> x) + (\(x : integer) (y : integer) -> addInteger x y) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeMixedTwo.golden.uplc b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeMixedTwo.golden.uplc new file mode 100644 index 00000000000..54b4049f034 --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeMixedTwo.golden.uplc @@ -0,0 +1,34 @@ +(program + 1.1.0 + (\d -> + case + ((\p -> + (\index args -> + force + (force ifThenElse + (equalsInteger 0 index) + (delay (\ds -> constr 0 [])) + (delay + (force + (force ifThenElse + (equalsInteger 1 index) + (delay + (\ds -> + constr 1 [(unIData (force headList ds))])) + (delay + (force + (force ifThenElse + (equalsInteger 2 index) + (delay + (\ds -> + constr 2 + [ (unIData (force headList ds)) + , (unIData + (force headList + (force tailList ds))) ])) + (delay error)))))))) + args) + (force (force fstPair) p) + (force (force sndPair) p)) + (unConstrData d)) + [0, (\x -> x), (\x y -> addInteger x y)])) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodePairA.golden.eval b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodePairA.golden.eval new file mode 100644 index 00000000000..cad2b818b29 --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodePairA.golden.eval @@ -0,0 +1,6 @@ +CPU: 1_308_851 +Memory: 5_062 +AST Size: 76 +Flat Size: 81 + +(con integer 10) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodePairA.golden.pir b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodePairA.golden.pir new file mode 100644 index 00000000000..f0c27388343 --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodePairA.golden.pir @@ -0,0 +1,34 @@ +let + data Pair | Pair_match where + PairA : integer -> Pair + PairB : integer -> Pair +in +\(d : data) -> + Pair_match + ((let + b = list data + in + /\r -> + \(p : pair integer b) (f : integer -> b -> r) -> + f (fstPair {integer} {b} p) (sndPair {integer} {b} p)) + {Pair} + (unConstrData d) + (\(index : integer) (args : list data) -> + ifThenElse + {all dead. list data -> Pair} + (equalsInteger 0 index) + (/\dead -> + \(ds : list data) -> PairA (unIData (headList {data} ds))) + (/\dead -> + ifThenElse + {all dead. list data -> Pair} + (equalsInteger 1 index) + (/\dead -> + \(ds : list data) -> PairB (unIData (headList {data} ds))) + (/\dead -> error {list data -> Pair}) + {list data -> Pair}) + {list data -> Pair} + args)) + {integer} + (\(x : integer) -> x) + (\(x : integer) -> addInteger 1 x) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodePairA.golden.uplc b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodePairA.golden.uplc new file mode 100644 index 00000000000..f8499f21353 --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodePairA.golden.uplc @@ -0,0 +1,23 @@ +(program + 1.1.0 + (\d -> + case + ((\p -> + (\index args -> + force + (force ifThenElse + (equalsInteger 0 index) + (delay (\ds -> constr 0 [(unIData (force headList ds))])) + (delay + (force + (force ifThenElse + (equalsInteger 1 index) + (delay + (\ds -> + constr 1 [(unIData (force headList ds))])) + (delay error))))) + args) + (force (force fstPair) p) + (force (force sndPair) p)) + (unConstrData d)) + [(\x -> x), (\x -> addInteger 1 x)])) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodePairB.golden.eval b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodePairB.golden.eval new file mode 100644 index 00000000000..46bdcf59b4f --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodePairB.golden.eval @@ -0,0 +1,6 @@ +CPU: 1_810_441 +Memory: 6_766 +AST Size: 76 +Flat Size: 81 + +(con integer 21) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodePairB.golden.pir b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodePairB.golden.pir new file mode 100644 index 00000000000..f0c27388343 --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodePairB.golden.pir @@ -0,0 +1,34 @@ +let + data Pair | Pair_match where + PairA : integer -> Pair + PairB : integer -> Pair +in +\(d : data) -> + Pair_match + ((let + b = list data + in + /\r -> + \(p : pair integer b) (f : integer -> b -> r) -> + f (fstPair {integer} {b} p) (sndPair {integer} {b} p)) + {Pair} + (unConstrData d) + (\(index : integer) (args : list data) -> + ifThenElse + {all dead. list data -> Pair} + (equalsInteger 0 index) + (/\dead -> + \(ds : list data) -> PairA (unIData (headList {data} ds))) + (/\dead -> + ifThenElse + {all dead. list data -> Pair} + (equalsInteger 1 index) + (/\dead -> + \(ds : list data) -> PairB (unIData (headList {data} ds))) + (/\dead -> error {list data -> Pair}) + {list data -> Pair}) + {list data -> Pair} + args)) + {integer} + (\(x : integer) -> x) + (\(x : integer) -> addInteger 1 x) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodePairB.golden.uplc b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodePairB.golden.uplc new file mode 100644 index 00000000000..f8499f21353 --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodePairB.golden.uplc @@ -0,0 +1,23 @@ +(program + 1.1.0 + (\d -> + case + ((\p -> + (\index args -> + force + (force ifThenElse + (equalsInteger 0 index) + (delay (\ds -> constr 0 [(unIData (force headList ds))])) + (delay + (force + (force ifThenElse + (equalsInteger 1 index) + (delay + (\ds -> + constr 1 [(unIData (force headList ds))])) + (delay error))))) + args) + (force (force fstPair) p) + (force (force sndPair) p)) + (unConstrData d)) + [(\x -> x), (\x -> addInteger 1 x)])) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeSingle.golden.eval b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeSingle.golden.eval new file mode 100644 index 00000000000..77a03b0bb45 --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeSingle.golden.eval @@ -0,0 +1,6 @@ +CPU: 1_260_851 +Memory: 4_762 +AST Size: 46 +Flat Size: 54 + +(con integer 99) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeSingle.golden.pir b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeSingle.golden.pir new file mode 100644 index 00000000000..83be3ca333a --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeSingle.golden.pir @@ -0,0 +1,25 @@ +let + data Single | Single_match where + Single : integer -> Single +in +\(d : data) -> + Single_match + ((let + b = list data + in + /\r -> + \(p : pair integer b) (f : integer -> b -> r) -> + f (fstPair {integer} {b} p) (sndPair {integer} {b} p)) + {Single} + (unConstrData d) + (\(index : integer) (args : list data) -> + ifThenElse + {all dead. list data -> Single} + (equalsInteger 0 index) + (/\dead -> + \(ds : list data) -> Single (unIData (headList {data} ds))) + (/\dead -> error {list data -> Single}) + {list data -> Single} + args)) + {integer} + (\(x : integer) -> x) \ No newline at end of file diff --git a/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeSingle.golden.uplc b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeSingle.golden.uplc new file mode 100644 index 00000000000..c627974b1b3 --- /dev/null +++ b/plutus-tx-plugin/test/IsData/Budget/SoP/9.6/decodeSingle.golden.uplc @@ -0,0 +1,15 @@ +(program + 1.1.0 + (\d -> + case + ((\p -> + (\args -> + force + (force ifThenElse + (equalsInteger 0 (force (force fstPair) p)) + (delay (\ds -> constr 0 [(unIData (force headList ds))])) + (delay error)) + args) + (force (force sndPair) p)) + (unConstrData d)) + [(\x -> x)])) \ No newline at end of file diff --git a/plutus-tx-plugin/test/Spec.hs b/plutus-tx-plugin/test/Spec.hs index 059283d075a..931d7c8b4d0 100644 --- a/plutus-tx-plugin/test/Spec.hs +++ b/plutus-tx-plugin/test/Spec.hs @@ -14,6 +14,8 @@ import IntegerLiterals.NoStrict.NegativeLiterals.Spec qualified import IntegerLiterals.NoStrict.NoNegativeLiterals.Spec qualified import IntegerLiterals.Strict.NegativeLiterals.Spec qualified import IntegerLiterals.Strict.NoNegativeLiterals.Spec qualified +import IsData.Budget.BuiltinCasing qualified as IsData.Budget.BuiltinCasing +import IsData.Budget.SoP qualified as IsData.Budget.SoP import IsData.Spec qualified as IsData import Lift.Spec qualified as Lift import List.Spec qualified as List @@ -43,6 +45,8 @@ tests = , IntegerLiterals.Strict.NoNegativeLiterals.Spec.tests , embed ByteStringLiterals.tests , IsData.tests + , IsData.Budget.SoP.tests + , IsData.Budget.BuiltinCasing.tests , Lift.tests , TH.tests , Lib.tests diff --git a/plutus-tx/CHANGELOG.md b/plutus-tx/CHANGELOG.md index 52ca625c262..e3967382f02 100644 --- a/plutus-tx/CHANGELOG.md +++ b/plutus-tx/CHANGELOG.md @@ -1,4 +1,18 @@ + +# 1.56.0.1 — 2026-04-07 + +## Added + +- Brought back Ratio.from/toGHC as deprecated. + +- A `deriveEnum` command to derive PlutusTx.Enum instances for datatypes/newtypes, similar to Haskell's + `deriving stock Enum` + +## Fixed + +- Fixed the `Enum PlutusTx.Rational` to be compilable with plc compiler + # 1.56.0.0 — 2025-11-27 diff --git a/plutus-tx/changelog.d/20251127_160027_bezirg.md b/plutus-tx/changelog.d/20251127_160027_bezirg.md deleted file mode 100644 index 5caba6dfc8c..00000000000 --- a/plutus-tx/changelog.d/20251127_160027_bezirg.md +++ /dev/null @@ -1,3 +0,0 @@ -### Added - -- Brought back Ratio.from/toGHC as deprecated. diff --git a/plutus-tx/changelog.d/20251203_114437_bezirg_fix_enum_ratio.md b/plutus-tx/changelog.d/20251203_114437_bezirg_fix_enum_ratio.md deleted file mode 100644 index 2b50d84ad06..00000000000 --- a/plutus-tx/changelog.d/20251203_114437_bezirg_fix_enum_ratio.md +++ /dev/null @@ -1,3 +0,0 @@ -### Fixed - -- Fixed the `Enum PlutusTx.Rational` to be compilable with plc compiler diff --git a/plutus-tx/changelog.d/20251203_115136_bezirg_derive_enum.md b/plutus-tx/changelog.d/20251203_115136_bezirg_derive_enum.md deleted file mode 100644 index cc0ef211ac2..00000000000 --- a/plutus-tx/changelog.d/20251203_115136_bezirg_derive_enum.md +++ /dev/null @@ -1,4 +0,0 @@ -### Added - -- A `deriveEnum` command to derive PlutusTx.Enum instances for datatypes/newtypes, similar to Haskell's - `deriving stock Enum` diff --git a/plutus-tx/plutus-tx.cabal b/plutus-tx/plutus-tx.cabal index e03751dc9ea..033ac35be43 100644 --- a/plutus-tx/plutus-tx.cabal +++ b/plutus-tx/plutus-tx.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: plutus-tx -version: 1.56.0.0 +version: 1.56.0.1 license: Apache-2.0 license-files: LICENSE