Skip to main content

An Mindustry Logic emulator built for automated testing of compilers.

Project description

MlogArithmeticRunner

A Mindustry Logic emulator built for automated testing of compilers (like MlogEvo).

Install

pip install https://github.com/UMRnInside/MlogArithmeticRunner or

pip install mlog_arithmetic_runner

Usage

$ python3 -m mlog_arithmetic_runner --help
usage: mlog_arithmetic_runner [-h] [--limit LIMIT] [--continue-if-past-the-end] [--ipt IPT]
                              [--memory-banks MEMORY_BANKS] [--memory-cells MEMORY_CELLS]
                              [--json-indent JSON_INDENT] [--json-dump-memory-blocks]

Reads some mlog code from stdin, runs it, and generates JSON report

optional arguments:
  -h, --help            show this help message and exit
  --limit LIMIT         Max instructions/cycles allowed, something like TimeLimit
  --continue-if-past-the-end
  --ipt IPT             Instructions per tick. 2 for micro-processor, 8 for logic-processor,
                        25 for hyper-processor
  --memory-banks MEMORY_BANKS
                        Memory bank count
  --memory-cells MEMORY_CELLS
                        Memory cell count
  --json-indent JSON_INDENT
                        JSON indent, set 0 to disable
  --json-dump-memory-blocks
                        dump all memory content in JSON report

Supported Instructions

  • set
  • jump
  • end
  • All ops since Mindustry V7 Beta (beta 140), except op noise
  • read and write memory cells and banks
  • getlink to get memory blocks (cells/banks)
  • set @counter or op @counter as unconditional jumps

Features

  • @tick and @time increases with processor runs
  • Stop emulation once some instruction jumps to itself
  • (Optional, Default) Stop emulation once @counter past the end
  • (Optional) Dump memory cells and banks
  • Dump variables into JSON report

Limitations

  • Does NOT have @this yet, so do @thisx and @thisy
  • No comment in mlog code
  • (not sure)

Python Usage

from mlog_arithmetic_runner import MlogProcessor
processor = MlogProcessor(ipt=2, memory_cells=0, memory_banks=0)
code = """\
set a 90
op sin b a 0
"""
processor.assemble_code(code)
processor.run_with_limit(1000)
# When comparing 2 float-point numbers, remember there could be float precision errors.
# Use abs(a-b) < 1e-6 instead of a == b
print("a =", processor.get_variable("a"))
print("b =", processor.get_variable("b"))

JSON Report Sample

set a 1
set a 2
set b @tick
set c @time

This generates:

{
    "cycles": 4,
    "success": true,
    "reason": "",
    "variables": {
        "a": 2.0,
        "b": 1,
        "c": 0.016666666666666666
    },
    "memory_blocks": {}
}

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

mlog_arithmetic_runner-0.0.5-py3-none-any.whl (7.9 kB view details)

Uploaded Python 3

File details

Details for the file mlog_arithmetic_runner-0.0.5-py3-none-any.whl.

File metadata

File hashes

Hashes for mlog_arithmetic_runner-0.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 723320bb4cd1d0a9a73836d4277a1ed7428f902036b64383b120a20dda15da6f
MD5 d139cd8734933a5bec56a6bdd4a7160b
BLAKE2b-256 f0695279508d79a4c727f025a666a44ddbd270a411feac57d4d8b5bfa96124fa

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page