From 02af9e6305df46c414a1f4b163a1fa0ae882f12a Mon Sep 17 00:00:00 2001 From: Denys Gonchar Date: Thu, 14 May 2026 13:25:41 +0200 Subject: [PATCH 1/2] adding benchmark --- .github/workflows/ci.yml | 19 +- bench.exs | 3766 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 3784 insertions(+), 1 deletion(-) create mode 100644 bench.exs diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b7ddf63..38b3325 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -9,7 +9,7 @@ on: jobs: test: - name: OTP ${{matrix.otp_vsn}} + name: test OTP ${{matrix.otp_vsn}} strategy: matrix: otp_vsn: ['28', '27', '26'] @@ -40,3 +40,20 @@ jobs: token: ${{ secrets.CODECOV_TOKEN }} fail_ci_if_error: true verbose: true + benchmark: + name: Benchmark suite execution OTP ${{matrix.otp_vsn}} + strategy: + matrix: + otp_vsn: ['28', '27'] + elixir_vsn: ['1.19'] + rebar_vsn: ['3.27'] + runs-on: 'ubuntu-24.04' + steps: + - uses: actions/checkout@v4 + - uses: erlef/setup-beam@v1 + with: + otp-version: ${{ matrix.otp_vsn }} + elixir-version: ${{ matrix.elixir_vsn }} + rebar3-version: ${{ matrix.rebar_vsn }} + - run: rebar3 compile + - run: elixir -pa "$(rebar3 path)" bench.exs diff --git a/bench.exs b/bench.exs new file mode 100644 index 0000000..4ec729e --- /dev/null +++ b/bench.exs @@ -0,0 +1,3766 @@ +# Usage (from the repository root, after `rebar3 compile`): +# rebar3 compile +# elixir -pa "$(rebar3 path)" bench.exs +# Optional: BENCH_TIME=3 BENCH_WARMUP=1 elixir -pa "$(rebar3 path)" bench.exs +# +# Requires Elixir with Hex (Mix.install fetches Benchee). + +Mix.install([{:benchee, "~> 1.5"}]) + +{bench_time, _} = Integer.parse(System.get_env("BENCH_TIME", "5")) +{bench_warmup, _} = Integer.parse(System.get_env("BENCH_WARMUP", "2")) + +# --- Payloads: widely varying structure (size kept moderate so default time budget finishes) --- + +# Minimal self-closing +xml_tiny = ~s() + +# Deep nesting (stack-heavy) +xml_deep = + String.duplicate("", 180) <> + "txt" <> + String.duplicate("", 180) + +# Wide siblings (many elements, shallow) +xml_wide = + "" <> + String.duplicate("", 400) <> + "" + +# Few nodes, many attributes per open tag (scan-heavy attribute regions) +xml_attr_heavy = + " + Enum.map_join(1..120, " ", fn i -> "a#{i}=\"v#{i}\"" end) <> + ">" + +# Large CDATA block +xml_big_cdata = + " + String.duplicate("Lorem ipsum dolor sit amet. ", 400) <> + "]]>" + +# Long PCDATA with entities only (no raw `<` — that would be invalid XML) +xml_long_pcdata = + "

" <> + String.duplicate("word & space <tag> ' ", 250) <> + "

