From 10f04405e637d2ec00c305c3e711b937a1290680 Mon Sep 17 00:00:00 2001 From: LyricLy Date: Wed, 15 Apr 2020 20:42:17 +1200 Subject: [PATCH 1/2] Add support for passing maximum tape size as a CLI option --- Cargo.lock | 260 +++++++++++++++++++++-------------------- mandel | Bin 0 -> 34816 bytes mandel.b | 145 +++++++++++++++++++++++ src/bounds.rs | 44 +++---- src/execution.rs | 64 +++++----- src/main.rs | 10 +- src/soundness_tests.rs | 6 +- 7 files changed, 342 insertions(+), 187 deletions(-) create mode 100755 mandel create mode 100644 mandel.b diff --git a/Cargo.lock b/Cargo.lock index d1e6dc31..d51cf762 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,437 +4,439 @@ name = "aho-corasick" version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66" dependencies = [ - "memchr 0.1.11", + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "aho-corasick" -version = "0.7.7" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f56c476256dc249def911d6f7580b5fc7e875895b5d7ee88f5d602208035744" dependencies = [ - "memchr 2.3.0", + "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "ansi_term" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23ac7c30002a5accbf7e8987d0632fa6de155b7c3d39d0067317a391e00a2ef6" [[package]] name = "ansi_term" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" dependencies = [ - "winapi 0.3.8", + "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "bfc" version = "1.8.0" dependencies = [ - "ansi_term 0.9.0", - "getopts", - "itertools", - "llvm-sys", - "matches", - "pretty_assertions", - "quickcheck", - "tempfile", + "ansi_term 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", + "getopts 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)", + "itertools 0.4.19 (registry+https://github.com/rust-lang/crates.io-index)", + "llvm-sys 80.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", + "pretty_assertions 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", + "quickcheck 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tempfile 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "cc" version = "1.0.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95e28fa049fda1c330bcf9d723be7663a899c4679724b34c81e9f5a326aab8cd" [[package]] name = "cfg-if" version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" [[package]] name = "ctor" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd8ce37ad4184ab2ce004c33bf6379185d3b1c95801cab51026bd271bf68eedc" dependencies = [ - "quote", - "syn", + "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "difference" version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524cbf6897b527295dff137cec09ecf3a05f4fddffd7dfcd1585403449e74198" [[package]] name = "env_logger" version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15abd780e45b3ea4f76b4e9a26ff4843258dd8a3eed2775a0e7368c2e7936c2f" dependencies = [ - "log 0.3.9", - "regex 0.1.80", + "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "fuchsia-cprng" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" [[package]] name = "getopts" version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5" dependencies = [ - "unicode-width", + "unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "itertools" version = "0.4.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a9b56eb56058f43dc66e58f40a214b2ccbc9f3df51861b63d51dec7b65bc3f" [[package]] name = "kernel32-sys" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" dependencies = [ - "winapi 0.2.8", - "winapi-build", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "lazy_static" version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.66" +version = "0.2.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d515b1f41455adea1313a4a2ac8a8a477634fbae63cc6100e3aebb207ce61558" [[package]] name = "llvm-sys" version = "80.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf2969773884a5701f0c255e2a14d48d4522a66db898ec1088cb21879a228377" dependencies = [ - "cc", - "lazy_static", - "libc", - "regex 1.3.4", - "semver", + "cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 1.3.6 (registry+https://github.com/rust-lang/crates.io-index)", + "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "log" version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b" dependencies = [ - "log 0.4.8", + "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "log" version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7" dependencies = [ - "cfg-if", + "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "matches" version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" [[package]] name = "memchr" version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20" dependencies = [ - "libc", + "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "memchr" -version = "2.3.0" +version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3197e20c7edb283f87c071ddfc7a2cca8f8e0b888c242959846a6fce03c72223" [[package]] name = "output_vt100" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53cdc5b785b7a58c5aad8216b3dfa114df64b0b06ae6e1501cef91df2fbdf8f9" dependencies = [ - "winapi 0.3.8", + "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "pretty_assertions" version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f81e1644e1b54f5a68959a29aa86cde704219254669da328ecfdf6a1f09d427" dependencies = [ - "ansi_term 0.11.0", - "ctor", - "difference", - "output_vt100", + "ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", + "ctor 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", + "difference 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "output_vt100 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "proc-macro2" -version = "1.0.8" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acb317c6ff86a4e579dfa00fc5e6cca91ecbb4e7eb2df0468805b674eb88548" dependencies = [ - "unicode-xid", + "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "quickcheck" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b333da40686cc05db13d933f8e7b450f403cfc5a4d005154d8d4a5ba9d14605" dependencies = [ - "env_logger", - "log 0.3.9", - "rand 0.3.23", + "env_logger 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.3.23 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "quote" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe" dependencies = [ - "proc-macro2", + "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "rand" version = "0.3.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64ac302d8f83c0c1974bf758f6b041c6c8ada916fbb44a609158ca8b064cc76c" dependencies = [ - "libc", - "rand 0.4.6", + "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "rand" version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293" dependencies = [ - "fuchsia-cprng", - "libc", - "rand_core 0.3.1", - "rdrand", - "winapi 0.3.8", + "fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "rand_core" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" dependencies = [ - "rand_core 0.4.2", + "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "rand_core" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" [[package]] name = "rdrand" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" dependencies = [ - "rand_core 0.3.1", + "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "redox_syscall" version = "0.1.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84" [[package]] name = "regex" version = "0.1.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f" dependencies = [ - "aho-corasick 0.5.3", - "memchr 0.1.11", - "regex-syntax 0.3.9", - "thread_local 0.2.7", - "utf8-ranges", + "aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", + "regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "regex" -version = "1.3.4" +version = "1.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "322cf97724bea3ee221b78fe25ac9c46114ebb51747ad5babd51a2fc6a8235a8" dependencies = [ - "aho-corasick 0.7.7", - "memchr 2.3.0", - "regex-syntax 0.6.14", - "thread_local 1.0.1", + "aho-corasick 0.7.10 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "regex-syntax 0.6.17 (registry+https://github.com/rust-lang/crates.io-index)", + "thread_local 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "regex-syntax" version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957" [[package]] name = "regex-syntax" -version = "0.6.14" +version = "0.6.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b28dfe3fe9badec5dbf0a79a9cccad2cfc2ab5484bdb3e44cbd1ae8b3ba2be06" [[package]] name = "semver" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" dependencies = [ - "semver-parser", + "semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "semver-parser" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "syn" -version = "1.0.14" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af6f3550d8dff9ef7dc34d384ac6f107e5d31c8f57d9f28e0081503f547ac8f5" dependencies = [ - "proc-macro2", - "quote", - "unicode-xid", + "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "tempfile" version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11ce2fe9db64b842314052e2421ac61a73ce41b898dc8e3750398b219c5fc1e0" dependencies = [ - "kernel32-sys", - "libc", - "rand 0.3.23", - "redox_syscall", - "winapi 0.2.8", + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.3.23 (registry+https://github.com/rust-lang/crates.io-index)", + "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "thread-id" version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03" dependencies = [ - "kernel32-sys", - "libc", + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "thread_local" version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5" dependencies = [ - "thread-id", + "thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "thread_local" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14" dependencies = [ - "lazy_static", + "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "unicode-width" version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "caaa9d531767d1ff2150b9332433f32a24622147e5ebb1f26409d5da67afd479" [[package]] name = "unicode-xid" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c" [[package]] name = "utf8-ranges" version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f" [[package]] name = "winapi" version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" [[package]] name = "winapi" version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6" dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", + "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "winapi-build" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" [[package]] name = "winapi-i686-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[metadata] +"checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66" +"checksum aho-corasick 0.7.10 (registry+https://github.com/rust-lang/crates.io-index)" = "8716408b8bc624ed7f65d223ddb9ac2d044c0547b6fa4b0d554f3a9540496ada" +"checksum ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" +"checksum ansi_term 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "23ac7c30002a5accbf7e8987d0632fa6de155b7c3d39d0067317a391e00a2ef6" +"checksum cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)" = "95e28fa049fda1c330bcf9d723be7663a899c4679724b34c81e9f5a326aab8cd" +"checksum cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" +"checksum ctor 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "47c5e5ac752e18207b12e16b10631ae5f7f68f8805f335f9b817ead83d9ffce1" +"checksum difference 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "524cbf6897b527295dff137cec09ecf3a05f4fddffd7dfcd1585403449e74198" +"checksum env_logger 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "15abd780e45b3ea4f76b4e9a26ff4843258dd8a3eed2775a0e7368c2e7936c2f" +"checksum fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" +"checksum getopts 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)" = "14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5" +"checksum itertools 0.4.19 (registry+https://github.com/rust-lang/crates.io-index)" = "c4a9b56eb56058f43dc66e58f40a214b2ccbc9f3df51861b63d51dec7b65bc3f" +"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" +"checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +"checksum libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)" = "99e85c08494b21a9054e7fe1374a732aeadaff3980b6990b94bfd3a70f690005" +"checksum llvm-sys 80.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "cf2969773884a5701f0c255e2a14d48d4522a66db898ec1088cb21879a228377" +"checksum log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b" +"checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7" +"checksum matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" +"checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20" +"checksum memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3728d817d99e5ac407411fa471ff9800a778d88a24685968b36824eaf4bee400" +"checksum output_vt100 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "53cdc5b785b7a58c5aad8216b3dfa114df64b0b06ae6e1501cef91df2fbdf8f9" +"checksum pretty_assertions 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3f81e1644e1b54f5a68959a29aa86cde704219254669da328ecfdf6a1f09d427" +"checksum proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)" = "df246d292ff63439fea9bc8c0a270bed0e390d5ebd4db4ba15aba81111b5abe3" +"checksum quickcheck 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0b333da40686cc05db13d933f8e7b450f403cfc5a4d005154d8d4a5ba9d14605" +"checksum quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2bdc6c187c65bca4260c9011c9e3132efe4909da44726bad24cf7572ae338d7f" +"checksum rand 0.3.23 (registry+https://github.com/rust-lang/crates.io-index)" = "64ac302d8f83c0c1974bf758f6b041c6c8ada916fbb44a609158ca8b064cc76c" +"checksum rand 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293" +"checksum rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" +"checksum rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" +"checksum rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" +"checksum redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)" = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84" +"checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f" +"checksum regex 1.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "7f6946991529684867e47d86474e3a6d0c0ab9b82d5821e314b1ede31fa3a4b3" +"checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957" +"checksum regex-syntax 0.6.17 (registry+https://github.com/rust-lang/crates.io-index)" = "7fe5bd57d1d7414c6b5ed48563a2c855d995ff777729dcd91c369ec7fea395ae" +"checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" +"checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" +"checksum syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)" = "0df0eb663f387145cab623dea85b09c2c5b4b0aef44e945d928e682fce71bb03" +"checksum tempfile 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "11ce2fe9db64b842314052e2421ac61a73ce41b898dc8e3750398b219c5fc1e0" +"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03" +"checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5" +"checksum thread_local 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14" +"checksum unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "caaa9d531767d1ff2150b9332433f32a24622147e5ebb1f26409d5da67afd479" +"checksum unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c" +"checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f" +"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" +"checksum winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6" +"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" +"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" +"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" diff --git a/mandel b/mandel new file mode 100755 index 0000000000000000000000000000000000000000..bf1f78988a733c9ad624f2d96071133d807d45c2 GIT binary patch literal 34816 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 literal 0 HcmV?d00001 diff --git a/mandel.b b/mandel.b new file mode 100644 index 00000000..e704ff48 --- /dev/null +++ b/mandel.b @@ -0,0 +1,145 @@ + A mandelbrot set fractal viewer in brainfuck written by Erik Bosman ++++++++++++++[->++>>>+++++>++>+<<<<<<]>>>>>++++++>--->>>>>>>>>>+++++++++++++++[[ +>>>>>>>>>]+[<<<<<<<<<]>>>>>>>>>-]+[>>>>>>>>[-]>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>[-]+ +<<<<<<<+++++[-[->>>>>>>>>+<<<<<<<<<]>>>>>>>>>]>>>>>>>+>>>>>>>>>>>>>>>>>>>>>>>>>> +>+<<<<<<<<<<<<<<<<<[<<<<<<<<<]>>>[-]+[>>>>>>[>>>>>>>[-]>>]<<<<<<<<<[<<<<<<<<<]>> +>>>>>[-]+<<<<<<++++[-[->>>>>>>>>+<<<<<<<<<]>>>>>>>>>]>>>>>>+<<<<<<+++++++[-[->>> +>>>>>>+<<<<<<<<<]>>>>>>>>>]>>>>>>+<<<<<<<<<<<<<<<<[<<<<<<<<<]>>>[[-]>>>>>>[>>>>> +>>[-<<<<<<+>>>>>>]<<<<<<[->>>>>>+<<+<<<+<]>>>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>> +[>>>>>>>>[-<<<<<<<+>>>>>>>]<<<<<<<[->>>>>>>+<<+<<<+<<]>>>>>>>>]<<<<<<<<<[<<<<<<< +<<]>>>>>>>[-<<<<<<<+>>>>>>>]<<<<<<<[->>>>>>>+<<+<<<<<]>>>>>>>>>+++++++++++++++[[ +>>>>>>>>>]+>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>-]+[ +>+>>>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>[>->>>>[-<<<<+>>>>]<<<<[->>>>+<<<<<[->>[ +-<<+>>]<<[->>+>>+<<<<]+>>>>>>>>>]<<<<<<<<[<<<<<<<<<]]>>>>>>>>>[>>>>>>>>>]<<<<<<< +<<[>[->>>>>>>>>+<<<<<<<<<]<<<<<<<<<<]>[->>>>>>>>>+<<<<<<<<<]<+>>>>>>>>]<<<<<<<<< +[>[-]<->>>>[-<<<<+>[<->-<<<<<<+>>>>>>]<[->+<]>>>>]<<<[->>>+<<<]<+<<<<<<<<<]>>>>> +>>>>[>+>>>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>[>->>>>>[-<<<<<+>>>>>]<<<<<[->>>>>+ +<<<<<<[->>>[-<<<+>>>]<<<[->>>+>+<<<<]+>>>>>>>>>]<<<<<<<<[<<<<<<<<<]]>>>>>>>>>[>> +>>>>>>>]<<<<<<<<<[>>[->>>>>>>>>+<<<<<<<<<]<<<<<<<<<<<]>>[->>>>>>>>>+<<<<<<<<<]<< ++>>>>>>>>]<<<<<<<<<[>[-]<->>>>[-<<<<+>[<->-<<<<<<+>>>>>>]<[->+<]>>>>]<<<[->>>+<< +<]<+<<<<<<<<<]>>>>>>>>>[>>>>[-<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>> +>>>>>>>>>>>>>>>>>>>>>>>]>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>+++++++++++++++[[>>>> +>>>>>]<<<<<<<<<-<<<<<<<<<[<<<<<<<<<]>>>>>>>>>-]+>>>>>>>>>>>>>>>>>>>>>+<<<[<<<<<< +<<<]>>>>>>>>>[>>>[-<<<->>>]+<<<[->>>->[-<<<<+>>>>]<<<<[->>>>+<<<<<<<<<<<<<[<<<<< +<<<<]>>>>[-]+>>>>>[>>>>>>>>>]>+<]]+>>>>[-<<<<->>>>]+<<<<[->>>>-<[-<<<+>>>]<<<[-> +>>+<<<<<<<<<<<<[<<<<<<<<<]>>>[-]+>>>>>>[>>>>>>>>>]>[-]+<]]+>[-<[>>>>>>>>>]<<<<<< +<<]>>>>>>>>]<<<<<<<<<[<<<<<<<<<]<<<<<<<[->+>>>-<<<<]>>>>>>>>>+++++++++++++++++++ ++++++++>>[-<<<<+>>>>]<<<<[->>>>+<<[-]<<]>>[<<<<<<<+<[-<+>>>>+<<[-]]>[-<<[->+>>>- +<<<<]>>>]>>>>>>>>>>>>>[>>[-]>[-]>[-]>>>>>]<<<<<<<<<[<<<<<<<<<]>>>[-]>>>>>>[>>>>> +[-<<<<+>>>>]<<<<[->>>>+<<<+<]>>>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>[>>[-<<<<<<<< +<+>>>>>>>>>]>>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>+++++++++++++++[[>>>>>>>>>]+>[- +]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>-]+[>+>>>>>>>>]<<< +<<<<<<[<<<<<<<<<]>>>>>>>>>[>->>>>>[-<<<<<+>>>>>]<<<<<[->>>>>+<<<<<<[->>[-<<+>>]< +<[->>+>+<<<]+>>>>>>>>>]<<<<<<<<[<<<<<<<<<]]>>>>>>>>>[>>>>>>>>>]<<<<<<<<<[>[->>>> +>>>>>+<<<<<<<<<]<<<<<<<<<<]>[->>>>>>>>>+<<<<<<<<<]<+>>>>>>>>]<<<<<<<<<[>[-]<->>> +[-<<<+>[<->-<<<<<<<+>>>>>>>]<[->+<]>>>]<<[->>+<<]<+<<<<<<<<<]>>>>>>>>>[>>>>>>[-< +<<<<+>>>>>]<<<<<[->>>>>+<<<<+<]>>>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>[>+>>>>>>>> +]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>[>->>>>>[-<<<<<+>>>>>]<<<<<[->>>>>+<<<<<<[->>[-<<+ +>>]<<[->>+>>+<<<<]+>>>>>>>>>]<<<<<<<<[<<<<<<<<<]]>>>>>>>>>[>>>>>>>>>]<<<<<<<<<[> +[->>>>>>>>>+<<<<<<<<<]<<<<<<<<<<]>[->>>>>>>>>+<<<<<<<<<]<+>>>>>>>>]<<<<<<<<<[>[- +]<->>>>[-<<<<+>[<->-<<<<<<+>>>>>>]<[->+<]>>>>]<<<[->>>+<<<]<+<<<<<<<<<]>>>>>>>>> +[>>>>[-<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> +]>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>[>>>[-<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+> +>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>++++++++ ++++++++[[>>>>>>>>>]<<<<<<<<<-<<<<<<<<<[<<<<<<<<<]>>>>>>>>>-]+[>>>>>>>>[-<<<<<<<+ +>>>>>>>]<<<<<<<[->>>>>>>+<<<<<<+<]>>>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>[>>>>>>[ +-]>>>]<<<<<<<<<[<<<<<<<<<]>>>>+>[-<-<<<<+>>>>>]>[-<<<<<<[->>>>>+<++<<<<]>>>>>[-< +<<<<+>>>>>]<->+>]<[->+<]<<<<<[->>>>>+<<<<<]>>>>>>[-]<<<<<<+>>>>[-<<<<->>>>]+<<<< +[->>>>->>>>>[>>[-<<->>]+<<[->>->[-<<<+>>>]<<<[->>>+<<<<<<<<<<<<[<<<<<<<<<]>>>[-] ++>>>>>>[>>>>>>>>>]>+<]]+>>>[-<<<->>>]+<<<[->>>-<[-<<+>>]<<[->>+<<<<<<<<<<<[<<<<< +<<<<]>>>>[-]+>>>>>[>>>>>>>>>]>[-]+<]]+>[-<[>>>>>>>>>]<<<<<<<<]>>>>>>>>]<<<<<<<<< +[<<<<<<<<<]>>>>[-<<<<+>>>>]<<<<[->>>>+>>>>>[>+>>[-<<->>]<<[->>+<<]>>>>>>>>]<<<<< +<<<+<[>[->>>>>+<<<<[->>>>-<<<<<<<<<<<<<<+>>>>>>>>>>>[->>>+<<<]<]>[->>>-<<<<<<<<< +<<<<<+>>>>>>>>>>>]<<]>[->>>>+<<<[->>>-<<<<<<<<<<<<<<+>>>>>>>>>>>]<]>[->>>+<<<]<< +<<<<<<<<<<]>>>>[-]<<<<]>>>[-<<<+>>>]<<<[->>>+>>>>>>[>+>[-<->]<[->+<]>>>>>>>>]<<< +<<<<<+<[>[->>>>>+<<<[->>>-<<<<<<<<<<<<<<+>>>>>>>>>>[->>>>+<<<<]>]<[->>>>-<<<<<<< +<<<<<<<+>>>>>>>>>>]<]>>[->>>+<<<<[->>>>-<<<<<<<<<<<<<<+>>>>>>>>>>]>]<[->>>>+<<<< +]<<<<<<<<<<<]>>>>>>+<<<<<<]]>>>>[-<<<<+>>>>]<<<<[->>>>+>>>>>[>>>>>>>>>]<<<<<<<<< +[>[->>>>>+<<<<[->>>>-<<<<<<<<<<<<<<+>>>>>>>>>>>[->>>+<<<]<]>[->>>-<<<<<<<<<<<<<< ++>>>>>>>>>>>]<<]>[->>>>+<<<[->>>-<<<<<<<<<<<<<<+>>>>>>>>>>>]<]>[->>>+<<<]<<<<<<< +<<<<<]]>[-]>>[-]>[-]>>>>>[>>[-]>[-]>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>[>>>>>[-< +<<<+>>>>]<<<<[->>>>+<<<+<]>>>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>+++++++++++++++[ +[>>>>>>>>>]+>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>-]+ +[>+>>>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>[>->>>>[-<<<<+>>>>]<<<<[->>>>+<<<<<[->> +[-<<+>>]<<[->>+>+<<<]+>>>>>>>>>]<<<<<<<<[<<<<<<<<<]]>>>>>>>>>[>>>>>>>>>]<<<<<<<< +<[>[->>>>>>>>>+<<<<<<<<<]<<<<<<<<<<]>[->>>>>>>>>+<<<<<<<<<]<+>>>>>>>>]<<<<<<<<<[ +>[-]<->>>[-<<<+>[<->-<<<<<<<+>>>>>>>]<[->+<]>>>]<<[->>+<<]<+<<<<<<<<<]>>>>>>>>>[ +>>>[-<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]> +>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>[-]>>>>+++++++++++++++[[>>>>>>>>>]<<<<<<<<<-<<<<< +<<<<[<<<<<<<<<]>>>>>>>>>-]+[>>>[-<<<->>>]+<<<[->>>->[-<<<<+>>>>]<<<<[->>>>+<<<<< +<<<<<<<<[<<<<<<<<<]>>>>[-]+>>>>>[>>>>>>>>>]>+<]]+>>>>[-<<<<->>>>]+<<<<[->>>>-<[- +<<<+>>>]<<<[->>>+<<<<<<<<<<<<[<<<<<<<<<]>>>[-]+>>>>>>[>>>>>>>>>]>[-]+<]]+>[-<[>> +>>>>>>>]<<<<<<<<]>>>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>[-<<<+>>>]<<<[->>>+>>>>>>[>+>>> +[-<<<->>>]<<<[->>>+<<<]>>>>>>>>]<<<<<<<<+<[>[->+>[-<-<<<<<<<<<<+>>>>>>>>>>>>[-<< ++>>]<]>[-<<-<<<<<<<<<<+>>>>>>>>>>>>]<<<]>>[-<+>>[-<<-<<<<<<<<<<+>>>>>>>>>>>>]<]> +[-<<+>>]<<<<<<<<<<<<<]]>>>>[-<<<<+>>>>]<<<<[->>>>+>>>>>[>+>>[-<<->>]<<[->>+<<]>> +>>>>>>]<<<<<<<<+<[>[->+>>[-<<-<<<<<<<<<<+>>>>>>>>>>>[-<+>]>]<[-<-<<<<<<<<<<+>>>> +>>>>>>>]<<]>>>[-<<+>[-<-<<<<<<<<<<+>>>>>>>>>>>]>]<[-<+>]<<<<<<<<<<<<]>>>>>+<<<<< +]>>>>>>>>>[>>>[-]>[-]>[-]>>>>]<<<<<<<<<[<<<<<<<<<]>>>[-]>[-]>>>>>[>>>>>>>[-<<<<< +<+>>>>>>]<<<<<<[->>>>>>+<<<<+<<]>>>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>+>[-<-<<<<+>>>> +>]>>[-<<<<<<<[->>>>>+<++<<<<]>>>>>[-<<<<<+>>>>>]<->+>>]<<[->>+<<]<<<<<[->>>>>+<< +<<<]+>>>>[-<<<<->>>>]+<<<<[->>>>->>>>>[>>>[-<<<->>>]+<<<[->>>-<[-<<+>>]<<[->>+<< +<<<<<<<<<[<<<<<<<<<]>>>>[-]+>>>>>[>>>>>>>>>]>+<]]+>>[-<<->>]+<<[->>->[-<<<+>>>]< +<<[->>>+<<<<<<<<<<<<[<<<<<<<<<]>>>[-]+>>>>>>[>>>>>>>>>]>[-]+<]]+>[-<[>>>>>>>>>]< +<<<<<<<]>>>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>[-<<<+>>>]<<<[->>>+>>>>>>[>+>[-<->]<[->+ +<]>>>>>>>>]<<<<<<<<+<[>[->>>>+<<[->>-<<<<<<<<<<<<<+>>>>>>>>>>[->>>+<<<]>]<[->>>- +<<<<<<<<<<<<<+>>>>>>>>>>]<]>>[->>+<<<[->>>-<<<<<<<<<<<<<+>>>>>>>>>>]>]<[->>>+<<< +]<<<<<<<<<<<]>>>>>[-]>>[-<<<<<<<+>>>>>>>]<<<<<<<[->>>>>>>+<<+<<<<<]]>>>>[-<<<<+> +>>>]<<<<[->>>>+>>>>>[>+>>[-<<->>]<<[->>+<<]>>>>>>>>]<<<<<<<<+<[>[->>>>+<<<[->>>- +<<<<<<<<<<<<<+>>>>>>>>>>>[->>+<<]<]>[->>-<<<<<<<<<<<<<+>>>>>>>>>>>]<<]>[->>>+<<[ +->>-<<<<<<<<<<<<<+>>>>>>>>>>>]<]>[->>+<<]<<<<<<<<<<<<]]>>>>[-]<<<<]>>>>[-<<<<+>> +>>]<<<<[->>>>+>[-]>>[-<<<<<<<+>>>>>>>]<<<<<<<[->>>>>>>+<<+<<<<<]>>>>>>>>>[>>>>>> +>>>]<<<<<<<<<[>[->>>>+<<<[->>>-<<<<<<<<<<<<<+>>>>>>>>>>>[->>+<<]<]>[->>-<<<<<<<< +<<<<<+>>>>>>>>>>>]<<]>[->>>+<<[->>-<<<<<<<<<<<<<+>>>>>>>>>>>]<]>[->>+<<]<<<<<<<< +<<<<]]>>>>>>>>>[>>[-]>[-]>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>[-]>[-]>>>>>[>>>>>[-<<<<+ +>>>>]<<<<[->>>>+<<<+<]>>>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>[>>>>>>[-<<<<<+>>>>> +]<<<<<[->>>>>+<<<+<<]>>>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>+++++++++++++++[[>>>> +>>>>>]+>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>-]+[>+>> +>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>[>->>>>[-<<<<+>>>>]<<<<[->>>>+<<<<<[->>[-<<+ +>>]<<[->>+>>+<<<<]+>>>>>>>>>]<<<<<<<<[<<<<<<<<<]]>>>>>>>>>[>>>>>>>>>]<<<<<<<<<[> +[->>>>>>>>>+<<<<<<<<<]<<<<<<<<<<]>[->>>>>>>>>+<<<<<<<<<]<+>>>>>>>>]<<<<<<<<<[>[- +]<->>>>[-<<<<+>[<->-<<<<<<+>>>>>>]<[->+<]>>>>]<<<[->>>+<<<]<+<<<<<<<<<]>>>>>>>>> +[>+>>>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>[>->>>>>[-<<<<<+>>>>>]<<<<<[->>>>>+<<<< +<<[->>>[-<<<+>>>]<<<[->>>+>+<<<<]+>>>>>>>>>]<<<<<<<<[<<<<<<<<<]]>>>>>>>>>[>>>>>> +>>>]<<<<<<<<<[>>[->>>>>>>>>+<<<<<<<<<]<<<<<<<<<<<]>>[->>>>>>>>>+<<<<<<<<<]<<+>>> +>>>>>]<<<<<<<<<[>[-]<->>>>[-<<<<+>[<->-<<<<<<+>>>>>>]<[->+<]>>>>]<<<[->>>+<<<]<+ +<<<<<<<<<]>>>>>>>>>[>>>>[-<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>>>>>]>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>+++++++++++++++[[>>>>>>>> +>]<<<<<<<<<-<<<<<<<<<[<<<<<<<<<]>>>>>>>>>-]+>>>>>>>>>>>>>>>>>>>>>+<<<[<<<<<<<<<] +>>>>>>>>>[>>>[-<<<->>>]+<<<[->>>->[-<<<<+>>>>]<<<<[->>>>+<<<<<<<<<<<<<[<<<<<<<<< +]>>>>[-]+>>>>>[>>>>>>>>>]>+<]]+>>>>[-<<<<->>>>]+<<<<[->>>>-<[-<<<+>>>]<<<[->>>+< +<<<<<<<<<<<[<<<<<<<<<]>>>[-]+>>>>>>[>>>>>>>>>]>[-]+<]]+>[-<[>>>>>>>>>]<<<<<<<<]> +>>>>>>>]<<<<<<<<<[<<<<<<<<<]>>->>[-<<<<+>>>>]<<<<[->>>>+<<[-]<<]>>]<<+>>>>[-<<<< +->>>>]+<<<<[->>>>-<<<<<<.>>]>>>>[-<<<<<<<.>>>>>>>]<<<[-]>[-]>[-]>[-]>[-]>[-]>>>[ +>[-]>[-]>[-]>[-]>[-]>[-]>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>[>>>>>[-]>>>>]<<<<<<<<< +[<<<<<<<<<]>+++++++++++[-[->>>>>>>>>+<<<<<<<<<]>>>>>>>>>]>>>>+>>>>>>>>>+<<<<<<<< +<<<<<<[<<<<<<<<<]>>>>>>>[-<<<<<<<+>>>>>>>]<<<<<<<[->>>>>>>+[-]>>[>>>>>>>>>]<<<<< +<<<<[>>>>>>>[-<<<<<<+>>>>>>]<<<<<<[->>>>>>+<<<<<<<[<<<<<<<<<]>>>>>>>[-]+>>>]<<<< +<<<<<<]]>>>>>>>[-<<<<<<<+>>>>>>>]<<<<<<<[->>>>>>>+>>[>+>>>>[-<<<<->>>>]<<<<[->>> +>+<<<<]>>>>>>>>]<<+<<<<<<<[>>>>>[->>+<<]<<<<<<<<<<<<<<]>>>>>>>>>[>>>>>>>>>]<<<<< +<<<<[>[-]<->>>>>>>[-<<<<<<<+>[<->-<<<+>>>]<[->+<]>>>>>>>]<<<<<<[->>>>>>+<<<<<<]< ++<<<<<<<<<]>>>>>>>-<<<<[-]+<<<]+>>>>>>>[-<<<<<<<->>>>>>>]+<<<<<<<[->>>>>>>->>[>> +>>>[->>+<<]>>>>]<<<<<<<<<[>[-]<->>>>>>>[-<<<<<<<+>[<->-<<<+>>>]<[->+<]>>>>>>>]<< +<<<<[->>>>>>+<<<<<<]<+<<<<<<<<<]>+++++[-[->>>>>>>>>+<<<<<<<<<]>>>>>>>>>]>>>>+<<< +<<[<<<<<<<<<]>>>>>>>>>[>>>>>[-<<<<<->>>>>]+<<<<<[->>>>>->>[-<<<<<<<+>>>>>>>]<<<< +<<<[->>>>>>>+<<<<<<<<<<<<<<<<[<<<<<<<<<]>>>>[-]+>>>>>[>>>>>>>>>]>+<]]+>>>>>>>[-< +<<<<<<->>>>>>>]+<<<<<<<[->>>>>>>-<<[-<<<<<+>>>>>]<<<<<[->>>>>+<<<<<<<<<<<<<<[<<< +<<<<<<]>>>[-]+>>>>>>[>>>>>>>>>]>[-]+<]]+>[-<[>>>>>>>>>]<<<<<<<<]>>>>>>>>]<<<<<<< +<<[<<<<<<<<<]>>>>[-]<<<+++++[-[->>>>>>>>>+<<<<<<<<<]>>>>>>>>>]>>>>-<<<<<[<<<<<<< +<<]]>>>]<<<<.>>>>>>>>>>[>>>>>>[-]>>>]<<<<<<<<<[<<<<<<<<<]>++++++++++[-[->>>>>>>> +>+<<<<<<<<<]>>>>>>>>>]>>>>>+>>>>>>>>>+<<<<<<<<<<<<<<<[<<<<<<<<<]>>>>>>>>[-<<<<<< +<<+>>>>>>>>]<<<<<<<<[->>>>>>>>+[-]>[>>>>>>>>>]<<<<<<<<<[>>>>>>>>[-<<<<<<<+>>>>>> +>]<<<<<<<[->>>>>>>+<<<<<<<<[<<<<<<<<<]>>>>>>>>[-]+>>]<<<<<<<<<<]]>>>>>>>>[-<<<<< +<<<+>>>>>>>>]<<<<<<<<[->>>>>>>>+>[>+>>>>>[-<<<<<->>>>>]<<<<<[->>>>>+<<<<<]>>>>>> +>>]<+<<<<<<<<[>>>>>>[->>+<<]<<<<<<<<<<<<<<<]>>>>>>>>>[>>>>>>>>>]<<<<<<<<<[>[-]<- +>>>>>>>>[-<<<<<<<<+>[<->-<<+>>]<[->+<]>>>>>>>>]<<<<<<<[->>>>>>>+<<<<<<<]<+<<<<<< +<<<]>>>>>>>>-<<<<<[-]+<<<]+>>>>>>>>[-<<<<<<<<->>>>>>>>]+<<<<<<<<[->>>>>>>>->[>>> +>>>[->>+<<]>>>]<<<<<<<<<[>[-]<->>>>>>>>[-<<<<<<<<+>[<->-<<+>>]<[->+<]>>>>>>>>]<< +<<<<<[->>>>>>>+<<<<<<<]<+<<<<<<<<<]>+++++[-[->>>>>>>>>+<<<<<<<<<]>>>>>>>>>]>>>>> ++>>>>>>>>>>>>>>>>>>>>>>>>>>>+<<<<<<[<<<<<<<<<]>>>>>>>>>[>>>>>>[-<<<<<<->>>>>>]+< +<<<<<[->>>>>>->>[-<<<<<<<<+>>>>>>>>]<<<<<<<<[->>>>>>>>+<<<<<<<<<<<<<<<<<[<<<<<<< +<<]>>>>[-]+>>>>>[>>>>>>>>>]>+<]]+>>>>>>>>[-<<<<<<<<->>>>>>>>]+<<<<<<<<[->>>>>>>> +-<<[-<<<<<<+>>>>>>]<<<<<<[->>>>>>+<<<<<<<<<<<<<<<[<<<<<<<<<]>>>[-]+>>>>>>[>>>>>> +>>>]>[-]+<]]+>[-<[>>>>>>>>>]<<<<<<<<]>>>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>[-]<<<++++ ++[-[->>>>>>>>>+<<<<<<<<<]>>>>>>>>>]>>>>>->>>>>>>>>>>>>>>>>>>>>>>>>>>-<<<<<<[<<<< +<<<<<]]>>>] diff --git a/src/bounds.rs b/src/bounds.rs index 9162bb92..342916e6 100644 --- a/src/bounds.rs +++ b/src/bounds.rs @@ -20,24 +20,24 @@ use bfir::AstNode::*; #[cfg(test)] use bfir::{parse, Position}; -// 100,000 cells, zero-indexed. +// 100,000 cells, zero-indexed. Used only for tests. pub const MAX_CELL_INDEX: usize = 99999; /// Return the highest cell index that can be reached during program /// execution. Zero-indexed. -pub fn highest_cell_index(instrs: &[AstNode]) -> usize { +pub fn highest_cell_index(instrs: &[AstNode], max_cell_index: usize) -> usize { let (highest_index, _) = overall_movement(instrs); match highest_index { SaturatingInt::Number(x) => { - if x > MAX_CELL_INDEX as i64 { + if x > max_cell_index as i64 { // TODO: generate a warning here. - MAX_CELL_INDEX + max_cell_index } else { x as usize } } - SaturatingInt::Max => MAX_CELL_INDEX, + SaturatingInt::Max => max_cell_index, } } @@ -157,22 +157,22 @@ fn movement(instr: &AstNode) -> (SaturatingInt, SaturatingInt) { #[test] fn one_cell_bounds() { let instrs = parse("+-.,").unwrap(); - assert_eq!(highest_cell_index(&instrs), 0); + assert_eq!(highest_cell_index(&instrs, MAX_CELL_INDEX), 0); } #[test] fn ptr_increment_bounds() { let instrs = parse(">").unwrap(); - assert_eq!(highest_cell_index(&instrs), 1); + assert_eq!(highest_cell_index(&instrs, MAX_CELL_INDEX), 1); } #[test] fn ptr_increment_sequence_bounds() { let instrs = parse(">>.<").unwrap(); - assert_eq!(highest_cell_index(&instrs), 2); + assert_eq!(highest_cell_index(&instrs, MAX_CELL_INDEX), 2); let instrs = parse(">><>>").unwrap(); - assert_eq!(highest_cell_index(&instrs), 3); + assert_eq!(highest_cell_index(&instrs, MAX_CELL_INDEX), 3); } #[test] @@ -181,7 +181,7 @@ fn multiple_ptr_increment_bounds() { amount: 2, position: Some(Position { start: 0, end: 0 }), }]; - assert_eq!(highest_cell_index(&instrs), 2); + assert_eq!(highest_cell_index(&instrs, MAX_CELL_INDEX), 2); } #[test] @@ -203,7 +203,7 @@ fn multiply_move_bounds() { }, ]; - assert_eq!(highest_cell_index(&instrs), 4); + assert_eq!(highest_cell_index(&instrs, MAX_CELL_INDEX), 4); } /// Multiply move uses offsets to the current pointer value. @@ -225,7 +225,7 @@ fn multiply_move_bounds_are_relative() { }, ]; - assert_eq!(highest_cell_index(&instrs), 3); + assert_eq!(highest_cell_index(&instrs, MAX_CELL_INDEX), 3); } #[test] @@ -243,16 +243,16 @@ fn multiply_move_backwards_bounds() { }, ]; - assert_eq!(highest_cell_index(&instrs), 1); + assert_eq!(highest_cell_index(&instrs, MAX_CELL_INDEX), 1); } #[test] fn unbounded_movement() { let instrs = parse("[>]").unwrap(); - assert_eq!(highest_cell_index(&instrs), MAX_CELL_INDEX); + assert_eq!(highest_cell_index(&instrs, MAX_CELL_INDEX), MAX_CELL_INDEX); let instrs = parse(">[<]").unwrap(); - assert_eq!(highest_cell_index(&instrs), 1); + assert_eq!(highest_cell_index(&instrs, MAX_CELL_INDEX), 1); } #[test] @@ -262,28 +262,28 @@ fn excessive_bounds_truncated() { amount: MAX_CELL_INDEX as isize + 1, position: Some(Position { start: 0, end: 0 }), }]; - assert_eq!(highest_cell_index(&instrs), MAX_CELL_INDEX); + assert_eq!(highest_cell_index(&instrs, MAX_CELL_INDEX), MAX_CELL_INDEX); } #[test] fn loop_with_no_net_movement() { // Max cell index 1, final cell position 0. let instrs = parse("[->+<]").unwrap(); - assert_eq!(highest_cell_index(&instrs), 1); + assert_eq!(highest_cell_index(&instrs, MAX_CELL_INDEX), 1); // Max cell index 1, final cell position 1. let instrs = parse("[->+<]>").unwrap(); - assert_eq!(highest_cell_index(&instrs), 1); + assert_eq!(highest_cell_index(&instrs, MAX_CELL_INDEX), 1); // Max cell index 2, final cell position 2. let instrs = parse("[->+<]>>").unwrap(); - assert_eq!(highest_cell_index(&instrs), 2); + assert_eq!(highest_cell_index(&instrs, MAX_CELL_INDEX), 2); } #[test] fn quickcheck_highest_cell_index_in_bounds() { fn highest_cell_index_in_bounds(instrs: Vec) -> bool { - let index = highest_cell_index(&instrs); + let index = highest_cell_index(&instrs, MAX_CELL_INDEX); index <= MAX_CELL_INDEX } quickcheck(highest_cell_index_in_bounds as fn(Vec) -> bool); @@ -296,7 +296,7 @@ fn increment_offset_bounds() { offset: 5, position: Some(Position { start: 0, end: 0 }), }]; - assert_eq!(highest_cell_index(&instrs), 5); + assert_eq!(highest_cell_index(&instrs, MAX_CELL_INDEX), 5); } #[test] @@ -313,5 +313,5 @@ fn set_offset_bounds() { position: Some(Position { start: 0, end: 0 }), }, ]; - assert_eq!(highest_cell_index(&instrs), 11); + assert_eq!(highest_cell_index(&instrs, MAX_CELL_INDEX), 11); } diff --git a/src/execution.rs b/src/execution.rs index 69c6233b..78136c83 100644 --- a/src/execution.rs +++ b/src/execution.rs @@ -34,10 +34,10 @@ pub struct ExecutionState<'a> { } impl<'a> ExecutionState<'a> { - pub fn initial(instrs: &[AstNode]) -> Self { + pub fn initial(instrs: &[AstNode], max_cell_index: usize) -> Self { ExecutionState { start_instr: None, - cells: vec![Wrapping(0); highest_cell_index(instrs) + 1], + cells: vec![Wrapping(0); highest_cell_index(instrs, max_cell_index) + 1], cell_ptr: 0, outputs: vec![], } @@ -72,8 +72,8 @@ pub fn max_steps() -> u64 { /// Compile time speculative execution of instructions. We return the /// final state of the cells, any print side effects, and the point in /// the code we reached. -pub fn execute(instrs: &[AstNode], steps: u64) -> (ExecutionState, Option) { - let mut state = ExecutionState::initial(instrs); +pub fn execute(instrs: &[AstNode], steps: u64, max_cell_index: usize) -> (ExecutionState, Option) { + let mut state = ExecutionState::initial(instrs, max_cell_index); let outcome = execute_with_state(instrs, &mut state, steps, None); // Sanity check: if we have a start instruction we @@ -273,7 +273,7 @@ pub fn execute_with_state<'a>( #[test] fn cant_evaluate_inputs() { let instrs = parse(",.").unwrap(); - let final_state = execute(&instrs, max_steps()).0; + let final_state = execute(&instrs, max_steps(), MAX_CELL_INDEX).0; assert_eq!( final_state, @@ -289,7 +289,7 @@ fn cant_evaluate_inputs() { #[test] fn increment_executed() { let instrs = parse("+").unwrap(); - let final_state = execute(&instrs, max_steps()).0; + let final_state = execute(&instrs, max_steps(), MAX_CELL_INDEX).0; assert_eq!( final_state, @@ -334,7 +334,7 @@ fn multiply_move_executed() { }, ]; - let final_state = execute(&instrs, max_steps()).0; + let final_state = execute(&instrs, max_steps(), MAX_CELL_INDEX).0; assert_eq!( final_state, ExecutionState { @@ -359,7 +359,7 @@ fn multiply_move_when_current_cell_is_zero() { position: None, }]; - let (final_state, warning) = execute(&instrs, max_steps()); + let (final_state, warning) = execute(&instrs, max_steps(), MAX_CELL_INDEX); assert_eq!(warning, None); assert_eq!( final_state, @@ -388,7 +388,7 @@ fn multiply_move_wrapping() { }, ]; - let final_state = execute(&instrs, max_steps()).0; + let final_state = execute(&instrs, max_steps(), MAX_CELL_INDEX).0; assert_eq!( final_state, ExecutionState { @@ -417,8 +417,8 @@ fn multiply_move_offset_too_high() { }, ]; - let final_state = execute(&instrs, max_steps()).0; - let mut expected_cells = vec![Wrapping(0); MAX_CELL_INDEX + 1]; + let final_state = execute(&instrs, max_steps(), MAX_CELL_INDEX).0; + let mut expected_cells = vec![Wrapping(0); MAX_CELL_INDEX]; expected_cells[0] = Wrapping(1); assert_eq!( final_state, @@ -447,7 +447,7 @@ fn multiply_move_offset_too_low() { }, ]; - let final_state = execute(&instrs, max_steps()).0; + let final_state = execute(&instrs, max_steps(), MAX_CELL_INDEX).0; assert_eq!( final_state, ExecutionState { @@ -466,7 +466,7 @@ fn set_executed() { offset: 0, position: Some(Position { start: 0, end: 0 }), }]; - let final_state = execute(&instrs, max_steps()).0; + let final_state = execute(&instrs, max_steps(), MAX_CELL_INDEX).0; assert_eq!( final_state, @@ -486,7 +486,7 @@ fn set_wraps() { offset: 0, position: Some(Position { start: 0, end: 0 }), }]; - let final_state = execute(&instrs, max_steps()).0; + let final_state = execute(&instrs, max_steps(), MAX_CELL_INDEX).0; assert_eq!( final_state, @@ -502,7 +502,7 @@ fn set_wraps() { #[test] fn decrement_executed() { let instrs = parse("-").unwrap(); - let final_state = execute(&instrs, max_steps()).0; + let final_state = execute(&instrs, max_steps(), MAX_CELL_INDEX).0; assert_eq!( final_state, @@ -529,7 +529,7 @@ fn increment_wraps() { position: Some(Position { start: 0, end: 0 }), }, ]; - let final_state = execute(&instrs, max_steps()).0; + let final_state = execute(&instrs, max_steps(), MAX_CELL_INDEX).0; assert_eq!( final_state, @@ -545,7 +545,7 @@ fn increment_wraps() { #[test] fn ptr_increment_executed() { let instrs = parse(">").unwrap(); - let final_state = execute(&instrs, max_steps()).0; + let final_state = execute(&instrs, max_steps(), MAX_CELL_INDEX).0; assert_eq!( final_state, @@ -561,7 +561,7 @@ fn ptr_increment_executed() { #[test] fn ptr_out_of_range() { let instrs = parse("<").unwrap(); - let (final_state, warning) = execute(&instrs, max_steps()); + let (final_state, warning) = execute(&instrs, max_steps(), MAX_CELL_INDEX); assert_eq!( final_state, @@ -579,7 +579,7 @@ fn ptr_out_of_range() { #[test] fn limit_to_steps_specified() { let instrs = parse("++++").unwrap(); - let final_state = execute(&instrs, 2).0; + let final_state = execute(&instrs, 2, MAX_CELL_INDEX).0; assert_eq!( final_state, @@ -595,7 +595,7 @@ fn limit_to_steps_specified() { #[test] fn write_executed() { let instrs = parse("+.").unwrap(); - let final_state = execute(&instrs, max_steps()).0; + let final_state = execute(&instrs, max_steps(), MAX_CELL_INDEX).0; assert_eq!( final_state, @@ -611,7 +611,7 @@ fn write_executed() { #[test] fn loop_executed() { let instrs = parse("++[-]").unwrap(); - let final_state = execute(&instrs, max_steps()).0; + let final_state = execute(&instrs, max_steps(), MAX_CELL_INDEX).0; assert_eq!( final_state, @@ -629,7 +629,7 @@ fn loop_executed() { #[test] fn partially_execute_up_to_runtime_value() { let instrs = parse("+[[,]]").unwrap(); - let final_state = execute(&instrs, 10).0; + let final_state = execute(&instrs, 10, MAX_CELL_INDEX).0; // Get the inner read instruction let start_instr = match instrs[1] { @@ -663,7 +663,7 @@ fn partially_execute_up_to_runtime_value() { fn execute_read_with_dummy_value() { let instrs = parse(",").unwrap(); - let mut state = ExecutionState::initial(&instrs[..]); + let mut state = ExecutionState::initial(&instrs[..], MAX_CELL_INDEX); execute_with_state(&instrs[..], &mut state, 5, Some(1)); assert_eq!(state.cells[0], Wrapping(1)); @@ -674,7 +674,7 @@ fn execute_read_with_dummy_value_nested_loop() { // Regression test. let instrs = parse("+[[,]]").unwrap(); - let mut state = ExecutionState::initial(&instrs[..]); + let mut state = ExecutionState::initial(&instrs[..], MAX_CELL_INDEX); let outcome = execute_with_state(&instrs[..], &mut state, 20, Some(0)); assert!(matches!(outcome, Outcome::Completed(_))); @@ -685,7 +685,7 @@ fn execute_read_with_dummy_value_nested_loop() { #[test] fn partially_execute_complete_toplevel_loop() { let instrs = parse("+[-],").unwrap(); - let final_state = execute(&instrs, 10).0; + let final_state = execute(&instrs, 10, MAX_CELL_INDEX).0; assert_eq!( final_state, @@ -701,7 +701,7 @@ fn partially_execute_complete_toplevel_loop() { #[test] fn partially_execute_up_to_step_limit() { let instrs = parse("+[++++]").unwrap(); - let final_state = execute(&instrs, 3).0; + let final_state = execute(&instrs, 3, MAX_CELL_INDEX).0; let start_instr = match instrs[1] { Loop { ref body, .. } => &body[2], @@ -724,7 +724,7 @@ fn loop_up_to_step_limit() { let instrs = parse("++[-]").unwrap(); // Assuming we take one step to enter the loop, we will execute // the loop body once. - let final_state = execute(&instrs, 4).0; + let final_state = execute(&instrs, 4, MAX_CELL_INDEX).0; assert_eq!( final_state, @@ -742,7 +742,7 @@ fn loop_with_read_body() { // We can't execute the whole loop, so our start instruction // should be the read. let instrs = parse("+[+,]").unwrap(); - let final_state = execute(&instrs, 4).0; + let final_state = execute(&instrs, 4, MAX_CELL_INDEX).0; // Get the inner read instruction let start_instr = match instrs[1] { @@ -770,7 +770,7 @@ fn loop_with_read_body() { #[test] fn up_to_infinite_loop_executed() { let instrs = parse("++[]").unwrap(); - let final_state = execute(&instrs, 20).0; + let final_state = execute(&instrs, 20, MAX_CELL_INDEX).0; assert_eq!( final_state, @@ -786,7 +786,7 @@ fn up_to_infinite_loop_executed() { #[test] fn up_to_nonempty_infinite_loop() { let instrs = parse("+[+]").unwrap(); - let final_state = execute(&instrs, 20).0; + let final_state = execute(&instrs, 20, MAX_CELL_INDEX).0; assert_eq!( final_state, @@ -802,7 +802,7 @@ fn up_to_nonempty_infinite_loop() { #[test] fn quickcheck_cell_ptr_in_bounds() { fn cell_ptr_in_bounds(instrs: Vec) -> bool { - let state = execute(&instrs, 100).0; + let state = execute(&instrs, 100, MAX_CELL_INDEX).0; (state.cell_ptr >= 0) && (state.cell_ptr < state.cells.len() as isize) } quickcheck(cell_ptr_in_bounds as fn(Vec) -> bool); @@ -814,5 +814,5 @@ fn arithmetic_error_nested_loops() { // mandlebrot.bf. Previously, if the first element in a loop was // another loop, we had arithmetic overflow. let instrs = parse("+[[>>>>>>>>>]+>>>>>>>>>-]").unwrap(); - execute(&instrs, max_steps()); + execute(&instrs, max_steps(), MAX_CELL_INDEX); } diff --git a/src/main.rs b/src/main.rs index 309c1331..c36ea68e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -168,10 +168,15 @@ fn compile_file(matches: &Matches) -> Result<(), String> { return Ok(()); } + let max_cell_index: usize = match matches.opt_get("max-cells") { + Ok(max) => max.unwrap_or_else(|| 999999), + Err(parse_error) => return Err(parse_error.to_string()) + }; + let (state, execution_warning) = if opt_level == "2" { - execution::execute(&instrs, execution::max_steps()) + execution::execute(&instrs, execution::max_steps(), max_cell_index) } else { - let mut init_state = execution::ExecutionState::initial(&instrs[..]); + let mut init_state = execution::ExecutionState::initial(&instrs[..], max_cell_index); // TODO: this will crash on the empty program. init_state.start_instr = Some(&instrs[0]); (init_state, None) @@ -264,6 +269,7 @@ fn main() { opts.optflag("", "dump-llvm", "print LLVM IR generated"); opts.optflag("", "dump-ir", "print BF IR generated"); + opts.optopt("m", "max-cells", "maximum 0-indexed cell index", "COUNT"); opts.optopt("O", "opt", "optimization level (0 to 2)", "LEVEL"); opts.optopt("", "llvm-opt", "LLVM optimization level (0 to 3)", "LEVEL"); opts.optopt( diff --git a/src/soundness_tests.rs b/src/soundness_tests.rs index 9b73298c..897916a1 100644 --- a/src/soundness_tests.rs +++ b/src/soundness_tests.rs @@ -5,6 +5,8 @@ use execution::Outcome::*; use execution::{execute_with_state, ExecutionState}; use peephole::*; +use bounds::MAX_CELL_INDEX; + fn transform_is_sound( instrs: Vec, transform: F, @@ -17,7 +19,7 @@ where let max_steps = 1000; // First, we execute the program given. - let mut state = ExecutionState::initial(&instrs[..]); + let mut state = ExecutionState::initial(&instrs[..], MAX_CELL_INDEX); let result = execute_with_state(&instrs[..], &mut state, max_steps, dummy_read_value); // Optimisations may change malformed programs to well-formed @@ -33,7 +35,7 @@ where // get the same number of cells. Otherwise we could get in messy // situations where a dead loop that makes us think we use // MAX_CELLS so state2 has fewer cells. - let mut state2 = ExecutionState::initial(&instrs[..]); + let mut state2 = ExecutionState::initial(&instrs[..], MAX_CELL_INDEX); let result2 = execute_with_state( &optimised_instrs[..], &mut state2, From 9113669f4ca3cfa48e43b7af80855c2653f5fc1b Mon Sep 17 00:00:00 2001 From: LyricLy Date: Wed, 15 Apr 2020 20:44:23 +1200 Subject: [PATCH 2/2] Whoops --- mandel | Bin 34816 -> 0 bytes mandel.b | 145 ------------------------------------------------------- 2 files changed, 145 deletions(-) delete mode 100755 mandel delete mode 100644 mandel.b diff --git a/mandel b/mandel deleted file mode 100755 index bf1f78988a733c9ad624f2d96071133d807d45c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34816 zcmeHQ4Rn;%nf@l33<2Xzz&J%fiMGe(P+43iRvtmze z*`1*$6Z_TlY=YVM`DbRI=l*>2 z%_QMZwAC{ohurVG_rCY%z3+YR`@Z+RcRttDdS{8xXXvNYs5AKWaHWi?R|)lhsa_D& z8?%ke@OQE?$q3-vFXCi+y$p~lpJgTaVY!MgMM$`3RC-}JMdj0>ZXrX$jrI(d$rK$L zsvm?CN$Ok2>+mZJB%BU)yj$NIRbxRosG@b~g(GhEJs~sfbMixtmo=*Y8jhcY8&q(E z3QmVZ3K2Tg_#{sF{{>ZEVOWhcKGouH4u|tzvlk0k)h~ZRc%#a%Lyh};0mpWp?^CHV z-lyst4KFpS{W?_LHEvq5{E^74n^r8IzGC^R*!t<~XGf+-X4S4+U3-h@H_K<<=6mLg znn+(7wT$5RSo|jqjKP16H@u36uwEGUll^17{*Tx5er`j~2_xjbY?Sy`#8;1y|AtZW zFB>KQ6{F;TY?S7cE)7s(r=s zPj}#xITx+7+t=EQR<Vw#;c*bW80mwYM6JTH5Yjw76q!$I|8N?2ff< zcQ>q9y{eK)i%lHFoUg>y4#n0}R={jD2?|VwdlO{+f`Z?f<*K>nugPwTBk_5<*C!TbupW~i* zT{qJvs`fB1`>CI5Pdu@qpBhj6h0IS4Ukr;FC}N<9fg%Qq7${<(h=C#o-rE>>J#@`U zEB?E3>&dd0KW7-$#vZ#QyUU8dP`*`kJbUXah|XUBD*lG1*5i%e%b1orki~QTFZfN- zG_^~7@8LH^(o_$=S^kWJEy>*vS;<$d_^U(n+FG5m0JLq(x%{aI7~HWBnX^~k2e>!7 z@%eSUSWemBGx+dv`${yemhWiV*zAGO)D6gPY*iuhKQ8j$x|YEW87nzt^&a|&)qA|u z^7UD}GjNA_+fderO2z=H{V=fK48u_+wPzDJdrZEKaVb|%lqnmlllw;!L09BBB`5Cve%04a^{RRH{2dJVu#H>f7mAy)Sr0oF)P}O)PNCt z-7&`^x0$I3$NE)H#~g1xjrV}zm=mn0@0t>h_m1DNwao0C z61Jk-0Uq?(kyhW4%+Ah9vFr2d??IIVElyR?3~ingOzgLV%w+$z554=u*z~U)YYdCX z_=AphoqCJ+T&>G+tTzxD?_m>yMr_E69!GU`zIgwcrWvm~&12De(co$6M#4DFr79+r znA2t$xg7QfWO}9UZ!`PbKdis~&U&}MtI^*V%`Sg1-e2kWo1Olk72PW^XW!ZCJ8UI) zWCl7*V(-_j?e30mLw{dX{q+YEJ@(biBKtcB{mo?+Z^Ydgrzv1Xhs>_3NM?)KSruW8 zfV>-30N6LI{B12xMF9Bp2UPh!l#eN84llp3==GCVxdqEIQQ8F7i_{IhA+xh0V6XC)j`~2*K;0D>1hy_{Ci`Vn z>|jguC05`wv;BB&=|^37m{C-l>}N^Hd`R?P(fIFGb(!s~E%r4w$k&v3HFk}x7x{h2 zpYaEXGiDaEZIEAQD=)D*O=&^XuaqDTckdvB(5mF$@<96`qR$uI8iMI6aZWNI`&O$b!kQv)k-$CFa7cbcX zHm{4EHk9}wa04FVox>R)P>d>ffrW(0$(ipf$Ol9dWv5!A$IN6uc=T0PbPK7$khqTp z(_2wK8Yo8MPeYrp%53etDzif{EW`#dJ`*H>(H1yq*0cq($OMe;Byak-Pr`RGV<=%` z$#XN8raJH`y789iZRRDRH}K-&^mgi!(%WSt(%Ts?y_H@7y_H-zy`6YF=xx(^(%X}N zMD*t2YW8)YK7Vd8__ZR?*1-Ry_o_*z`JVb5m7i+%Jy&N`A^1rp%OEF}b3HaBW+ZrQ zMc|zLxd%&fpTRkNrOTCtT%)T&N<9}HkPz{KosUm_6~jhY!Dqp&LIdi!xL5@wudrqN$T#Ix@6>8jxRfy{=c`c3oyUP$}7Y>N)`_W9)c?T*k#!Qhdk(EwDI0|$rnH`+o09ux)4L2k!-{*sW+#L^Sn zmAWi{fnZJz%MkE~TB8RLeXL=_?bD3dA;b)!#6khZXVy>@bDB?JfoXB31SzEYCs8KG zD4c4IrW(2`YDrTcA7>a1eg0ab!Dy{L-O%Nqmgos3evNIGWbe_JGXwwO9n*$R|FphR zqoK2^HnYWQ?Hn^rXC?M`=QfF(9$ zDr(Kpk8ZCW{KDaEwgHkd0AjzE<(WUgpc}Dq=^Fw0Z6DMK6a+0p6eQpk>^udFHpG65 zo@0$BNg8M`zSIEAuHyT&_4E?6AIV~la4_sPpw*w(JmUL|n-L#bRp#B%EcynyL&#gI zAbga02X_m~JDop*$Wk!hr{qwEQe&vZ~;QEtg?! z58Ag-4Z$3VO-9LFHiYg`6^QqYrAWpkdyq@~y<^h{IE{r!N>_4V{(p zTPVRjG^Kw^37yeN5|JnO-UY&U|RNdngJ+Ftn+jguy%) zhEJ=-%6=YEQfKq0H=$ImANR^3s|xDMV-wOdk?zqi?e{xPBxj}lz2=rwl7883AM(5J ze93EX?64L688}mzY~~eo3!=W2+?6Na8j_sA1H-IIWc?npl5skBi`9Z-?94}lk06JT zX19kn&#uq(*LTiFjIdHrl9eQP2K^60lAWE|QJ=`#5h%O$#(E!y@Fuhm*|5Bz7%F&w zrGVOkfz&!F(Qfh~zwt3-xBnXpH^gOC!Ec6DFfp+|wkQ4byzUEqTP}o76Iwig)fP+L z5w3I6NT5izrV(>PQrR}WxXl~NW`%qnAe3W)M7B$^oQT#prm8_gdHA)jb((^?5z5Iw zC9eEKV}V*b|5psaP&&`vlacs`1qADYL`x_k@V}$8@?D94kPH+mvP0Orzz*kt8N|1Z z6C808=>H%XA{LCzRkg4+V3@BK3{lu)zz_@VJ)q9ypkqNoQ4AzsJnI(1kcWQ^=U?S6 zUkW9D!V$EfAk&~w2T`jUt90Ed7DKxpuxfkNw5!e}>d1QLfbJOu&G(j>wEE23z z>dVeNAaf6j3Im5$@+W-(pWt_g(fSBluZ6YN2x&P&%nP+$tpv2R(s;-;!&!rFLsq*z z!da531C_f|5yo9bpOvr|0-5thpwHf8$rqg_v3geo;@iqSZQ-kjpT}NL z9ZKh0AG*7{O4AFyAe2^IeFOGs8XuIZBeEePUw%=Ul|5=_>XS1)t5a6pv?1JVSwXocy3cfh|{CkYv-*xu+i=g*ExP9JB@0Y?}dam_@JCbUd z%B>$4ZI2CYjO6bTaOLCrVOOQwIIHs3FRq{5EmZaA=JScO&gU@~G@pmrYsf){+iTR6 z=gRA@`?P;TlQ;pf1{-B_ArSAD+OgK$jn?ofXar$e5Rn0Lq7t=3iCuuPH54=<3@fxfHLuORn|$e? z=GQNzy-Z`+*Hw<}0gAa+8BOLwQI}fMBx*^gyUGy<q{@l;rp%0 zuYYqUufM{6D|Z=S@7L5OjIFV0sbD^F5}za5>mj3R1Gli(XD~bX{(|-!D0IF<_Im7zcnLf?AUVKZ>6HU* z@E|5Cn1DO6J3vDciAF28$)yQwE@Pd~jTO^}HdAWXdm+Q4gvsfsTSdP8)UJ0d$eL2^ zk(NDYO$BidD;BqUXd&cqEsSIkC5&J{M3hvGN+5qy`Nvj-DQv>ZlK?YrQfd=S7m~hR zeilmn9U{qETcZQ8)zgHTNMiy^*0mb}#yf@Jcq`bHGZ%DoB7K$HcD`t^=Kv;b`P`=n zXL`VW!e|IKDC`vtT~h*0T~&3Nt&Pb7b6dB-Pp#lq;rhf;v7=36h+S98WuUfc#vT-L z72Z+m))`0BKgp}UyP*?h!`@PrS}P2ItOwtr1pUE)nL4A%Xsdg(siv*2G&NV+2)!ks z_vqsw8qJ-L_FT`=SNM@kk&LvKdN0s_g~Ij1;G48kmMXA`nE_oU`YkeN25!&Bu&qs` z#;#6n)Mf|NhmtWy65A^gugYu;mZl!k*>rK_@3ajF)-OPJ0W{1_8pM%jH-@o!C|Ev6 zZz;%5vVJCG=WGGYL3V7@=el!!FKrwHfefn2rruFWOLw@ z<4b?bZK-@wZ9yU0^o0ITNqtvRpWv^cKdG;u2mJw89{R&by>s;Ezl8L6l=SBxh5pdT z5$F$nJsbTUCH?s?ivCdY$n@tQnf@prLEp*ka)vhkGlU97nR4GUC#szm6hO`tO1y?q zS4K}E(a?(F&<)U~zt{-&j3R&X%qigO-N2ueUw~MN#5y6Y(Oef{0Q2~SUW1Rzy!)|v z#PAB(Z@#->cX9w8W{u9L;rOMjv0Q)Y0|x#D2e7FmB{DYkI2P>nuKkzmsWAPkwUT5i z*UHnJ1S*#PkJ`8hXF-4ZzjSG^zxEt8r6-?^gM6fRPO}60}hWlInA^iJ__A;!8ph0?Cp3A@QlGw{=KX|M9J&J(mg_zjXRKfn0>s4rD8V6$q zy+127{12u=!_=!$^eZfZ(66c@C=s}r4BH@FqUfH9;!&dThYAXRDDlN4AvkiQ^&HMn zOV8pAg=uOQ{h`20!TQgJ~gu)nTnz0`A}avk+$?NvhW6sZ(!I zoXw~%P0H+Walrg=0|;bxY&e<4ex_8Yrlh{CG$quBqFs6R39mktNpZi}ElRxPCzjf+1p2NR2Qo*5xqfwUs#tNh2GeuVf2QsosHgv z`VI#S;YELe^oF8Grnl_K^u`@w?iYE);9Fc8LTrUs9;Q2x5}Lhq72AtZqi8&`JPZQU zd)&yEla8+y(($L<+PL3dC?5;ox?%D$95hCdk8vCazEVgz@CS4}8UPsMRNjOBG^*Np-2vCzh!f(NFK;g6>?cok!z?Oixz zLi_o79LsSF0shbC5AluEZExhU5F%8`J*ey={44e!%`cCGO^ZCN?>u?60;ip%V}(9@ zvk)i(S|I62Ga}4klk#vAdk$9lJ*r2PkFZuWMoIvbf9R`>gatP?;cD1ycD062*Su_Y zB0wC)EExRv$8Kd0`C)LG5sBi2%*JoRWS@EwUd1l%_#(hI`Go6-D1)vaS|Ni8@nR?FcQ3cbmaBh*bad%M_66xjGf**h<#yB5SpcHmqa*>!8Qe%(7(UA>X?IVwfF3W}exIB5Mfy=& zhItC{J4HVjPkoVqeJ$m=OJbityFSvMV{aqqBbUNn54l3^BaEysYH zpMNU2Jcg3nKM?v++4<{79$DG7qT0BQFoz(qIu!2*Ab%>}4^X@x0Mh~LE$*Wz-VXrN z=DF^pDEhnde0KgO)o*@`%RnA?8SL9{KRTIb?}2{tw%sRC+&?ScCm`+<@Ln09yutFX z44Ae9r}T$i8Sw4x*=*sJ0i)d)klOjYplhdzC+czZKQQ>EXS3PdwN$n|rs_0>ltnx5 z*#DDh)%y=euB_ap_l z8MYa*9+RibO<-ToyVdP*y70Vuycg%;<^6D>1aGx-OnSV_jR@^U)fPCB?G>KkVt-;M zkf5vJVME8{4O-|*ymx|Q9^@@@s_};%Gb7Or?>n5TqYtJy{XUTXyet9dP{VoW-%&j; zCz^$v!mm)Af4}p1@+B+Z(v}t``OfmLK&GcN;5>$5aL>OBZ%^1mMmqoQz4ZJ-=XB60=imEX)m9)# zm7Nw($+{5SYZ!h7$CDRRuPN$E51&0jUb8qs2V$K7^~(#HnJQch6!P*HP8116e}b&^2+rrPBfa6IKppl5 zd%-cpr9L2ug7faZB8utmT?lo~<0y6bdH3T5=iSY*XjwA1`H%J{cRTaMd3Rj>b}zY{ zIPadjtq5nV*M}cPD=vz8OPOrbj;dK`$f8)$`B0KPpan4?FLE zvhcinexpZeuX|c!r1o-F3C_anlst@IpLZYPz^R9WAMf>?cjtYg?k%F=S6;5aCpEp$ z0m6CIpY7F!A;jtIdvM-;H_y9k56iUkS)6yrymK#MAg?DQv2mrIyqku+iO+f5Pm}DI zr=oHG#%UJxh=cC^>Yhu!5_=cZv{exN1!b8~)6@=deNOrD-^In)0Q(f7CBaE5p04nF@(Hf!~sDYd80 z*stz;ZA~6&O&)4Y;y#|LUs>_3KI_B3jQyXe=|NqU_s&?>$D4K;ihFq7n|Bdee2N$- zVxWkDA_j^WC}N<9fwutzKKxdeZ*u8vH7MJU|5Lt}%`QZ^5Fx}NqvBXLn?U#(gtS#u z;XfbWr|&a->nnYeE5?*}Lk(j*f2*$&a5phS;~3s)Z+rm%XW{?%znaa~BQ%1QcLpck z6}s%P@(spECf)WYGe2-0qgfa0-2nHs4o2J=tbD4ZB{=bmrA@(V$KMpJ`9fJ^@aE44 ztl;eUnC4*ps^Dxhc(WO-nG>v@6P!3FSUD$HE`A5>9|8Uh%JKg07KN@6M(2JQh>ti5^qj2q;OVbrc$w$5H_w?AUkE?ED4G`ya#I-IR?>iMeYg)Zk>q{Gy*TEpx4twY`ZLU>iI z@gckr2O3__e;w{q8Oa~mcU`}phcgk!Ii%q=KhdG)AIKt}Lj2u^Sk6@quji)@Cnz}G zew|N;7ScKQ^|zk?I;>Xkh3!|-#sa($mm2Uol%9Fjp*>v0{Dkjf)1}I zf;^9g(@~G%#aq8#zjUbAHJ!h({ZA-(J&c*kAL8KP(e$P3t(4Kmj}S78hTr#;OxQ=?H9R#kaQ|v}9d1R67hbRb#s&#; zvkNI-G@K4;)AqvO+^yg?$WXUaehtSby|!4EZhyUkuiqdcbUpG*)}`MW?!|xBU)W9! eUyU^H!@PXFp{`q|$iEM7kl_ItxPLXAj`)9SgZ3)` diff --git a/mandel.b b/mandel.b deleted file mode 100644 index e704ff48..00000000 --- a/mandel.b +++ /dev/null @@ -1,145 +0,0 @@ - A mandelbrot set fractal viewer in brainfuck written by Erik Bosman -+++++++++++++[->++>>>+++++>++>+<<<<<<]>>>>>++++++>--->>>>>>>>>>+++++++++++++++[[ ->>>>>>>>>]+[<<<<<<<<<]>>>>>>>>>-]+[>>>>>>>>[-]>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>[-]+ -<<<<<<<+++++[-[->>>>>>>>>+<<<<<<<<<]>>>>>>>>>]>>>>>>>+>>>>>>>>>>>>>>>>>>>>>>>>>> ->+<<<<<<<<<<<<<<<<<[<<<<<<<<<]>>>[-]+[>>>>>>[>>>>>>>[-]>>]<<<<<<<<<[<<<<<<<<<]>> ->>>>>[-]+<<<<<<++++[-[->>>>>>>>>+<<<<<<<<<]>>>>>>>>>]>>>>>>+<<<<<<+++++++[-[->>> ->>>>>>+<<<<<<<<<]>>>>>>>>>]>>>>>>+<<<<<<<<<<<<<<<<[<<<<<<<<<]>>>[[-]>>>>>>[>>>>> ->>[-<<<<<<+>>>>>>]<<<<<<[->>>>>>+<<+<<<+<]>>>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>> -[>>>>>>>>[-<<<<<<<+>>>>>>>]<<<<<<<[->>>>>>>+<<+<<<+<<]>>>>>>>>]<<<<<<<<<[<<<<<<< -<<]>>>>>>>[-<<<<<<<+>>>>>>>]<<<<<<<[->>>>>>>+<<+<<<<<]>>>>>>>>>+++++++++++++++[[ ->>>>>>>>>]+>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>-]+[ ->+>>>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>[>->>>>[-<<<<+>>>>]<<<<[->>>>+<<<<<[->>[ --<<+>>]<<[->>+>>+<<<<]+>>>>>>>>>]<<<<<<<<[<<<<<<<<<]]>>>>>>>>>[>>>>>>>>>]<<<<<<< -<<[>[->>>>>>>>>+<<<<<<<<<]<<<<<<<<<<]>[->>>>>>>>>+<<<<<<<<<]<+>>>>>>>>]<<<<<<<<< -[>[-]<->>>>[-<<<<+>[<->-<<<<<<+>>>>>>]<[->+<]>>>>]<<<[->>>+<<<]<+<<<<<<<<<]>>>>> ->>>>[>+>>>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>[>->>>>>[-<<<<<+>>>>>]<<<<<[->>>>>+ -<<<<<<[->>>[-<<<+>>>]<<<[->>>+>+<<<<]+>>>>>>>>>]<<<<<<<<[<<<<<<<<<]]>>>>>>>>>[>> ->>>>>>>]<<<<<<<<<[>>[->>>>>>>>>+<<<<<<<<<]<<<<<<<<<<<]>>[->>>>>>>>>+<<<<<<<<<]<< -+>>>>>>>>]<<<<<<<<<[>[-]<->>>>[-<<<<+>[<->-<<<<<<+>>>>>>]<[->+<]>>>>]<<<[->>>+<< -<]<+<<<<<<<<<]>>>>>>>>>[>>>>[-<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>> ->>>>>>>>>>>>>>>>>>>>>>>]>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>+++++++++++++++[[>>>> ->>>>>]<<<<<<<<<-<<<<<<<<<[<<<<<<<<<]>>>>>>>>>-]+>>>>>>>>>>>>>>>>>>>>>+<<<[<<<<<< -<<<]>>>>>>>>>[>>>[-<<<->>>]+<<<[->>>->[-<<<<+>>>>]<<<<[->>>>+<<<<<<<<<<<<<[<<<<< -<<<<]>>>>[-]+>>>>>[>>>>>>>>>]>+<]]+>>>>[-<<<<->>>>]+<<<<[->>>>-<[-<<<+>>>]<<<[-> ->>+<<<<<<<<<<<<[<<<<<<<<<]>>>[-]+>>>>>>[>>>>>>>>>]>[-]+<]]+>[-<[>>>>>>>>>]<<<<<< -<<]>>>>>>>>]<<<<<<<<<[<<<<<<<<<]<<<<<<<[->+>>>-<<<<]>>>>>>>>>+++++++++++++++++++ -+++++++>>[-<<<<+>>>>]<<<<[->>>>+<<[-]<<]>>[<<<<<<<+<[-<+>>>>+<<[-]]>[-<<[->+>>>- -<<<<]>>>]>>>>>>>>>>>>>[>>[-]>[-]>[-]>>>>>]<<<<<<<<<[<<<<<<<<<]>>>[-]>>>>>>[>>>>> -[-<<<<+>>>>]<<<<[->>>>+<<<+<]>>>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>[>>[-<<<<<<<< -<+>>>>>>>>>]>>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>+++++++++++++++[[>>>>>>>>>]+>[- -]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>-]+[>+>>>>>>>>]<<< -<<<<<<[<<<<<<<<<]>>>>>>>>>[>->>>>>[-<<<<<+>>>>>]<<<<<[->>>>>+<<<<<<[->>[-<<+>>]< -<[->>+>+<<<]+>>>>>>>>>]<<<<<<<<[<<<<<<<<<]]>>>>>>>>>[>>>>>>>>>]<<<<<<<<<[>[->>>> ->>>>>+<<<<<<<<<]<<<<<<<<<<]>[->>>>>>>>>+<<<<<<<<<]<+>>>>>>>>]<<<<<<<<<[>[-]<->>> -[-<<<+>[<->-<<<<<<<+>>>>>>>]<[->+<]>>>]<<[->>+<<]<+<<<<<<<<<]>>>>>>>>>[>>>>>>[-< -<<<<+>>>>>]<<<<<[->>>>>+<<<<+<]>>>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>[>+>>>>>>>> -]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>[>->>>>>[-<<<<<+>>>>>]<<<<<[->>>>>+<<<<<<[->>[-<<+ ->>]<<[->>+>>+<<<<]+>>>>>>>>>]<<<<<<<<[<<<<<<<<<]]>>>>>>>>>[>>>>>>>>>]<<<<<<<<<[> -[->>>>>>>>>+<<<<<<<<<]<<<<<<<<<<]>[->>>>>>>>>+<<<<<<<<<]<+>>>>>>>>]<<<<<<<<<[>[- -]<->>>>[-<<<<+>[<->-<<<<<<+>>>>>>]<[->+<]>>>>]<<<[->>>+<<<]<+<<<<<<<<<]>>>>>>>>> -[>>>>[-<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -]>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>[>>>[-<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+> ->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>++++++++ -+++++++[[>>>>>>>>>]<<<<<<<<<-<<<<<<<<<[<<<<<<<<<]>>>>>>>>>-]+[>>>>>>>>[-<<<<<<<+ ->>>>>>>]<<<<<<<[->>>>>>>+<<<<<<+<]>>>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>[>>>>>>[ --]>>>]<<<<<<<<<[<<<<<<<<<]>>>>+>[-<-<<<<+>>>>>]>[-<<<<<<[->>>>>+<++<<<<]>>>>>[-< -<<<<+>>>>>]<->+>]<[->+<]<<<<<[->>>>>+<<<<<]>>>>>>[-]<<<<<<+>>>>[-<<<<->>>>]+<<<< -[->>>>->>>>>[>>[-<<->>]+<<[->>->[-<<<+>>>]<<<[->>>+<<<<<<<<<<<<[<<<<<<<<<]>>>[-] -+>>>>>>[>>>>>>>>>]>+<]]+>>>[-<<<->>>]+<<<[->>>-<[-<<+>>]<<[->>+<<<<<<<<<<<[<<<<< -<<<<]>>>>[-]+>>>>>[>>>>>>>>>]>[-]+<]]+>[-<[>>>>>>>>>]<<<<<<<<]>>>>>>>>]<<<<<<<<< -[<<<<<<<<<]>>>>[-<<<<+>>>>]<<<<[->>>>+>>>>>[>+>>[-<<->>]<<[->>+<<]>>>>>>>>]<<<<< -<<<+<[>[->>>>>+<<<<[->>>>-<<<<<<<<<<<<<<+>>>>>>>>>>>[->>>+<<<]<]>[->>>-<<<<<<<<< -<<<<<+>>>>>>>>>>>]<<]>[->>>>+<<<[->>>-<<<<<<<<<<<<<<+>>>>>>>>>>>]<]>[->>>+<<<]<< -<<<<<<<<<<]>>>>[-]<<<<]>>>[-<<<+>>>]<<<[->>>+>>>>>>[>+>[-<->]<[->+<]>>>>>>>>]<<< -<<<<<+<[>[->>>>>+<<<[->>>-<<<<<<<<<<<<<<+>>>>>>>>>>[->>>>+<<<<]>]<[->>>>-<<<<<<< -<<<<<<<+>>>>>>>>>>]<]>>[->>>+<<<<[->>>>-<<<<<<<<<<<<<<+>>>>>>>>>>]>]<[->>>>+<<<< -]<<<<<<<<<<<]>>>>>>+<<<<<<]]>>>>[-<<<<+>>>>]<<<<[->>>>+>>>>>[>>>>>>>>>]<<<<<<<<< -[>[->>>>>+<<<<[->>>>-<<<<<<<<<<<<<<+>>>>>>>>>>>[->>>+<<<]<]>[->>>-<<<<<<<<<<<<<< -+>>>>>>>>>>>]<<]>[->>>>+<<<[->>>-<<<<<<<<<<<<<<+>>>>>>>>>>>]<]>[->>>+<<<]<<<<<<< -<<<<<]]>[-]>>[-]>[-]>>>>>[>>[-]>[-]>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>[>>>>>[-< -<<<+>>>>]<<<<[->>>>+<<<+<]>>>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>+++++++++++++++[ -[>>>>>>>>>]+>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>-]+ -[>+>>>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>[>->>>>[-<<<<+>>>>]<<<<[->>>>+<<<<<[->> -[-<<+>>]<<[->>+>+<<<]+>>>>>>>>>]<<<<<<<<[<<<<<<<<<]]>>>>>>>>>[>>>>>>>>>]<<<<<<<< -<[>[->>>>>>>>>+<<<<<<<<<]<<<<<<<<<<]>[->>>>>>>>>+<<<<<<<<<]<+>>>>>>>>]<<<<<<<<<[ ->[-]<->>>[-<<<+>[<->-<<<<<<<+>>>>>>>]<[->+<]>>>]<<[->>+<<]<+<<<<<<<<<]>>>>>>>>>[ ->>>[-<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]> ->>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>[-]>>>>+++++++++++++++[[>>>>>>>>>]<<<<<<<<<-<<<<< -<<<<[<<<<<<<<<]>>>>>>>>>-]+[>>>[-<<<->>>]+<<<[->>>->[-<<<<+>>>>]<<<<[->>>>+<<<<< -<<<<<<<<[<<<<<<<<<]>>>>[-]+>>>>>[>>>>>>>>>]>+<]]+>>>>[-<<<<->>>>]+<<<<[->>>>-<[- -<<<+>>>]<<<[->>>+<<<<<<<<<<<<[<<<<<<<<<]>>>[-]+>>>>>>[>>>>>>>>>]>[-]+<]]+>[-<[>> ->>>>>>>]<<<<<<<<]>>>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>[-<<<+>>>]<<<[->>>+>>>>>>[>+>>> -[-<<<->>>]<<<[->>>+<<<]>>>>>>>>]<<<<<<<<+<[>[->+>[-<-<<<<<<<<<<+>>>>>>>>>>>>[-<< -+>>]<]>[-<<-<<<<<<<<<<+>>>>>>>>>>>>]<<<]>>[-<+>>[-<<-<<<<<<<<<<+>>>>>>>>>>>>]<]> -[-<<+>>]<<<<<<<<<<<<<]]>>>>[-<<<<+>>>>]<<<<[->>>>+>>>>>[>+>>[-<<->>]<<[->>+<<]>> ->>>>>>]<<<<<<<<+<[>[->+>>[-<<-<<<<<<<<<<+>>>>>>>>>>>[-<+>]>]<[-<-<<<<<<<<<<+>>>> ->>>>>>>]<<]>>>[-<<+>[-<-<<<<<<<<<<+>>>>>>>>>>>]>]<[-<+>]<<<<<<<<<<<<]>>>>>+<<<<< -]>>>>>>>>>[>>>[-]>[-]>[-]>>>>]<<<<<<<<<[<<<<<<<<<]>>>[-]>[-]>>>>>[>>>>>>>[-<<<<< -<+>>>>>>]<<<<<<[->>>>>>+<<<<+<<]>>>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>+>[-<-<<<<+>>>> ->]>>[-<<<<<<<[->>>>>+<++<<<<]>>>>>[-<<<<<+>>>>>]<->+>>]<<[->>+<<]<<<<<[->>>>>+<< -<<<]+>>>>[-<<<<->>>>]+<<<<[->>>>->>>>>[>>>[-<<<->>>]+<<<[->>>-<[-<<+>>]<<[->>+<< -<<<<<<<<<[<<<<<<<<<]>>>>[-]+>>>>>[>>>>>>>>>]>+<]]+>>[-<<->>]+<<[->>->[-<<<+>>>]< -<<[->>>+<<<<<<<<<<<<[<<<<<<<<<]>>>[-]+>>>>>>[>>>>>>>>>]>[-]+<]]+>[-<[>>>>>>>>>]< -<<<<<<<]>>>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>[-<<<+>>>]<<<[->>>+>>>>>>[>+>[-<->]<[->+ -<]>>>>>>>>]<<<<<<<<+<[>[->>>>+<<[->>-<<<<<<<<<<<<<+>>>>>>>>>>[->>>+<<<]>]<[->>>- -<<<<<<<<<<<<<+>>>>>>>>>>]<]>>[->>+<<<[->>>-<<<<<<<<<<<<<+>>>>>>>>>>]>]<[->>>+<<< -]<<<<<<<<<<<]>>>>>[-]>>[-<<<<<<<+>>>>>>>]<<<<<<<[->>>>>>>+<<+<<<<<]]>>>>[-<<<<+> ->>>]<<<<[->>>>+>>>>>[>+>>[-<<->>]<<[->>+<<]>>>>>>>>]<<<<<<<<+<[>[->>>>+<<<[->>>- -<<<<<<<<<<<<<+>>>>>>>>>>>[->>+<<]<]>[->>-<<<<<<<<<<<<<+>>>>>>>>>>>]<<]>[->>>+<<[ -->>-<<<<<<<<<<<<<+>>>>>>>>>>>]<]>[->>+<<]<<<<<<<<<<<<]]>>>>[-]<<<<]>>>>[-<<<<+>> ->>]<<<<[->>>>+>[-]>>[-<<<<<<<+>>>>>>>]<<<<<<<[->>>>>>>+<<+<<<<<]>>>>>>>>>[>>>>>> ->>>]<<<<<<<<<[>[->>>>+<<<[->>>-<<<<<<<<<<<<<+>>>>>>>>>>>[->>+<<]<]>[->>-<<<<<<<< -<<<<<+>>>>>>>>>>>]<<]>[->>>+<<[->>-<<<<<<<<<<<<<+>>>>>>>>>>>]<]>[->>+<<]<<<<<<<< -<<<<]]>>>>>>>>>[>>[-]>[-]>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>[-]>[-]>>>>>[>>>>>[-<<<<+ ->>>>]<<<<[->>>>+<<<+<]>>>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>[>>>>>>[-<<<<<+>>>>> -]<<<<<[->>>>>+<<<+<<]>>>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>+++++++++++++++[[>>>> ->>>>>]+>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>-]+[>+>> ->>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>[>->>>>[-<<<<+>>>>]<<<<[->>>>+<<<<<[->>[-<<+ ->>]<<[->>+>>+<<<<]+>>>>>>>>>]<<<<<<<<[<<<<<<<<<]]>>>>>>>>>[>>>>>>>>>]<<<<<<<<<[> -[->>>>>>>>>+<<<<<<<<<]<<<<<<<<<<]>[->>>>>>>>>+<<<<<<<<<]<+>>>>>>>>]<<<<<<<<<[>[- -]<->>>>[-<<<<+>[<->-<<<<<<+>>>>>>]<[->+<]>>>>]<<<[->>>+<<<]<+<<<<<<<<<]>>>>>>>>> -[>+>>>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>[>->>>>>[-<<<<<+>>>>>]<<<<<[->>>>>+<<<< -<<[->>>[-<<<+>>>]<<<[->>>+>+<<<<]+>>>>>>>>>]<<<<<<<<[<<<<<<<<<]]>>>>>>>>>[>>>>>> ->>>]<<<<<<<<<[>>[->>>>>>>>>+<<<<<<<<<]<<<<<<<<<<<]>>[->>>>>>>>>+<<<<<<<<<]<<+>>> ->>>>>]<<<<<<<<<[>[-]<->>>>[-<<<<+>[<->-<<<<<<+>>>>>>]<[->+<]>>>>]<<<[->>>+<<<]<+ -<<<<<<<<<]>>>>>>>>>[>>>>[-<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>> ->>>>>>>>>>>>>>>>>>>]>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>+++++++++++++++[[>>>>>>>> ->]<<<<<<<<<-<<<<<<<<<[<<<<<<<<<]>>>>>>>>>-]+>>>>>>>>>>>>>>>>>>>>>+<<<[<<<<<<<<<] ->>>>>>>>>[>>>[-<<<->>>]+<<<[->>>->[-<<<<+>>>>]<<<<[->>>>+<<<<<<<<<<<<<[<<<<<<<<< -]>>>>[-]+>>>>>[>>>>>>>>>]>+<]]+>>>>[-<<<<->>>>]+<<<<[->>>>-<[-<<<+>>>]<<<[->>>+< -<<<<<<<<<<<[<<<<<<<<<]>>>[-]+>>>>>>[>>>>>>>>>]>[-]+<]]+>[-<[>>>>>>>>>]<<<<<<<<]> ->>>>>>>]<<<<<<<<<[<<<<<<<<<]>>->>[-<<<<+>>>>]<<<<[->>>>+<<[-]<<]>>]<<+>>>>[-<<<< -->>>>]+<<<<[->>>>-<<<<<<.>>]>>>>[-<<<<<<<.>>>>>>>]<<<[-]>[-]>[-]>[-]>[-]>[-]>>>[ ->[-]>[-]>[-]>[-]>[-]>[-]>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>[>>>>>[-]>>>>]<<<<<<<<< -[<<<<<<<<<]>+++++++++++[-[->>>>>>>>>+<<<<<<<<<]>>>>>>>>>]>>>>+>>>>>>>>>+<<<<<<<< -<<<<<<[<<<<<<<<<]>>>>>>>[-<<<<<<<+>>>>>>>]<<<<<<<[->>>>>>>+[-]>>[>>>>>>>>>]<<<<< -<<<<[>>>>>>>[-<<<<<<+>>>>>>]<<<<<<[->>>>>>+<<<<<<<[<<<<<<<<<]>>>>>>>[-]+>>>]<<<< -<<<<<<]]>>>>>>>[-<<<<<<<+>>>>>>>]<<<<<<<[->>>>>>>+>>[>+>>>>[-<<<<->>>>]<<<<[->>> ->+<<<<]>>>>>>>>]<<+<<<<<<<[>>>>>[->>+<<]<<<<<<<<<<<<<<]>>>>>>>>>[>>>>>>>>>]<<<<< -<<<<[>[-]<->>>>>>>[-<<<<<<<+>[<->-<<<+>>>]<[->+<]>>>>>>>]<<<<<<[->>>>>>+<<<<<<]< -+<<<<<<<<<]>>>>>>>-<<<<[-]+<<<]+>>>>>>>[-<<<<<<<->>>>>>>]+<<<<<<<[->>>>>>>->>[>> ->>>[->>+<<]>>>>]<<<<<<<<<[>[-]<->>>>>>>[-<<<<<<<+>[<->-<<<+>>>]<[->+<]>>>>>>>]<< -<<<<[->>>>>>+<<<<<<]<+<<<<<<<<<]>+++++[-[->>>>>>>>>+<<<<<<<<<]>>>>>>>>>]>>>>+<<< -<<[<<<<<<<<<]>>>>>>>>>[>>>>>[-<<<<<->>>>>]+<<<<<[->>>>>->>[-<<<<<<<+>>>>>>>]<<<< -<<<[->>>>>>>+<<<<<<<<<<<<<<<<[<<<<<<<<<]>>>>[-]+>>>>>[>>>>>>>>>]>+<]]+>>>>>>>[-< -<<<<<<->>>>>>>]+<<<<<<<[->>>>>>>-<<[-<<<<<+>>>>>]<<<<<[->>>>>+<<<<<<<<<<<<<<[<<< -<<<<<<]>>>[-]+>>>>>>[>>>>>>>>>]>[-]+<]]+>[-<[>>>>>>>>>]<<<<<<<<]>>>>>>>>]<<<<<<< -<<[<<<<<<<<<]>>>>[-]<<<+++++[-[->>>>>>>>>+<<<<<<<<<]>>>>>>>>>]>>>>-<<<<<[<<<<<<< -<<]]>>>]<<<<.>>>>>>>>>>[>>>>>>[-]>>>]<<<<<<<<<[<<<<<<<<<]>++++++++++[-[->>>>>>>> ->+<<<<<<<<<]>>>>>>>>>]>>>>>+>>>>>>>>>+<<<<<<<<<<<<<<<[<<<<<<<<<]>>>>>>>>[-<<<<<< -<<+>>>>>>>>]<<<<<<<<[->>>>>>>>+[-]>[>>>>>>>>>]<<<<<<<<<[>>>>>>>>[-<<<<<<<+>>>>>> ->]<<<<<<<[->>>>>>>+<<<<<<<<[<<<<<<<<<]>>>>>>>>[-]+>>]<<<<<<<<<<]]>>>>>>>>[-<<<<< -<<<+>>>>>>>>]<<<<<<<<[->>>>>>>>+>[>+>>>>>[-<<<<<->>>>>]<<<<<[->>>>>+<<<<<]>>>>>> ->>]<+<<<<<<<<[>>>>>>[->>+<<]<<<<<<<<<<<<<<<]>>>>>>>>>[>>>>>>>>>]<<<<<<<<<[>[-]<- ->>>>>>>>[-<<<<<<<<+>[<->-<<+>>]<[->+<]>>>>>>>>]<<<<<<<[->>>>>>>+<<<<<<<]<+<<<<<< -<<<]>>>>>>>>-<<<<<[-]+<<<]+>>>>>>>>[-<<<<<<<<->>>>>>>>]+<<<<<<<<[->>>>>>>>->[>>> ->>>[->>+<<]>>>]<<<<<<<<<[>[-]<->>>>>>>>[-<<<<<<<<+>[<->-<<+>>]<[->+<]>>>>>>>>]<< -<<<<<[->>>>>>>+<<<<<<<]<+<<<<<<<<<]>+++++[-[->>>>>>>>>+<<<<<<<<<]>>>>>>>>>]>>>>> -+>>>>>>>>>>>>>>>>>>>>>>>>>>>+<<<<<<[<<<<<<<<<]>>>>>>>>>[>>>>>>[-<<<<<<->>>>>>]+< -<<<<<[->>>>>>->>[-<<<<<<<<+>>>>>>>>]<<<<<<<<[->>>>>>>>+<<<<<<<<<<<<<<<<<[<<<<<<< -<<]>>>>[-]+>>>>>[>>>>>>>>>]>+<]]+>>>>>>>>[-<<<<<<<<->>>>>>>>]+<<<<<<<<[->>>>>>>> --<<[-<<<<<<+>>>>>>]<<<<<<[->>>>>>+<<<<<<<<<<<<<<<[<<<<<<<<<]>>>[-]+>>>>>>[>>>>>> ->>>]>[-]+<]]+>[-<[>>>>>>>>>]<<<<<<<<]>>>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>[-]<<<++++ -+[-[->>>>>>>>>+<<<<<<<<<]>>>>>>>>>]>>>>>->>>>>>>>>>>>>>>>>>>>>>>>>>>-<<<<<<[<<<< -<<<<<]]>>>]