use std::hint::black_box; use criterion::{Criterion, criterion_group, criterion_main}; use pumpkin_data::{BlockStateId, block_properties::has_random_ticks}; const MAX_ID: u16 = 30000; #[inline(never)] fn run_all bool>(f: F) -> u32 { let mut acc = 0u32; for id in 0..=MAX_ID { if f(black_box(BlockStateId::new_or_air(id))) { acc += 1; } } black_box(acc) } fn assert_same_outputs() { for id in 0..=MAX_ID { let id = BlockStateId::new_or_air(id); let a = has_random_ticks(id); let b = has_random_ticks_matches(id); if a != b { println!("Mismatch at id={}: bitset={}, matches={}", id, a, b); println!("has_random_ticks_matches was compiled for 1.21.11!"); } } } pub fn bench_has_random_ticks(c: &mut Criterion) { assert_same_outputs(); c.bench_function("has_random_ticks/bitset", |b| { b.iter(|| run_all(has_random_ticks)) }); c.bench_function("has_random_ticks/matches", |b| { b.iter(|| run_all(has_random_ticks_matches)) }); } criterion_group!(benches, bench_has_random_ticks); criterion_main!(benches); pub fn has_random_ticks_matches(state_id: BlockStateId) -> bool { matches!( state_id.as_u16(), 8 | 9 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 278 | 279 | 306 | 307 | 334 | 335 | 362 | 363 | 390 | 391 | 418 | 419 | 446 | 447 | 474 | 475 | 502 | 503 | 530 | 531 | 558 | 559 | 2135 | 2136 | 5110 | 5111 | 5112 | 5113 | 5114 | 5115 | 5116 | 5118 | 5119 | 5120 | 5121 | 5122 | 5123 | 5124 | 5125 | 6680 | 6682 | 6718 | 6719 | 6720 | 6721 | 6722 | 6723 | 6724 | 6725 | 6726 | 6728 | 6729 | 6730 | 6731 | 6732 | 6733 | 6734 | 6735 | 6736 | 6737 | 6738 | 6739 | 6740 | 6741 | 6742 | 6743 | 6746 | 6747 | 6748 | 6749 | 6750 | 6751 | 6752 | 6753 | 6754 | 6755 | 6756 | 6757 | 6758 | 6759 | 6760 | 6761 | 6816 | 6817 | 7789 | 7790 | 7791 | 7792 | 7793 | 7794 | 7795 | 7796 | 7797 | 7798 | 7799 | 7800 | 7801 | 7802 | 7803 | 7804 | 7805 | 7806 | 7807 | 7808 | 7809 | 7810 | 7811 | 7812 | 7813 | 7814 | 7815 | 7816 | 7817 | 7818 | 7819 | 7820 | 7821 | 7822 | 7823 | 7824 | 7825 | 7826 | 7827 | 7828 | 7829 | 7830 | 7831 | 7832 | 7833 | 7834 | 7835 | 7836 | 7837 | 7838 | 7839 | 7840 | 7841 | 7842 | 7843 | 7844 | 7845 | 7846 | 7847 | 7848 | 7849 | 7850 | 7851 | 7852 | 7853 | 7854 | 7855 | 7856 | 7857 | 7858 | 7859 | 7860 | 7861 | 7862 | 7863 | 7864 | 7865 | 7866 | 7867 | 7868 | 7869 | 7870 | 7871 | 7872 | 7873 | 7874 | 7875 | 7876 | 7877 | 7878 | 7879 | 7880 | 7881 | 7882 | 7883 | 7884 | 8051 | 8052 | 8053 | 8054 | 8055 | 8056 | 8057 | 8058 | 8059 | 8060 | 8061 | 8062 | 8063 | 8064 | 8065 | 8066 | 8067 | 8068 | 8141 | 8142 | 8143 | 8144 | 8145 | 8146 | 8147 | 8148 | 8149 | 8150 | 8151 | 8152 | 8153 | 8154 | 8155 | 8156 | 8157 | 8158 | 8159 | 8160 | 8161 | 8162 | 8163 | 8164 | 8165 | 8166 | 8167 | 8168 | 8169 | 8170 | 8171 | 8172 | 8173 | 8174 | 8175 | 8176 | 8177 | 8178 | 8179 | 8180 | 8181 | 8182 | 8183 | 8184 | 8185 | 8186 | 8187 | 8188 | 8717 | 8718 | 9246 | 9247 | 9248 | 9280 | 9281 | 9282 | 9283 | 9284 | 9285 | 9286 | 9287 | 10457 | 10458 | 10459 | 10460 | 10461 | 10462 | 10463 | 10465 | 10466 | 10467 | 10468 | 10469 | 10470 | 10471 | 14504 | 14505 | 14506 | 14507 | 14508 | 14595 | 14596 | 14598 | 14600 | 14602 | 14604 | 14609 | 14610 | 14611 | 14860 | 14861 | 14862 | 14863 | 14864 | 14865 | 14866 | 14867 | 14868 | 14869 | 14870 | 14871 | 14872 | 14873 | 14874 | 14875 | 14876 | 14877 | 14878 | 14879 | 14880 | 14881 | 14882 | 14883 | 14884 | 14888 | 14889 | 14890 | 14891 | 14892 | 14893 | 14894 | 14895 | 14896 | 14897 | 14898 | 14899 | 14903 | 14904 | 14905 | 14906 | 14907 | 14908 | 14909 | 14910 | 14911 | 14912 | 14913 | 14914 | 14915 | 14916 | 14917 | 14918 | 14919 | 14920 | 14921 | 14922 | 14923 | 14924 | 14925 | 14926 | 14927 | 14928 | 14929 | 14930 | 14931 | 14932 | 14933 | 14934 | 15076 | 15077 | 15079 | 15081 | 15083 | 15085 | 15087 | 20643 | 20644 | 20645 | 20646 | 20647 | 20648 | 20649 | 20650 | 20651 | 20652 | 20653 | 20654 | 20739 | 20740 | 20741 | 20755 | 20772 | 20775 | 20776 | 20777 | 20778 | 20779 | 20780 | 20781 | 20782 | 20783 | 20784 | 20785 | 20786 | 20787 | 20788 | 20789 | 20790 | 20791 | 20792 | 20793 | 20794 | 20795 | 20796 | 20797 | 20798 | 20799 | 20802 | 20803 | 20804 | 20805 | 20806 | 20807 | 20808 | 20809 | 20810 | 20811 | 20812 | 20813 | 20814 | 20815 | 20816 | 20817 | 20818 | 20819 | 20820 | 20821 | 20822 | 20823 | 20824 | 20825 | 20826 | 23201 | 25107 | 25108 | 25109 | 25114 | 25115 | 25116 | 25118 | 25119 | 25120 | 25205 | 25206 | 25207 | 25208 | 25209 | 25210 | 25211 | 25212 | 25213 | 25214 | 25215 | 25216 | 25217 | 25218 | 25219 | 25220 | 25221 | 25222 | 25223 | 25224 | 25225 | 25226 | 25227 | 25228 | 25229 | 25230 | 25231 | 25232 | 25233 | 25234 | 25235 | 25236 | 25237 | 25238 | 25239 | 25240 | 25241 | 25242 | 25243 | 25244 | 25245 | 25246 | 25247 | 25248 | 25249 | 25250 | 25251 | 25252 | 25253 | 25254 | 25255 | 25256 | 25257 | 25258 | 25259 | 25260 | 25261 | 25262 | 25263 | 25264 | 25265 | 25266 | 25267 | 25268 | 25269 | 25270 | 25271 | 25272 | 25273 | 25274 | 25275 | 25276 | 25277 | 25278 | 25279 | 25280 | 25281 | 25282 | 25283 | 25284 | 25285 | 25286 | 25287 | 25288 | 25289 | 25290 | 25291 | 25292 | 25293 | 25294 | 25295 | 25296 | 25297 | 25298 | 25299 | 25300 | 25301 | 25302 | 25303 | 25304 | 25305 | 25306 | 25307 | 25308 | 25309 | 25310 | 25311 | 25312 | 25313 | 25314 | 25315 | 25316 | 25317 | 25318 | 25319 | 25320 | 25321 | 25322 | 25323 | 25324 | 25325 | 25326 | 25327 | 25328 | 25329 | 25330 | 25331 | 25332 | 25333 | 25334 | 25335 | 25336 | 25337 | 25338 | 25339 | 25340 | 25341 | 25342 | 25343 | 25344 | 25345 | 25346 | 25347 | 25348 | 25349 | 25350 | 25351 | 25352 | 25353 | 25354 | 25355 | 25356 | 25357 | 25358 | 25359 | 25360 | 25361 | 25362 | 25363 | 25364 | 25365 | 25366 | 25367 | 25368 | 25369 | 25370 | 25371 | 25372 | 25373 | 25374 | 25375 | 25376 | 25377 | 25378 | 25379 | 25380 | 25381 | 25382 | 25383 | 25384 | 25385 | 25386 | 25387 | 25388 | 25389 | 25390 | 25391 | 25392 | 25393 | 25394 | 25395 | 25396 | 25397 | 25398 | 25399 | 25400 | 25401 | 25402 | 25403 | 25404 | 25405 | 25406 | 25407 | 25408 | 25409 | 25410 | 25411 | 25412 | 25413 | 25414 | 25415 | 25416 | 25417 | 25418 | 25419 | 25420 | 25421 | 25422 | 25423 | 25424 | 25425 | 25426 | 25427 | 25428 | 25429 | 25430 | 25431 | 25432 | 25433 | 25434 | 25435 | 25436 | 25437 | 25438 | 25439 | 25440 | 25441 | 25442 | 25443 | 25444 | 25451 | 25452 | 25453 | 25454 | 25455 | 25456 | 25457 | 25458 | 25459 | 25460 | 25461 | 25462 | 25463 | 25464 | 25465 | 25466 | 25467 | 25468 | 25821 | 25822 | 25823 | 25824 | 25825 | 25826 | 25827 | 25828 | 25829 | 25830 | 25831 | 25832 | 25833 | 25834 | 25835 | 25836 | 25837 | 25838 | 25839 | 25840 | 25841 | 25842 | 25843 | 25844 | 25845 | 25846 | 25847 | 25848 | 25849 | 25850 | 25851 | 25852 | 25853 | 25854 | 25855 | 25856 | 25857 | 25858 | 25859 | 25860 | 25861 | 25862 | 25863 | 25864 | 25865 | 25866 | 25867 | 25868 | 25869 | 25870 | 25871 | 25872 | 25873 | 25874 | 25875 | 25876 | 25877 | 25878 | 25879 | 25880 | 25881 | 25882 | 25883 | 25884 | 25885 | 25886 | 25887 | 25888 | 25889 | 25890 | 25891 | 25892 | 25893 | 25894 | 25895 | 25896 | 25897 | 25898 | 25899 | 25900 | 25901 | 25902 | 25903 | 25904 | 25905 | 25906 | 25907 | 25908 | 25909 | 25910 | 25911 | 25912 | 25913 | 25914 | 25915 | 25916 | 25917 | 25918 | 25919 | 25920 | 25921 | 25922 | 25923 | 25924 | 25925 | 25926 | 25927 | 25928 | 25929 | 25930 | 25931 | 25932 | 25933 | 25934 | 25935 | 25936 | 25937 | 25938 | 25939 | 25940 | 25941 | 25942 | 25943 | 25944 | 25945 | 25946 | 25947 | 25948 | 26013 | 26014 | 26015 | 26016 | 26017 | 26018 | 26019 | 26020 | 26021 | 26022 | 26023 | 26024 | 26025 | 26026 | 26027 | 26028 | 26029 | 26030 | 26031 | 26032 | 26033 | 26034 | 26035 | 26036 | 26037 | 26038 | 26039 | 26040 | 26041 | 26042 | 26043 | 26044 | 26045 | 26046 | 26047 | 26048 | 26049 | 26050 | 26051 | 26052 | 26053 | 26054 | 26055 | 26056 | 26057 | 26058 | 26059 | 26060 | 26061 | 26062 | 26063 | 26064 | 26065 | 26066 | 26067 | 26068 | 26069 | 26070 | 26071 | 26072 | 26073 | 26074 | 26075 | 26076 | 26333 | 26334 | 26335 | 26336 | 26337 | 26338 | 26339 | 26340 | 26341 | 26342 | 26343 | 26344 | 26345 | 26346 | 26347 | 26348 | 26349 | 26350 | 26351 | 26352 | 26353 | 26354 | 26355 | 26356 | 26357 | 26358 | 26359 | 26360 | 26361 | 26362 | 26363 | 26364 | 26365 | 26366 | 26367 | 26368 | 26369 | 26370 | 26371 | 26372 | 26373 | 26374 | 26375 | 26376 | 26377 | 26378 | 26379 | 26380 | 26381 | 26382 | 26383 | 26384 | 26385 | 26386 | 26387 | 26388 | 26389 | 26390 | 26391 | 26392 | 26393 | 26394 | 26395 | 26396 | 26397 | 26398 | 26399 | 26400 | 26401 | 26402 | 26403 | 26404 | 26405 | 26406 | 26407 | 26408 | 26409 | 26410 | 26411 | 26412 | 26413 | 26414 | 26415 | 26416 | 26417 | 26418 | 26419 | 26420 | 26421 | 26422 | 26423 | 26424 | 26425 | 26426 | 26427 | 26428 | 26429 | 26430 | 26431 | 26432 | 26433 | 26434 | 26435 | 26436 | 26437 | 26438 | 26439 | 26440 | 26441 | 26442 | 26443 | 26444 | 26445 | 26446 | 26447 | 26448 | 26449 | 26450 | 26451 | 26452 | 26453 | 26454 | 26455 | 26456 | 26457 | 26458 | 26459 | 26460 | 26525 | 26526 | 26527 | 26528 | 26529 | 26530 | 26531 | 26532 | 26533 | 26534 | 26535 | 26536 | 26537 | 26538 | 26539 | 26540 | 26541 | 26542 | 26543 | 26544 | 26545 | 26546 | 26547 | 26548 | 26549 | 26550 | 26551 | 26552 | 26553 | 26554 | 26555 | 26556 | 26557 | 26558 | 26559 | 26560 | 26561 | 26562 | 26563 | 26564 | 26565 | 26566 | 26567 | 26568 | 26569 | 26570 | 26571 | 26572 | 26573 | 26574 | 26575 | 26576 | 26577 | 26578 | 26579 | 26580 | 26581 | 26582 | 26583 | 26584 | 26585 | 26586 | 26587 | 26588 | 26845 | 26846 | 26847 | 26848 | 26849 | 26850 | 26861 | 26862 | 26863 | 26864 | 26865 | 26866 | 26867 | 26868 | 26869 | 26870 | 26871 | 26872 | 26893 | 26894 | 26895 | 26896 | 26897 | 26898 | 26899 | 26900 | 26901 | 26902 | 26903 | 26904 | 26905 | 26906 | 26907 | 26908 | 26909 | 26910 | 26911 | 26912 | 26913 | 26914 | 26915 | 26916 | 26917 | 26918 | 26919 | 26920 | 26921 | 26922 | 26923 | 26924 | 26925 | 26926 | 26927 | 26928 | 26929 | 26930 | 26931 | 26932 | 26933 | 26934 | 26935 | 26936 | 26937 | 26938 | 26939 | 26940 | 26941 | 26942 | 26943 | 26944 | 26945 | 26946 | 26947 | 26948 | 26949 | 26950 | 26951 | 26952 | 26953 | 26954 | 26955 | 26956 | 26957 | 26958 | 26959 | 26960 | 26961 | 26962 | 26963 | 26964 | 27085 | 27086 | 27087 | 27088 | 27089 | 27090 | 27091 | 27092 | 27093 | 27094 | 27095 | 27096 | 27097 | 27098 | 27099 | 27100 | 27101 | 27102 | 27103 | 27104 | 27105 | 27106 | 27107 | 27108 | 27109 | 27110 | 27111 | 27112 | 27113 | 27114 | 27115 | 27116 | 27117 | 27118 | 27119 | 27120 | 27121 | 27122 | 27123 | 27124 | 27125 | 27126 | 27127 | 27128 | 27129 | 27130 | 27131 | 27132 | 27133 | 27134 | 27135 | 27136 | 27137 | 27138 | 27139 | 27140 | 27141 | 27142 | 27143 | 27144 | 27145 | 27146 | 27147 | 27148 | 27149 | 27150 | 27151 | 27152 | 27153 | 27154 | 27155 | 27156 | 27157 | 27158 | 27159 | 27160 | 27161 | 27162 | 27163 | 27164 | 27165 | 27166 | 27167 | 27168 | 27169 | 27170 | 27171 | 27172 | 27173 | 27174 | 27175 | 27176 | 27177 | 27178 | 27179 | 27180 | 27341 | 27342 | 27343 | 27344 | 27345 | 27346 | 27347 | 27348 | 27349 | 27350 | 27351 | 27352 | 27353 | 27354 | 27355 | 27356 | 27357 | 27358 | 27359 | 27360 | 27361 | 27362 | 27363 | 27364 | 27365 | 27366 | 27367 | 27368 | 27369 | 27370 | 27371 | 27372 | 27373 | 27374 | 27375 | 27376 | 27377 | 27378 | 27379 | 27380 | 27381 | 27382 | 27383 | 27384 | 27385 | 27386 | 27387 | 27388 | 27389 | 27390 | 27391 | 27392 | 27393 | 27394 | 27395 | 27396 | 27397 | 27398 | 27399 | 27400 | 27401 | 27402 | 27403 | 27404 | 27405 | 27406 | 27407 | 27408 | 27409 | 27410 | 27411 | 27412 | 27533 | 27534 | 27535 | 27536 | 27537 | 27538 | 27539 | 27540 | 27541 | 27542 | 27543 | 27544 | 27545 | 27546 | 27547 | 27548 | 27549 | 27550 | 27551 | 27552 | 27554 | 27555 | 27556 | 27557 | 27558 | 27559 | 27560 | 27561 | 27562 | 27563 | 27564 | 27565 | 27566 | 27567 | 27568 | 27569 | 27570 | 27571 | 27572 | 27573 | 27574 | 27575 | 27576 | 27577 | 27578 | 27579 | 27580 | 27581 | 27582 | 27583 | 27584 | 27585 | 27586 | 27587 | 27588 | 27589 | 27590 | 27591 | 27592 | 27593 | 27594 | 27595 | 27596 | 27597 | 27598 | 27599 | 27600 | 27601 | 27602 | 27603 | 29666 | 29667 | 29668 | 29669 ) }