" + +# XMPP-ish single root: prefixed names, many attrs, nested children (single line — multiline broke rapidxml) +xml_xmpp_like = + "" <> + "" <> + "Re: hi" <> + "" <> + String.duplicate("Hello world. ", 80) <> + "" <> + "t1" <> + "" <> + "" + +# Repetitive items (similar to cache-friendly microbench) +xml_repetitive = + <<"">> <> + String.duplicate( + "hello", + 80 + ) <> + <<"">> + +# Whitespace between tags (parser still tokenizes structure) +xml_whitespacey = + String.duplicate(" \n \t ", 150) |> then(&("" <> &1 <> "")) + +lots_of_nesting = """ + + forward + matter + rule + 2110631293 + + -1123668053 + inch + shirt + mother + + 1932798666.2718558 + correctly + -432222347 + curve + discover + 1949532824 + + wild + + purple + +""" + +big_and_nested = """ + + + plain + excitement + massage + + + 248031970 + direct + railroad + -1904208365.368702 + + 1204206517.8670857 + + 846369162 + + substance + + made + + till + song + -830222508 + + 871879663.2784119 + 1756201904.5565512 + -775308125.6553111 + -1199885119.9381433 + lion + -1149774051.5707827 + pocket + -15237884 + + + 498135283 + although + 651650590.9088402 + + 2054632053 + pink + variety + + -854644132.5029886 + damage + 1225780963.7471526 + 637990387.7079465 + + warm + + living + 962678864 + scientific + -876964569 + -2103942109.5152795 + sent + 1823946742.0374508 + rise + 102891159.02190733 + own + -1755615907.8532484 + -1016250118 + -1872451707.0957427 + 1062129572.9839873 + few + 880418005.1643605 + -452925058.6215837 + say + 1109698275 + press + 1758713974 + call + 1363116726 + tight + -1134567020 + 228005372.9304161 + interest + 1540875252 + -1252910441.3734071 + 1973685276.2826002 + directly + 686125574.6102927 + fastened + -1327143002 + gray + -1504258454.3263366 + went + 101736431.4167602 + -381501617.3336005 + young + 1998660039.029206 + wash + magic + appropriate + -626211795 + monkey + bound + family + little + gone + 1183970258.3877625 + -478135121 + 527753275.58941364 + -1053347225.8018963 + more + 1153166283.6410666 + were + saddle + 961853908.4581466 + 1975821088 + -968821737.2972679 + -1141407988 + 1333384997 + 772801977.8351998 + somebody + after + -1912638815 + ought + 76227975.6777358 + 1231105758.4655128 + -11226951 + fly + shade + 929209108.5133643 + -1592492219.9688952 + 1900710599.7051265 + 306339417 + 1800063892 + -263860098 + 2003514589 + cannot + log + cake + happen + storm + 288334263.1331117 + -375486092.81676507 + natural + mix + concerned + tobacco + running + -323649048.9883454 + young + on + tired + 695893071.7946362 + 886373919 + baby + school + observe + -505115601.2492347 + rhythm + -1933558360 + nose + -1211281329.708237 + let + stuck + such + 1615070470 + using + deer + 427113596.74442744 + quickly + -1156081949 + four + -576660426.6742616 + changing + 684685285.9497375 + owner + belt + storm + 619657415 + 1717638611.3010535 + dull + 659872708.3534236 + -1526655335.3969603 + 901484050 + place + locate + -1368648925 + problem + -1553848137 + throughout + agree + -1809354102.7802866 + possibly + particular + 857106896.3754554 + -1625105900.038957 + 1605720345.3680284 + 1450817798 + nervous + -866805590 + 450080675.9234855 + -265555501 + wagon + short + 829140437.0858846 + accept + silver + -2105871328 + pupil + 2000347473 + 2045975639.793102 + experience + fifth + 380092748 + interest + -1559022630.0728285 + -661437863 + -886270507 + throat + pie + 1826306206 + southern + affect + rubbed + -1009555430 + diagram + 903572117 + newspaper + -1661233109 + 1372024774.447657 + individual + remember + 1749933967.6763613 + 541872725.104429 + 819177225.1968687 + properly + diameter + -1452572929 + this + 1266588714 + replace + -1238985443 + proud + alive + exciting + -1191574095.2960596 + 287423998 + -1628576520.5761998 + beginning + 1354710794 + 1887958047 + hurried + -2138900081 + therefore + shells + 101380974 + -1555093611.2513075 + -1960560149 + row + tool + teach + -1321099757.2251685 + 1463136680.1950788 + 615314948 + -2067363940.2517595 + grandmother + -1311565689 + -1566417632.0599673 + 540077666.7925794 + flower + 278867929 + 1643997536 + 1630722728 + sick + 1633521670.460056 + 836707548 + 1895782155.0370026 + here + -32502513 + toward + -824243688 + 556834938 + local + 1437096146.04218 + + sort + -1127191198 + -1672795447.8713162 + hung + -1127361942.1941385 + twice + mirror + pan + -365060913 + species + travel + examine + -1916347167 + 2031132689 + 275486650.11145425 + tears + -1500567782.50344 + -173951575.89761782 + -705950944 + jump + -692651701.1083031 + 931051255.8409944 + -1912526153.7949557 + author + -1645045723.5434425 + war + 1445494770.5255249 + -717969703 + busy + song + fact + 118334765 + 1821872297 + scientific + have + 1953533956 + 717490449 + got + movie + explanation + choose + 1536427087.5744205 + 1232778530.494471 + dried + herd + kept + -790190101 + reach + 689395510 + society + 1407764267.3275037 + rock + 693502035 + grain + rubbed + -1446920124.2737288 + food + 141619198 + behavior + happen + 1071607569.0733886 + 1933948271.3956237 + 627059256 + -1504476846.9121978 + live + character + future + carried + spread + information + research + blanket + 5652062.228485107 + -871418964 + wood + 511052262 + -597896982.2674756 + floor + especially + widely + -962584252 + small + 1465880972.6825907 + -1717745271.1656532 + -1216278753 + -2081349035 + characteristic + 2036816348 + -213520947 + -2082895518 + national + 1514198411.0731506 + -187760795.5191524 + mathematics + -521312306.3129189 + 1161400435 + -1632299431.619916 + 1095654153 + 560910551 + arrange + temperature + aid + 41935565 + -796378350.2916353 + determine + -689902290 + 402398005 + 1871284165.5726492 + feed + dust + safe + minute + situation + children + poetry + 807744373 + 276121146 + 1308832954.8201156 + life + -2017229423.4964023 + 1813711329 + -1557371165.0572593 + sugar + -1307473993.0936742 + toward + -723736791 + bend + split + mouse + charge + nature + -2024239456.8037837 + happily + smell + -2028767625 + colony + someone + heart + funny + 1273057746.7119408 + current + combination + 323655097 + -1003422426 + paragraph + 1412899792.103135 + pack + account + -1019512365 + 438009875.90596914 + view + lady + 1522431762.2898834 + -2017106986.912309 + popular + compare + paid + -1960094359 + friend + eight + town + these + clear + 1205010606 + 1419785367.1304686 + lost + fruit + 310738157 + there + west + sentence + -1683074605.0786905 + -2074032983 + -1837004266.3519957 +
618008876.8869331
+ 69479667 + continued + 1873895277.1202757 + -962156253 + characteristic + than + 216422193 + bus + easily + spend + -251373118.96641922 + show + 50075535.26827264 + scared + scale + during + nature + fought + blood + writer + 905237280 + 633106280.1930418 + become + friendly + -459154528 + whom + 284146776.28901124 + neighbor + -180762212.32585287 + remember + differ + -159087450.96293616 + -1796576297 + -1069715907 + -2083267752.2540617 + -833997860 + -835822502 + 1215891148 + fast + train + -1154564665 + -580154611.6805096 + dear + -1630242832 + 121994699.92742634 + -1254301756.2024167 + somebody +
+ solution + 1988022154.1521096 + 527354649 + 377231194 + 604746863.7320173 + 574632018 + -1197415258.3753626 + -1877460658.2268403 + + -1746860985.1897883 + 1785891320 + 592765080.8270361 + plastic + hide + claws + 1743144450 + 1768130322.6526127 + almost + -1492186307.6649282 + skill + 649313855 + mighty + -1267662884.562007 + office + 203544461.2928307 + said + -227352637 + -569892105.4462306 + 136340453 + -1294704440.465119 + -1803509669 + milk + 1783419013 + coal + clothing + morning + 126586788.92366171 + using + 296727124.15577006 + 698696303.9103653 + any + forget + 289042142.80123925 + 394746251 + steep + 38303075.499222755 + brass + 1830078583 + produce + -771395951.1078265 + -2042223519.543579 + -426755981.1647382 + -870357467.5473199 + -1662124586 + -176957683 + 1258256716.5363667 + whole + 660330798 + anything + three + -1435612615 + 2062787204.1024718 + -1524984512 + when + 157619751.87516475 + age + silence + operation + 1711641936 + -1659944664 + seeing + 49545960.71279144 + further + -695906438.3315275 + -770122338 + 787772368.2162037 + + magnet + -2079175297 + -1342278766.5145783 + must + 7631606 + again + -563579137.6120164 + bar + meat + -144971527 + 1174521106.8503342 + climate + decide + 1975726049.513473 + 526515423 + 469981026 + 951827094 + process + 1124305038.6964388 + -847956241.2078195 + -407036059 + effect + physical + 1246754322 + 1211679752 + 994410363.5255353 + -141425665 + -1547195552 + 743068433 + 59353078 + especially + 800566897 + third + its + -1710472819.4934978 + both + 580966617 + -600236647 + 728785095 + back + were + huge + -255284696 + lift + ocean + -666099074 + -498868181.1243937 + 436722262 + -732625578.3602326 + return + -206942646.86864352 + -1859303119 + birds + 561265871.6079533 + 1167898337 + task + refused + -1629837223 + flew + -180958952.7524917 + 1620685226 + -1924675984 + affect + 950420658.4553981 + -642469440.1103938 + shot + film + mail + furniture + pleasant + discovery + -901829802.3289065 + hospital + 1198064411.0458071 + path + 1180988527.140988 + football + student + -1552947570 + won + 990031349.1258047 + hour + -1258145336 + 1986082576.1166036 + 557087664.4769039 + -662661687.4988682 + 275852357 + composition + measure + wrapped + jump + stick + 1086065707 + 1013610450 + -716850877.5599711 + 2122110996.733401 + chicken + 487805118 + -2132058569.9239058 + -890412484.5666134 + adult + hour + image + whistle + -1643126003 + gently + connected + 163259605 + -496300495 + -454949462 + 882426119.6188514 + -325692877.5229137 + 461989077.3889797 + cowboy + -1557342991.0958502 + 250221470 + 1058596958 + though + right + cut + immediately + -1313583711.6152802 + -586268750 + interest + gave + -1908469238 + -2056855632.6119552 + -1711624510.6887927 + mad + 401624863 +
755922595
+ 562696083 + -980668038.3897276 + -732690509.9915614 + manner + hung + were +
+ 27533749.613889933 + -545650022 + society + nose + 1811525159 + 954710689 + -1172950358 + street + -734325886 + planned + 1105576277.5606291 + floating + swim + 477503599.66002464 + 1108607441.1688864 + arm + basis + 1630681657.981659 + wool + 176246900 + flow + pony + try + -440848572.53439426 + student + 865562245.2366338 + shut + -535886315.4454045 + 293868986.0001421 + highest + -683362694.5266016 + 112416504 + terrible + sheep + slept + 1434479661 + rubbed + 1823209339 + -646826025.5290451 + -1763042862.9769852 + mental + wood + -167399108 + -1761609084.9279025 + hardly + silver + 51790451.74904466 + thou + -442912210.02267456 + -1137761464.132539 + form + -419477471.3477006 + -1283263439 + car + melted + -1992769442 + 811703285.589196 + 552630579 + -376250756 + -807181033.2384744 + 950426141.9111123 + -29943227.427378654 + 925485489 + share + -1229420696.0573933 + -190517568 + -1926670200.7075052 + bell + -906021588.3991783 + 1209724080.0392227 + 1168620668 + 1850762671.2434244 + correctly + letter + if + successful + drive + 2110285514.4173355 + not + birthday + replied + seldom + 1402591791 + earth + -585503212 + 1312459605.655246 + still + 173452064.26132822 + -572899455.2208884 + 1172276655.9326375 + 62955904.795648575 + surface + 1961294797.5546715 + women + -41818177.26597357 + industry + eye + -1059666817.0356605 + -2089198637.4583118 + 1397000423 + -251803178 + wrong + jar + smoke + thing + -764820039 + doll + enemy + corn + -1986057114.7505434 + wood + 770393272.1225951 + 1256886478 + 1313142795.7970848 + show + addition + willing + manner + buffalo + mood + 768455243.0914087 + -599396753 + 1291372499 + 982659776 + top + 833413899.5762005 + broke + -699350147 + -654165301 + atomic + during + -1718531921 + -488803518.74614096 + + party + 523812821 + list + engine + upward + me + he + 734339332 + remember + 1900859006.930949 + fence + -531085552 + news + 2120413919.4551644 + -346733110.78626084 + 404255224.7956972 + -1601684897 + agree + 371924704.6404884 + later + writing + visit + poetry + sudden + which + make + 697189298.6121564 + 1790490970 + touch + 399711596.26874685 + over + acres + ran + 666109242 + rose + sitting + 2123403956 + solve + than + report + -129407435 + unit + middle + -937328959 + law + 655784673.0645051 + 229034709 + town + -1667655108.290891 + -129891579 + -1929240475.8978493 + 1355568842 + 954141870 + daughter + -1997871425 + pull + heart + 296327636 + film + summer + twelve + -1394694155 + class + -1083494540.495706 + last + land + college + except + 391286088 + -1634038303 + -743033245.3662186 + -837298221 + -1168977780.2280397 + 281564376.85532737 + little + -1604375919 + 1033212997.1107619 + -48399865.72949815 + -948183831 + -241302993.48748899 + -1079994996 + track + -509062229 + 1005951247 + -1034885489 +
+ 707759097 + 90920284 + 1016216164 + uncle + 721451031.6364658 + -505515865 + blind + zoo + rabbit + hung + -1227766423 + + 369189150 + 1346125987.3450274 + been + chest + -2042331863.690857 + 396630539 + pack + who + like + sand + corner + star + 35504930 + grass + pack + -1566280436 + element + 459327272.8950136 + answer + 1182020189.6583567 + 1133775411.1874182 + engine + draw + 347210656 + flow + parent + 453577666 + 2023101757 + 487446932 + wing + 2034942593 + 331482084 + may + -1052825154 + 1481330976 + -599212765 + 1565178293.800296 + yellow + 871470408 + behind + -875044875.8474352 + gas + -893352067 + putting + source + -1964189349 + 475393493.3367882 + nice + including + add + dropped + 1943067756.483048 + chicken + -1173634028 + -239683514.20119214 + twice + share + 493651507.8423772 + -1136696407.4478245 + -2093413371.0009315 + 1217839607.938854 + -630701998 + -752533741.9086123 + victory + fear + blanket + youth + enough + -1504649217.4723477 + gift + -981264847 + tobacco + 657352864 + saw + -1110858630 + ourselves + -1070715276 + 97068462 + proud + tonight + level + 803921364 + pie + 1904952370 + -1942343875 + -425218894 + secret + -1783241581.9598217 + tonight + -1442298451.248824 + 163155185.6469984 + business + spider + -1285779483 + shorter + -1781997655.0404274 + -1470202838 + -1066803799 + plenty + 1199760353.9411597 + constantly + when + -732408180 + 1572865912 + won + ride + concerned + -676090810 + -1943476340 + 1241547210 + lady + business + -642892512 + atom + fellow + experience + plural + specific + -337424472.1080897 + tide + -1137000841 + 273150722.8677025 + give + standard + -500568518.2671881 +
lying
+ dance + -427362780 + buried + gold + -1890126581 + -1616355535 + pitch + gas + knowledge + 1753248186.0930066 + -215697413 + danger + live + 1904140941.2820504 + nose + -1620040267 + 1650500279 + changing + -535602652 + continued + young + brief + 44799642.290124655 + some + invented + silence + pour + -303352502 + society + jungle + empty + six + pupil + -36161373 + 1981699994.4965842 + -1177935431.8103957 + point + 1074826134.500743 + 1184493354.2632236 + flower + 774265526.3409603 + 889328240.4245186 + 212398476 + recall + -1766233831.9930227 + himself + 1789601556.7307682 + jack + -580148579.411758 + -1142367657 + -1223184762 + opportunity + -849726457.2521739 + -170395677.1582842 + real + 1850198082 + 1523684746 + spell + -1537154440 + 1592160757.463304 + -670393383 + 591842770 + -1848863443 + -1149960888 + liquid + -1348545482 + mice + likely + brief + 1683501842.9864967 + bark + troops + -634183164.5914261 + needed + cast + anyone + -904894611 + -1969808581.2863657 + -391000408 + bring + lift + -511782426 + 1428607376 +
+ youth + -407651606.62923837 + -946519635 + 380819276.7570901 + higher + piece + measure + 423021838 + 1097795657.7403033 + molecular + slept + 1508644581.7216988 + 1056161096.1897526 + 1318934942 + live + 1490957867.255077 + trace + plastic + -1870452836.0876455 + -1371859420.2444081 + -476141635.9401381 + 761280481.8449507 + to + concerned + history + 587308059.9513996 + action + -584871754 + bright + 264318470.0065105 + settlers + 661953045 + sick + industrial + crop + well + from + 576700364.134037 + probably + 652004177.1611688 + lie + in + 980127252 + tropical + draw + 603309883.711786 + -1779269988 + little + 246669298 + lower + + 96956785.69951105 + or + glad + taught + station + happen + spin + shop + 273333092.42114186 + changing + -905174505 + -33380933.701783657 + -571417558 + village + feed + 1376933984 + so + -1402147055 + slip + post + thought + several + surface + keep + 294881651 + given + -1573870888.9675097 + -357513067 + after + 1680694854 + live + -1834858125.7875965 + birthday + -1280341068 + war + -529865966.23354435 + -1597193287 +
1204773618.3763342
+ 1638173637 + -212996625.97838664 + 693075406.1747789 + -105115820 + -96203457.12479019 + up + -433905977.26057744 + sail + -1181450947.0655677 + species + 817672529.3913786 + browserling + -1241800104 + -1781770428 + origin + selection + subject + 1371970943 + 252946902.08536363 + price + -722288164 + 1002467509 + -828154305.4652498 + highway + likely + 325260066 + -1218680315 + -906653875.2785816 + 256002156 + stems + -412266586.3981743 + -1869404414 + path + -1200492325.4338264 + 691551347.8518565 + -2115937753 + mostly + 827797678 + -1981350155.9618537 + -492619970 + -244903265.7195015 + -600461568.4295974 + -1853249013 + 356633379 + birth + few + 1968537024 + brush + -1409552840 + slight +
1692078561.2147772
+ between + political + 339307332 + 677348419.6148326 + -1211657343 + badly + mood + -1755188708 + worse + -76135199.95470381 + palace + slope + -1160170626 + -828127797 + paint + became + house + nature + fireplace + test + 1365140642.73892 + shoulder + south + cry + number + whenever + immediately + meat + 1903296771 + -1327762133 + check + -1595518020.3885152 + 1961906486 + support + 265270145.25251746 + -1963304394.2928755 + while + harder + knife + evening + -1243653914.7437437 + specific + -1942912537 + -1390044144.0621347 + -2106214333 + -980649442 + -621199922 +
687306312.8998294
+ brain + upon + solution + doctor + onto + properly + coffee + indicate + -1830090300.0451007 + slight + -2120346533 + pupil + 83245638 + musical + useful + -1722416174.3383439 + gain + whispered + 568094530 + 1118147549.327447 + refer + hello + -1393806682.0049872 + 1898726079 + -1068429618.571594 + 1504033805.168677 + replied + 1244186509 + it + place + chair + -437912639 + compound + wind + 892875355.4252033 + 793392101.9308548 + gasoline + cause + field + 467906429 + 425332267.0859661 + studying + 1175331264.9738975 +
+ 1305702106.6890652 + needle + here + yet + -1449825712.4415834 + thousand + -2021145156.2222967 + known + -587454857.6931138 + -1172743035 + dug + doubt + buffalo + 1079154410.3040283 + corn + certainly + letter + 1877917979.326503 + -129241844 + cry + instrument + 942629660.4895735 + -2024451095.9412017 + 1266959718.8887165 + 77319639 + -1646780480.0770304 + mood + depend + 880069242.5123789 + -189875474 + 931056678 + 443440485.31904006 + 1741251916.4021204 + -251879265 + 2122606882.7065024 + below + -1130204251.4601762 + -1537642585.9483788 + -1793059940.2101371 + -1593727165 + front + -1888679946.6928642 + 934634537 + -1136263791.5672953 + 542657457 + pressure + 1181886639 + death + -1010391506.5376139 + hill + -1252225891 + somewhere + -735492707.7126269 + 1593238374 + -256302152 + -1213902812.902533 + service + married + research + -1053961444 + 787250122 + outline + 1911854448.581757 + 1636062570.5906248 + mission + string + main + -1345416507 + garden + father + leaving + 1798353420 + crew + root + 1016840856.4248092 + -1635439740.2211487 + sale + sell + 1576311113.7134368 + -55953075 + pile + + mix + 612013142 + force + -847775921 + bad + count + -832781614.9189706 + repeat + -546422462.8793705 + smaller + -2005253340.2009795 + steady + floating + reach + younger + military + -865534088.3696764 + -479210825 + frighten + village + recently + compass + milk + 2085631477 + barn + 43648842.764497995 + 2012609978 + thousand + -278812237 + -589159187 + -1141599321 + cutting + production + neck + -761211478.5698395 + ready + -2013845428.6129017 + stick + block + sudden + 1868661139.1792867 + friendly + combine + 1888959691 + 1976340131.8528533 + -176754958 + attempt + women + make + took + mighty + ice + 1688024920.8457024 + area + -105440408.28544378 + 1543911545 + -1628244969.723007 + stick + 1454354296.4943717 + 1727819692 + 916894261.2471142 + 809027527 + -200262195 + -1469183114 + oldest + tiny + -704940443 + lamp + heavy + -1294393847.4145005 + -1207325874 + page + biggest + movie + wonder + week + -1508239353 + 401506155.7337923 + -1234073868 + unhappy + -246207540 + -904173831.5750127 + letter + 943168398.0509 + fact + -1991610777.4145768 + percent + hat + wide + plus + divide + 1207549787 + look + 1553445894 + -1162450339 + 301160697 + 1299918574 + 1047919245.130125 + 1526775020 + branch + mad + word + 399454658 + stiff + 113198802 + -259977878.0153308 + black + stand + -1916615059.6621664 + identity + develop + ran + -1168146062 + milk + earlier + 770842553.1304593 + refer + -367951607 + 1627032741 + somewhere + simply + 1333258270.420698 + dozen + build + because + leaving + -1525150972 + 1013800398 + 834687431.8090539 + -1549260137.6285763 + 1017894623 + -777746737.0546668 + sets + 1347527928 + heat +
+ cutting + 913442818 + bottle + fair + pool + -776871629.7706833 + strike + 1381695186.6196015 + natural + 1631702487 + sum + 1249096819 + -1906026747 + -1158702842.299648 + -104876203.72789884 + -526809850.3398192 + solve + box + age + new + 180026481.0952351 + 2043866282 + element + 1946469993.826817 + 72815882.8773582 + fifteen + 2130631054 + interest + met + necessary + duck + 842845783 + -1165535370.652227 + -826431856.7101722 + balloon + coach + close + adventure + 233041127.88340235 + point + camera + frequently + frighten + -2055514669.4173696 + shall + -1466948077 + second + chemical + dirty + 1792006088.5906417 + heading + harder + corner + finest + -1065221826 + 468183055 + -1625479122 + -771418714 + 1845941894 + -1562044723.9852335 + purpose + 1006506851.8002844 + -1598043488.4725695 + has + -394149106.9132011 + -383641282 + dream + flew + 1749541137 + clearly + useful + + coming + bottom + law + 359695344 + write + whistle + metal + -924370555 + spread + theory + trace + involved + compass + -1899238444 + while + -530404501.03048253 + 440210214 + -81722825 + -915587214 + blue + sad + title + -1306294579.9527566 + that + -1223053167 + 365827403 + 1022428706.5996413 + back + word + try + -1986867652 + connected + 157556880 + harbor + 322826200.0005553 + -296401589.30158496 + unit + dish + 1020345727 + away + mile + ancient + 2078790843 + + tube + peace + hour + -1436030789 + struck + -1966516410.6047137 + -1910293054.921857 + 204827526.72404218 + victory + eleven + anybody + -2121327307 + -1550268379.3635685 + 1755875790 + children + 504347984.2555294 + -996637709 + -741894416 + rush + -1377311770 + indeed + adjective + 1533649853 + 1905147779.0537972 + 2008721623.9744377 + -1301107242.047357 + -1173711487.5903635 + piece + 1505911306.0315633 + steep + 1150962349 + collect + distance + 225942303 + wrapped + -515811475 + lesson + composed + 1183417632 + dear + -1995699456 + -367522137 + whispered + ask + -406753608 + 1571449368 + he + 1457939105.2055805 + 321674243 + specific + -1754130638 + research + -2041923994.5722406 + string + now + planned + 842274689.7596204 + 769437001.7711165 + sugar + -240232041 + title + -1195851838.467094 + beside + previous + along + 1683259068.857248 + church + attack + anywhere + -1254887974.075488 + tax + went + time + -1511149484 + 1967937376.949639 + southern + directly + -978090455 + rather + hold + molecular + -2104217947.1864564 + 2133385378.0673425 + spider + -1400534475.3421302 + 2125511939.6882532 + image + tears + although + 267918268.26460767 + -257814156 + -1772487500.1292982 + disease + against + -774377453.3862514 + -866671679.2830467 + -325157758 + handle + syllable + slipped + agree + too + 1823601269.1723583 + -1305585960 +
+ 2047222941 + unknown + 375882459.9043708 + town + say + wave + 294675730 + to + toy + 119960076.33594179 + grain + -1188520167.1851287 + fill + chance + wolf + 1782205411 + paper + 1623381851 + -1097917222 + 803907174.6210508 + -1897744381.4130495 + -870393823.401293 + empty + -376474568 + noted + classroom + -912558348 + 1844634933.0582514 + accept + 1303629495.0529695 + gather + separate + put + 174807712.08217144 + -1296704114 + -1080691493 + -1838079906 + my + -1038688716 + captain + 2060980707.7154438 + industrial + -988681733 + 1191539753.0992591 + 1817910273 + 754956668 + horn + using + 1861513545 + -2091194172 + sign + 1723344145.7771769 + stiff + -858888854.9765229 + -264583690 + -1500248318.056267 + several + football + -22365146 + 1126136590 + -1133771621.3151739 + 1031159962 + fire + exact + 2024747117.052742 + -199513966 + 1073061386 + cannot + primitive + worried + 1998687192 + 827662694 + having + arrive + -924829696.958955 + father + -433595487.8002784 + guide + -1408623428 + bad + receive + -2015645399 + 794010602 + pipe + -1809969028 + -104082816 + talk + temperature + somewhere + -893892562 + younger + -429305600.8440349 + 1805530049.0947044 + -159375594.71430326 + -1692723732 + log + -236693218.33879328 + jump + star + fifty + hide + kept + hat + thy + square + goose + 1962043136.253807 + moment + development + table + 1785589062.4883926 + sum + zero + new + -1509520625 + -1389099327 + office + operation + -1028049978.20329 + 528362603.0093343 + 134031138.06261396 + pilot + easy + hang + -1162266292 + 1366015177.0136573 + -590516839 + bank + 1013005944.7099361 + sick + course + low + 2122843783.3607242 + 261440206 + star + -1023947180.2716861 + duty + 1724902210.8163207 + married + due + 1696054923 + -1938802421 + clock + -921490291 + voice + 538652735.890408 + grew + solve + already + 1461695077 + slope + 2027189314 + -1320856016.4522557 + -173699995 + 1680156680 + 1564305546.0597236 + riding + end + 1612191912 + 1556251002 + -1326390083 + column + popular + -542776258.3625038 + thin + -653735088 + percent + 172475993 + 1977112931.115788 + activity + above + 256889303.3750074 + middle + nearer + chief + character + 298072614 + adjective + kept + composed + -1072806131.8237581 + 2066317571.0131636 + pilot + 702621607 + 184742519 + dead + 34683251.566231966 + -1189954856 + cheese + higher + by + body + 2133783106 + 896897754 + -117393162 + -1651543421.7202692 + 1940943362 + bright + buffalo + 1313991809 + knew + tape + use + 1697136051.6581542 + 1244666836.7718172 + silent + six + 1094704859 + motion + also + -1648845322 + fifth + 805081106 + studied + scene + doll + -1418780478 + -47668200 + 10854188 +
+ -1940629075.7281308 + local + -842466448.6653724 + pick + -125368239 + 247170603 + guess + bee + 1509168766 + 2047171373.1647964 + 1897056235.7628632 + 1995715343.2488055 + chance + group + excited + -1377970580 + -588413981 + -1692649231.218818 + -2142176121.7356384 + -1391595582.514805 + wave + -788667501 + children + beauty + -1558682053.9486918 + feel + cage + stay + 1177641104 + riding + 1522373337.7253213 + entirely + school + -421359501 + 1985155400.3623743 + -1145300446.0349288 + adult + 1828027806 + 1629818816.7784956 + have + smallest + 1862140218 + -1863056509 + ancient + further + changing + said + -1435921136.0201638 + held + change + -358595825 + 1758304735.0240822 + double + deeply + -1172588852.8604178 + pure + 363073373.07441044 + adult + 742224330.5193043 + stepped + cause + want + 1656859879.6554356 + 1362239722.7871733 + -1518649687.3394067 + 1549024425 + -1746650603 + -1625090165 + additional + general + huge + leader + oil + till + quiet + brought + coat + -1090596727.184232 + chain + -184048288 + -1513014443.7307582 + income + 1287200829.1555247 + listen + -897056763.8525791 + -619924593 + -1516049494.4864345 + sheet + 1307028889 + -1479807057 + 1433372066 + -1924298790 + of + -2098871086.3619606 + dropped + war + yard + 1819253315 + 1739895678 + object + -1002410916.3853121 + -394466916 + 991780412 +
national
+ 180632996.63450193 + -1415316341.012345 + 582855824.4208035 + telephone + -77222933 + -2049300508 + across + method + -1673574538.3653057 + 11321719 + -648688113.1307344 + breathing + 1743614719.6170862 + 1681146526.1987288 + 1254823338.848003 + break + ear + relationship + to + kill + -1909511060 + 4479019 + -2141194083.5526283 + 1417166689.1208122 + -1491748460 + 339812238 + -339020186 + horn + 1973672977.216699 + -1641126100.0134408 + laid + sitting + -393060790 + 938009408.1910393 + rising + cage + setting + far + 921554714 + community + carry + lucky + tent + -1789926767 + continent + 1869660945.1805327 + managed + -660809943.9285576 + sun + its + prepare + -615044980 + paid + -1650660510 + -2012429857.5760512 + -271662584 + surprise + 304093096.16268873 + -811060157 + 1588054298.6131763 + chief + -459084188.2322662 + -1725597176.7007403 + -594266184 + frighten + 315023407 + 276652592 + 1559098054.1156178 + 963489151 + -1724552660.3994462 + -704948277.2447212 + -338036645 + certainly + drove + 1190994958.53436 + average + up + pleasant + -1554486876 + -1659234076 + worth + double + limited + 710104364 + 978942386 + pencil + -891554687.903477 + -476804457.14784503 + typical + lost + 409437603.67425823 + brass + women + actual + 917400598 + climate + struggle + practice + -624876480.6847119 + seldom + policeman +
-251370072
+ -1668747040 + -1768626199 + globe + 60582098.89307833 + personal + 1822366978 + wheat + radio + -400644770 + 587797310 + work + -2041714632.485795 + -1471657621.1269248 + doctor + -530370271.9012618 + way + 171700251.52236557 + printed + 2048223725 + -1216851559 +
+ -1302134536 + 801295561 + 871946941 + break + tune + instant + 1213917033 + -306780709.7759466 + -2023287067.342214 + began + shaking + -2124672806.5212507 + sold + fresh + 110352280.98097324 + solid + 561422846.0293458 + -760361034.5464599 + 1408834725.7865188 + 363929249.4206283 + 88559049.46285152 + -190382341.98435497 + press + voyage + walk + -895626990.75458 + 1311756294.127383 + mother + -747196228 + particular + factory + -601884124 + table + needle + half + include + eager + -1687541670.682532 + tone + fly + metal + honor + income + -961980347 + had + special + instant + 1613604649 + close + -645930797.1466916 + 1409895305.8927627 + 1198997542 + -2023248639.0443766 + 232019824.6748693 + -954064486.454622 + 1762758530 + successful + 2143213492 + -1286867686.0398717 + parts + 2061579960 + no + -63958021.409356356 + 1906794700 + 1295811226.3840744 + 716041738 + -1552992845.7244825 + be + 894123766.3292089 + -1736089855 + 523481920.1869228 + 29822315 + join + different + tube + -103408790.3917017 + individual + -1826867852.150736 + 1848739887 + tank + 1052053133 + complete + let + -1465901970 + burn + 1372558543.979003 + 1283055056.6899428 + to + -963267229.161216 + 343707802 + 1844813405 + 999864349 + stock + -999353663 + -1126145098 + -1739106777 + door + -281702197.7699084 + -2109432492 + native + 1704433212.0252242 + 1634393000 + active + -724407243 + 1999952692.320136 + 1764988094 + film + skin + tone + who + brave + 36479733.83391023 + whether + -569521896 + 2082625359 + 1157747482 + leaving + listen + 1625762115 + 346645797.7066691 + 345866279 + specific + -515839218.4076104 + 1529942421 + voyage + once + board + warm + direct + further + -2003967942 + -1330532181.110676 + correct + 1527802813 + -1679656118 + swim + cool + element + -2010995872.065183 + 214042233 + fire + interior + -1065350837.7874906 + -949724212 + -632687075 + -673755923.9942629 + until + shirt + poem + 1932546009.6207108 + 1181623514 + 1420261590.8412178 + 2112501401 + 2003622111.399161 + specific + engine + 765367323 + -1706466295.173272 + -187665615 + angle + -919624419 + hidden + -1610994273 + 493222316.0583093 + hurried + replace + -1909273310 + bent + quarter + 1996974045.906778 + practical + 129326413.67903423 + path + press + plant + he + 702496679.5523467 + cry + food + 1547259050.6801705 + warn + check + 575418361.5506244 + 1579903957.1266606 + 1831172310 +
-1512926585.6992009
+ 416577095 + won + 1246899007.8562887 + month + 1548235607 + diameter + 1903228572 + signal + beautiful + -1954697946 + part + how + blue + -1123546990.2813365 + -254030964 + press + -1360505605.6470184 + wrote + 346814211.4024451 + nation + -689625989.7731266 + never + 1472497515 + situation + tube + -195861466 + list + 1939860156 + younger + lower + building + 673931584 + drove + 1246971049 + to + shout + 1391090322 + -1595835716 +
+ 1675966293.7589335 + moment + -623522603.7484148 + size + -969824810.2235193 + -940701334.1386724 + danger + -1692206088 + -1980994074.3879054 + hay + positive + 981364138 + 948801826 + -449247821 + opposite + correct + sun + alone + 128760264 + salt + cage + -694089838 + am +
-2019462131
+ star + airplane + whatever + tide + drink + opposite + -577752129 + name + warm + 100756727 + -1858240685 + 425268961 + -1308731171.3121557 + 1329768945.5410886 + major + bean + understanding + zero + coast + -1953759847.0213873 + rays + -1833129295.9807484 + pony + -147243248.3679304 + 1394168756 + friend + shape + -1316403555 + 5109123.926436901 + -1890210692.8618941 + 439123173.89769626 + -1460718122.6940432 + indeed + silent + frighten + -1022134057 + -1673302411 + difference + 1005859068 + volume + thin + before + solution + sure + vote + she + suppose + -119040788 + -1381708941.938429 + 334188051 + 1895522256.8090324 + -101813842.4282999 + globe + act + about + -269303875 + two + even + yellow + 71366372 + -713129096 + -1228115988.810944 + 539958143.0012872 + simplest + longer + 179514359 + 1035894523 + 177519237.3736937 + army + -1108472875 + 1485376102 + world + sum + hole + 1626010065.0781105 + 271533179 + 1844653723.6282756 + 2136105748.472584 + onto + able + eventually + claws + pencil + -1129736912 + -968578941.8167822 + -479928392.5609968 + held + entirely + half + also + 264500086.60346746 + -111059968 + over + -697954325 + -1138606618.5183907 + -510576358.4904053 + 191875599.26680994 + generally + common + -2073276564.7009304 + announced + -848204316.120929 + under + -1501745987.7821615 + generally + -1091903602 + -1924949441 + stood + 125194714 + -276454676 + -1154279465.9543662 + 1635406898 + -1414981276.640713 + watch + afraid + held + -1470034877 + 46786200 + plenty + queen + 488088823.9191272 + anything + worse + widely + sick + class + -559959631.6449542 + 1301883528.4234505 + 74251898 + -189142222.92139006 + 508527513 + -1487274548.9519918 + 105482420 + 2127064897 + 1517875578 + orbit + interest + typical + make + trade + nearer + wore + -1662539818 + 1092333585 + guide + atom + 863061391 + easily + section + further + -370449665 + throat + whenever + -595213558 + form + dance + 230697511 + underline + -1691281129 + furniture + family + -1509023850 + -692176668.5407898 + three + kitchen + correctly + -260696415.75214863 + 1391000221.1338227 + belt + 1626789573 + 1078546696.6413443 + -1184945208 + future + 1445628288.1707644 + 163615492 + prove + 1152517408 + whom + moon + three + -1125165134.3912702 + 1067361068.1656978 + may + 905195626.0584693 + drew + 1264744156.0751245 + collect + handle + quickly + thick + 1978741943.3426602 + 105242431.91546845 + apart + -322382000.83086157 + -465098569.4657428 + offer + rod + -1035816441 +
+ -366058222.1971123 + cover + day + 159783121.8218317 + sugar + 656747533 + higher + reason + -1871571554 + never + -617505644.0950692 + 58811567.43633914 + race + somebody + 407453624 + anything + exact + difficulty + 638804972.461272 + constantly + 1873870464 + result + fellow + glad + hidden + 518293758.591552 + arrange + -217539837 + 2087093116.818205 + equator + nails + 1997710364 + steel + 1711057657.975843 + secret + after + -1720765819 + military + faster + snow + -2007474318.3632963 + 1619284677 + jet + eleven
+ -179732043 + top + 1151422590.9349444 + column + -999743389 + -1332908996.1877441 + police + ought + 528446718 + -855317828.7509761 + wire + comfortable + failed + yellow + former + -1530672394.5946448 + -828931439.5400579 + leaving + -1982338628.2402143 + -1765176507 + land + serious + construction + 270291817.23676443 + -958549584 + 760793947 + 945606180.0385284 + 280807775 + measure + -236566125.41718912 + 683378496 + 1640490781 + involved + peace + blue + examine + -635899286 + -333007099.8428793 + 1683987229.936021 + 219296019.62509394 + troops + distant + if + -1864023485.2937918 + sun + 1849237370 + 128045849.83271694 + 1748609.848911047 + room + break + gave + his + -1304908307 + 1322437721.4801981 + generally + 2145771752 + 1834347741.9685411 + 440700118 + -1141197491 + 1481367318.9219842 + 2135410503.5102258 + step + together + east + 40840958.96376324 + 1698417632.3784494 + mine + settle + directly + 1091367113 + locate + giving + attack + 1804268140 + -1588248849 + 1215445046.9521935 + golden + 1632705591 + -1290099877.1682155 + 473844659.50272036 + 1307063484 + -1842377738.5966125 + either + rice + 972266780 + bound + usually + 442076139.01360536 + -1481192949.9389582 + straw + he + along + congress + wire + cave + 1590904233.0431917 + men + luck + 347092253 + -675480273 + 1085153503 + 991126009.2111695 + above + mice + -1636115230.332646 + -1962535833.3336294 + these + send + slave + book + colony + newspaper + motion + hungry + 1581619994.689709 + badly + crop + audience + -1760031404 + river + -1104863082 + -774765398 + 672036093 + -939194818.721772 + section + stems + children + 1626999126 + 479527675 + 54690204 + -1898066128 + trap + eleven + -2067488442 + 668977449 + rod + three + where + sit + close + noun + crew + -2102269059 + -2013517514.1248636 + -1380429285.5416622 + order + 559931249.5497239 + appearance + rush + 2006268797 + -1895311020 + -1330710193.5758893 + took + -328530797.67126083 + -519323732 + lamp + -303119882.99912024 + 1477803844 + proud + -790580309.7819612 + -1105737646 + 478007789 + 1908004106 + 1676979041.3031301 + little + curve + -1767723743.1725335 + directly + -2036956981.7264807 + map + 1331654758 + closer +
+ -248176752.8197248 + -2093913472 + impossible + driven + why + chest + -784159742 + one + although + live + 472996110 + -1717359377.2466733 + another + traffic + butter + caught + 646361156.207032 + -1876849841.0597517 + together + poem + warm + 1456444785 + several + 203927471 + 323275427.21822524 + 1245629039 + tonight + -1907249372 + likely + -1005761199 + full + 1313353621.2629158 + through + breeze + blank + mail + doubt + -341896113 + -1790606222.9603121 + 652844564.4117706 + 1428901163 + 1086194717.5313923 + -1596905974.9275467 + 330871518 + noun + -710158893 + anywhere + 13023215 + arrangement + fruit + -856017306.1728094 + chart + -1638428240.496147 + come + -2131723435 + worker + 483209294.4959991 + 277750997 + -1669966003.3463457 + 2111632840 + 605283372.1538458 + path + wet + 1922783091.9786391 + 607219340.0953014 + compass + -303758143 + -2068861993.49971 + 2065531870.808889 + nobody + -1400967010 + 2137089408.1151786 + -1695579691.9441729 + -397905649 + about + 1427955224.0857525 + -72636788 + -734532088.6421802 + lunch + tongue + -430173912 + -352710465 + both + iron + fox + 477832601 + 110270414 + further + storm + classroom + been + 1444601933 + 529748734 + 5073692.098479748 + missing + -254871001 + combination + village + were + -451765387.5561824 + leaving + floor + yard + -772870520.3726437 + 58999793 + that + 1076086528.912683 + our + -1628989749 + length + morning + hay + 469073053 + selection + fellow + 376513375.08100486 + -1386459928.5343819 + 2084187407.9563768 + greater + cowboy + 1919205600.137405 + ago + 36573755.7281611 + 199980417.57620406 + -1554773960 + somehow + anybody + -1311590019.6607783 + -322512407.8722 + rich + probably + 55473028.35476899 + piano + necessary + rough + view + kill + -982165504.3456886 + century + -1449264662.067473 + -104161354.083879 + frame + -1290877133.567571 + far + 271768062.68651366 + 1944879412 + 995064536 + failed + 1901379856.8134437 + 459253485 + -1974568085 + -1044984106 + 425826136.75113344 + -1231387890.3633947 + nobody + 1887528909 + out + -2046988485 + short + -39978572 + -1656631856.2986884 +
320395831.20724845
+ 461866014.39406705 + 732539837.9899311 + 1511081777 + 856467340.1461115 + -1462864162 + 1139619850 + vote + change + 1877614374.6930778 + perfectly + carried + 2104390003.5764859 + -1943836264.365154 + -537014457.9961147 + 563589180.6327126 + indeed + 2015322255 + joined + kind + attempt + person + way + -1868805999.1306498 + 34664842.51134205 + explore + 820097647 + taken + exact + 1053809618 + -1471090925.1678429 +
afternoon
+ lips + block + difference + 1217115616 + -1118552445 + pattern + 1780200084 + -336142788.10599756 + off + opposite + swimming + -1946360618.8471427 + 73225745 + -236063824 + -865008001.2626011 + policeman + 1982217954.685023 + -1956835394 + -902634846.1770029 + important + feed + -881290660.7291007 + studied + 1694677748.485627 + in + -1475889673 + carried +
+ laugh + -1285646896.5173476 + follow + 1166083928.0893948 + event + 589406846 + piano + -1786182239 + fine + begun + tail + 89550531.04528522 + chance + pain + thousand + dull + form + -326463677.6481168 + -1193702189.920204 + 2020449924 + -692340732.0788283 + seems + 454677104 + -135656029 + modern + necessary + -378134691.0760803 + ice + at + 2076171657 + rough + -1146684378 + 1184529966.152565 + missing + -1546721277 + quite + 1808296647.4636393 + 355668290.3360605 + wish + -235331184.32139778 + -225424112.7204144 + -1047257243.7974234 + -13723440 + low + -24300786.587556124 + weak + tune + -303846089 + -578526251.934525 + -234915687 + home + when + 1438845957 + all + else + -1444973310 + 1552931406 + 1375281504.9337802 + -768185537 + whatever + -1031718627.7856789 + 202278533 + date + -1332160883 + -1293698138.6050756 + -573314065.5655141 + 1688957701.3240383 + 1177430130.057653 + nearest + -2067071609 + magic + were + private + scientific + -524702538.50868917 + 899414064.5203707 + word + college + -446991277 + general + meat + making + -1820588052.923399 + -2096079531.172236 + 2049741090 + signal + mouse + nearer + 2110594905.083261 + story + had + capital + 1714615766 + warn + tie + -943428955 + tried + such + 514355295.907964 + 1610989766 + saw + 1456809944.100019 + taken + handsome + -191863273.64996767 + -529239524.0475459 + 1782065519 + fifteen + 1845344961 + oldest + lot + -954119343.9500651 + 549460090.5957365 + toward + love + 330709112 + summer + between + carried + send + bend + 1059218759.3680158 + cross + -805794428 + disappear + observe + brave + 1118337886.914227 + per + type + tea + moment + community + 58151239.89634633 + diameter + wild + younger + apple + -1406908278 + serve + soap + upward + wealth + fuel + fewer + real + 1427264835.1614676 + -802263453 + dance + 1349746421 + -1122747099 + oxygen + flame + -1321531341.0221376 + wolf + 39267264 + 301218435 + -897815511.7340839 + -112712977 + 1201517037 + 286032000.1165247 + especially + wire + as + apple + 635453235.3161371 + 1141442982 + customs + flat + taught + -2050496054.5998776 + vertical + local + relationship + separate + 17416303.96604967 + evening + -195295365.1010115 + ordinary + -1758468826 + -783937259.1262009 + arrange + left + well + kids + 1224155406 + waste + weigh + 1491426650.3589733 + city + machine + 376584795.86233616 + effect + connected + 1383723113.8468504 + -1132146438.4629822 + -1326205875.6269884 + seat + identity + -1971162083 + also + disease + worried + -1196025682.8696518 + -1438212018.5755868 + 893698368.3201747 + example + wore + ahead + flame + harbor + split + solid + -1158844609 + -2048119609.9728656 + -143318868.26391912 + -1666170709 + -321052535 + 96500956 + -1525421739.524479 + trade + -876743485.7943509 + day + -1318547704.460831 + ordinary +
+ 1403059708 + student + -254868604 + band + 1215514848.2335289 + -335554923 + rain + -1096213973 + bright + baseball + vast + -1463463268 + atomic + 2035780827.886441 + -1966707480 + coming + -520326328 + -467384592 + -2139432869.6862836 + -233210511.9576416 + 215363866.14520717 + facing + move + minerals + 2050585059 + 1084821618.9729624 + -1300265008 + 1475064670.8013349 + 716791486.7481115 + dug + prevent + studying + mood + beauty + 413838666.65452504 + honor + account + 214080080.07368445 + furniture + -460002660 + mark + told + -1775353064 + newspaper + -1910290788.7202988 + -1551727114.9482381 + 1067106007 + 1655736574 + cost + image + or + give + careful + 511123045 + 846062821 + 695516286.5827963 + -1169510833 + -1769272334.1744452 + 1663809634.08225 + almost + treated + require + 1584473578 + 488896617.8980222 + 909129770.7197728 + either + -1534222858 + 2025229334.8832057 + watch + whose + simplest + student + main + 433194265 + 207662391.76564097 + parent + -1262645169 + 689508603 + thin + 863914908.1508965 + cheese + -628981056.2686045 + 1031319439.826081 + meant + most + -95461700.00509953 + -788523876.6377652 + -549070727 + thrown + -12126607 + like + -998604792 + natural + one + -1867574006 + -1554314268 + 546791979 + quickly + 928092246.4354632 + your + -1690130782 + 1590056973.845066 + -1970399102.0809252 + me + 1060532607 + 965636332 + -2083161136 + cast + scene + -1375936398 + honor + troops + simplest + 1549294935 + 1974498276.9417303 + 1388528777.9681203 + -802130850 + discussion + threw + 198416454 + 1036097028.3502891 + -981064083 + -1468933042 + 900706812 + 464753509.5626633 + 1637554165 + -475774153 + us + then + 45825891.73521495 + having + orbit + industry + -567116477.5792897 + 928641012 + worth + pie + slip + -1495821967 + -441776621 + -450165116 + maybe + baby + -1407356778.638936 + guard + + pile + few + 871445627.0288882 + 24116845 + -60257076.59929824 + -278705325.2820666 + gray + account + tide + 456770785 + 1765349886 + parent + -1827236838.764348 + thy + -152814362 + -2085484642.9236093 + object + 116336525 + picture + 1660820510.3603497 + equal + -1756543647 + 257980749.5349877 + sand + aid + push + circle + -1835274919 + -1349826686 + population + trouble + pig + -1019242473 + 522968189.3309562 + 1506356439.011745 + shake + addition + 1492712803 + -1562647727 + 1838414336.1012545 + -1840646933 + -733701959.5546577 + development + course + -1358362598 + different + tightly + somebody + -1539827717 + 1474740152.101759 + -931108612 + wealth + neck + 1365120132.4931593 + 372989321 + fight + powder + excellent + pony + run + little + leg + neck + -586135401.5160515 + 407379882 + store + -671333080 + raw + shake + -138226709 + massage + -1799824629.3536928 + information + 1447943282 + -262370375.61056852 + 1409023352 + few + fighting + fellow +
+""" + +parse_inputs = %{ + "tiny (minimal)" => xml_tiny, + "big_and_nested" => big_and_nested, + "lots_of_nesting" => lots_of_nesting, + "deep nesting (180)" => xml_deep, + "wide siblings (400 leaves)" => xml_wide, + "attr-heavy (120 attrs)" => xml_attr_heavy, + "big CDATA" => xml_big_cdata, + "long PCDATA + entities" => xml_long_pcdata, + "xmpp-like stanza" => xml_xmpp_like, + "repetitive items (80)" => xml_repetitive, + "whitespacey" => xml_whitespacey +} + +to_binary_inputs = + Enum.map( + parse_inputs, + fn {name, test} -> + {:ok, binary} = :exml.parse(test) + {name, binary} + end + ) + +IO.puts("== parse/1 ==\n") + +Benchee.run( + %{ + "parse/1 exml" => fn xml -> + {:ok, _} = :exml.parse(xml) + end + }, + inputs: parse_inputs, + time: bench_time, + warmup: bench_warmup, + memory_time: 2, + formatters: [{Benchee.Formatters.Console, extended_statistics: true}] +) + +IO.puts("== to_binary/2 ==\n") + +Benchee.run( + %{ + "to_binary/2 exml" => fn xml -> + _ = :exml.to_binary(xml) + end + }, + inputs: to_binary_inputs, + time: bench_time, + warmup: bench_warmup, + memory_time: 2, + formatters: [{Benchee.Formatters.Console, extended_statistics: true}] +) From 41edaf39dd0f31d4767b18d30d4f7c8798926abb Mon Sep 17 00:00:00 2001 From: Denys Gonchar Date: Thu, 14 May 2026 14:43:54 +0200 Subject: [PATCH 2/2] changes according to review comments --- .github/workflows/ci.yml | 10 +++++++--- bench.exs | 22 +++++++++++++++------- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 38b3325..f864ded 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -9,7 +9,7 @@ on: jobs: test: - name: test OTP ${{matrix.otp_vsn}} + name: Test OTP ${{matrix.otp_vsn}} strategy: matrix: otp_vsn: ['28', '27', '26'] @@ -55,5 +55,9 @@ jobs: otp-version: ${{ matrix.otp_vsn }} elixir-version: ${{ matrix.elixir_vsn }} rebar3-version: ${{ matrix.rebar_vsn }} - - run: rebar3 compile - - run: elixir -pa "$(rebar3 path)" bench.exs + - run: | + { + echo -e '## Benchmark Results\n\n```' + elixir bench.exs + echo '```' + } >> "$GITHUB_STEP_SUMMARY" diff --git a/bench.exs b/bench.exs index 4ec729e..f9e56b4 100644 --- a/bench.exs +++ b/bench.exs @@ -1,14 +1,22 @@ -# Usage (from the repository root, after `rebar3 compile`): -# rebar3 compile -# elixir -pa "$(rebar3 path)" bench.exs -# Optional: BENCH_TIME=3 BENCH_WARMUP=1 elixir -pa "$(rebar3 path)" bench.exs +# Usage: +# elixir bench.exs +# Optional: +# BENCH_TIME=3 BENCH_WARMUP=1 elixir bench.exs # # Requires Elixir with Hex (Mix.install fetches Benchee). -Mix.install([{:benchee, "~> 1.5"}]) +Mix.install([ + {:benchee, "~> 1.5"}, + {:exml, path: "."} +]) -{bench_time, _} = Integer.parse(System.get_env("BENCH_TIME", "5")) -{bench_warmup, _} = Integer.parse(System.get_env("BENCH_WARMUP", "2")) +bench_time = + System.get_env("BENCH_TIME", "5") + |> String.to_integer() + +bench_warmup = + System.get_env("BENCH_WARMUP", "2") + |> String.to_integer() # --- Payloads: widely varying structure (size kept moderate so default time budget finishes) ---