flipjump


Nameflipjump JSON
Version 1.3.0 PyPI version JSON
download
home_pagehttps://esolangs.org/wiki/FlipJump
SummaryThe single instruction language - Flip a bit, then Jump
upload_time2025-01-11 10:21:06
maintainerNone
docs_urlNone
authorTom Herman
requires_python<4.0.0,>=3.8.1
licenseBSD-2-Clause-Simplified
keywords esolang oisc assembly
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # FlipJump

[![Tests](https://github.com/tomhea/flip-jump/actions/workflows/tests.yml/badge.svg)](https://github.com/tomhea/flip-jump/actions/workflows/tests.yml)
[![PyPI - Version](https://img.shields.io/pypi/v/flipjump)](https://pypi.org/project/flipjump/)
[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
[![Checked with mypy](http://www.mypy-lang.org/static/mypy_badge.svg)](http://mypy-lang.org/)  
[![Website](https://img.shields.io/website?down_color=red&down_message=down&up_message=up&url=https%3A%2F%2Fesolangs.org%2Fwiki%2FFlipJump)](https://esolangs.org/wiki/FlipJump)
[![GitHub Discussions](https://img.shields.io/github/discussions/tomhea/flip-jump)](https://github.com/tomhea/flip-jump/discussions)
[![GitHub code size in bytes](https://img.shields.io/github/languages/code-size/tomhea/flip-jump)](https://mango-dune-07a8b7110.1.azurestaticapps.net/?repo=Tomhea%2Fflip-jump)
[![GitHub](https://img.shields.io/github/license/tomhea/flip-jump)](LICENSE)

FlipJump is the simplest programing language.  
Yet, it can do **any modern computation**. See the [C -> FlipJump compiler](https://github.com/tomhea/c2fj).

It's an Esoteric language ([FlipJump esolangs page](https://esolangs.org/wiki/FlipJump)), with just 1 operation `a;b`:  
- `not *a; jump b`

Which means - **Flip** a bit, then **Jump**.

The operation takes 2 memory addresses - it flips (inverts) the bit the first address points to, and jumps to (continue execution from) the second address. The next opcode is the two memory-addresses found right where you jumped to. You flip and jump again, and so on...  


This project includes a **Macro Assembler**, an **Interpreter**, and a **Thoroughly Tested Standard Library** for the FlipJump language.  
Additionally, it provides a [**Python Library**](https://pypi.org/project/flipjump/) that makes it easy to work with those components.

This prime numbers program was coded only with FlipJump ([source](programs/prime_sieve.fj)):
![Printing prime numbers using only FlipJump](resources/prime_sieve.gif)

## Hello, World!

<details>
  <summary>A simple hello-world flipjump program, not using the standard library:</summary>
(jump to the source code)

```c
// define macros that will be used later

// this macro exports the "IO" label to be a global label
def startup @ code_start > IO  {
    ;code_start
  IO:
    ;0              // the second op is reserved for Input/Output.
  code_start:
}

// this macro gets one parameter "bit", and uses the global label "IO".
def output_bit bit < IO {
    IO + bit;       // flipping IO+0 outputs 0; flipping IO+1 outputs 1.
}
def output_char ascii {
    // the next line will be unwinded into 8 output_bit macro-uses, each with a different parameter
    rep(8, i) output_bit ((ascii>>i)&1)
}

def end_loop @ loop_label {
    loop_label:
    ;loop_label     // a flipjump program finishes on a self loop
}


// The first lines of actual code:

    startup
    
    output_char 'H'
    output_char 'e'
    output_char 'l'
    output_char 'l'
    output_char 'o'
    output_char ','
    output_char ' '
    
    output_char 'W'
    output_char 'o'
    output_char 'r'
    output_char 'l'
    output_char 'd'
    output_char '!'
    
    end_loop

```

The source code can be found here: [hello_no-stl.fj](programs/print_tests/hello_no-stl.fj).

The FlipJump assembly supports a ```"Hello, World!"``` syntax for initializing a variable with a string value.
Look at the [hello_world.fj](programs/print_tests/hello_world.fj) program for more info.

Note that all of these macros are already implemented in the standard library (all in [runlib.fj](flipjump/stl/runlib.fj)):
- startup
- end_loop     (loop)
- output_char
- output       (for printing string consts, e.g. output "Hello, World!")
</details>


# How to install?

```shell
pip install flipjump
```

You can also install it with its extras:
- flipjump[**stats**]: support for viewing macro usage in an interactive graph.
- flipjump[**tests**]: all the testing libraries needed.
```shell
pip install flipjump[stats,tests]
```


Pycharm Extensions:
- Add <span style="color:orange">syntax highlighting</span> support for *.fj files - just import the [PycharmHighlighting.zip](ide-extensions/pycharm/PycharmHighlighting.zip) settings.
- Add a ctrl+shift+click (find fj-macro definition) functionality by using the [AutoHotKey script](ide-extensions/pycharm/fj-pycharm-def-finder.ahk).

# How to run?

Use the `fj` utility:
```shell
fj hello_world.fj
```

![Hello World in FlipJump](resources/hello.gif)

  - The --no-stl flag tells the assembler not to include the standard library. for example: `fj programs/print_tests/hello_no-stl.fj --no-stl`.
  - the `-w [WIDTH]` flag allows compiling the .fj files to a WIDTH-bits memory width. WIDTH is 64 by default.
  - You can use the `-o` flag to save the assembled file for later use too.
  - you can find all the different flags with `fj -h`.

You can also **[Test the project](tests/README.md#run-the-tests)** with the project's tests, and with your own tests.

You can also assemble and run separately:

```bash
fj --asm hello.fj -o hello_world.fjm
fj --run hello_world.fjm
```

- The first line will assemble your code.
- The second line will run your code.

You can also use the faster [cpp-based interpreter](https://github.com/tomhea/fji-cpp):

```bash
>>> fji hello.fjm -s
Hello, World!
```

### How to Debug?
Programs won't work on their first run. They just can't. That's why we support the next debugging flags.

- No debugging flags at all: Shows the last 10 executed addresses of tests that failed their run (i.e. finished not by looping). 
- `-d [PATH]`: Save debug information: Adds [very extensive label names](tests/README.md#example-label-name-youll-get-with-using---debuginfo-len), Which are like a "**macro-stack**" for each of the last executed address. (can be used with `--debug-ops-list LEN`)
- `--debug-ops-list LEN`: Shows the last _LEN_ executed addresses (instead of 10). (can be used with `-d`)
- `-b NAME [NAME ...]`: Places breakpoints at every specified label NAMEs (note that label names are long: [more information about labels](flipjump/README.md#generated-label-names)). (requires `-b`)
- `-B NAME [NAME ...]`: Places breakpoints at every label that contains one of the given NAMEs. (requires `-b`)

The debugger can single-step, read-memory, read flipjump variables (bit/hex/byte, and their vectors), continue, or skip forward a fixed number of opcodes.

# Get Started with FlipJump
- Install flipjump: `pip install flipjump`
- Write your flipjump program (use the [stl - standard library](flipjump/stl/README.md) macros).
  - For example: [print_dec.fj](programs/print_tests/print_dec.fj).
- assemble+run your program: `fj print_dec.fj`

### Example usage of the flipjump python library
```python
from pathlib import Path
from flipjump import assemble_and_run  # assemble, run_test_output, ...

fj_file_paths = [Path('path/to/main.fj'), Path('path/to/consts.fj')]
termination_statistics = assemble_and_run(fj_file_paths)
```

_You can also use the `flipjump.assemble_run_according_to_cmd_line_args(cmd_line_args=[...])`._


# Project Structure

**[flipjump](flipjump/README.md)** (assembler + interpreter source files):
  - [flipjump_cli.py](flipjump/flipjump_cli.py) - Main CLI script fot the FlipJump Assembler & Interpreter.
  - [fjm/](flipjump/fjm) - Tools for reading/writing .fjm (flip-jump-memory) files.
  - [interpreter/fjm_run.py](flipjump/interpretter/fjm_run.py) - Interpreter + debugger for assembled fj files.
  - [assembler/](flipjump/assembler) - Components for assembling FlipJump code.
    - [fj_parser.py](flipjump/assembler/fj_parser.py) - Pythonic lex/yacc parser.
    - [preprocessor.py](flipjump/assembler/preprocessor.py) - Unwinds all macros and reps (repetitions).
    - [assembler.py](flipjump/assembler/assembler.py) - Assembles macro-less fj files.
  - [more...](flipjump/README.md) - Additional project files and documentation.

**[flipjump/stl](flipjump/stl/README.md)** (standard library files - macros. The [stl readme](flipjump/stl/README.md#the-files) contains the list of all macros):
  - runlib.fj - Constants and initialization macros. Output constant strings.
  - [bit/](flipjump/stl/README.md#bit) - Directory of stl files. Macros for io/manipulating binary variables and vectors (i.e. numbers): math, logic, conditional jumps, pointers, casting, IO, ...
  - [hex/](flipjump/stl/README.md#hex) - Directory of stl files. Macros for io/manipulating hexadecimal variables and vectors (i.e. numbers): math, logic, conditional jumps, pointers, casting, IO, ...
  - mathlib.fj - Advanced math macros (mul/div).
  - casting.fj - Macros for casting between bit/hex.
  - ptrlib.fj - Macros for working with pointers, stacks, and functions.
  - conf.json - The list of the standard library files.

**[programs](programs)** (flipjump programs, used by the tests), for example:
  - [hello_world.fj](programs/print_tests/hello_world.fj) - Prints "hello world :)"
  - [calc.fj](programs/calc.fj) - A command-line calculator for 2 hex/dec numbers: ```a [+-*/%] b```.
  - [func_tests/](programs/func_tests) - Programs for testing function calls and stack operations.
  - [hexlib_tests/](programs/hexlib_tests) - Tests for all the hex macros, except the hex.pointers.
  - [quine16.fj](programs/quine16.fj) - A 16-bits quine by [lestrozi](https://github.com/lestrozi); when assembled with `-w16 -v0` - prints itself.
  - [pair_ns.fj](programs/concept_checks/pair_ns.fj) - Simulates the concept of a Class, by using a namespace.
  - [print_dec.fj](programs/print_tests/print_dec.fj) - Prints binary variables as decimals.
  - [multi_comp/](programs/multi_comp) - Simulates a big project (compilation of multiple files).

**[tests](tests/README.md)** (tests compiling+running the programs with the stl), for example:
  - compiled/ - The designated directory for the assembled tests files.
  - inout/ - Contains the .in and .out files for each test.
  - conftest.py - The pytest configuration file. The tests are being generated here.
  - test_fj.py - The base test functions for compilation and running ([how to run](tests/README.md#run-the-tests)).
  - conf.json - The tests groups+order lists.
  - [tests_tables/](tests/tests_tables)
    - test_compile_*.csv - Arguments for the compile tests ([compile test arguments format](tests/README.md#compile-csvs-format)).
    - test_run_*.csv - Arguments for the run tests ([run test arguments format](tests/README.md#run-csvs-format)).
    - xfail_*.csv - [xfail](https://docs.pytest.org/en/7.1.x/how-to/skipping.html#xfail-mark-test-functions-as-expected-to-fail) these tests.


# Read More - Extra Documentation

Take a look at the other READMEs:
* Read more about the [assembler/interpreter source files](flipjump/README.md).    
* Read more about [how to run the tests](tests/README.md).
* Read more about the [standard library](flipjump/stl/README.md).

A very extensive explanation can be found on the [GitHub wiki page](https://github.com/tomhea/flip-jump/wiki/Learn-FlipJump).

More detailed explanation and the **specifications of the FlipJump assembly** can be found on the [FlipJump esolangs page](https://esolangs.org/wiki/FlipJump).

If you are new to FlipJump and you want to learn how modern computation can be executed using FlipJump, and you want to jump onto your first flipjump code - Start by reading the [bit.xor](flipjump/stl/bit/logics.fj) and [bit.if](flipjump/stl/bit/cond_jumps.fj) macros. That's where the FlipJump magic begins.  
If you want to understand how the deep optimized hex macros work, understand how the next macros are implemented: [hex.exact_xor](flipjump/stl/hex/logics.fj), [hex.output](flipjump/stl/hex/output.fj), [hex.inc1](flipjump/stl/hex/math_basic.fj), and [hex.add](flipjump/stl/hex/math.fj) (understand the concept of the [lookup tables](https://esolangs.org/wiki/FlipJump#Lookup_Tables).

You can also write and run programs for yourself! It is just [that](README.md#how-to-run) easy :)

## Turing Complete?
As the language expects a finite memory, like most of today's programming languages, it's technically not Turing complete. 
Yet, It's very capable.

I wrote a [Brainfuck to Flipjump Compiler (bf2fj)](https://github.com/tomhea/bf2fj) to emphasize just that. 
Brainfuck is indeed Turing complete, and the compiler proves that flipjump can run any program that brainfuck runs (besides those that require an unbounded memory).

A newer project is [c2fj](https://github.com/tomhea/c2fj) - It can compile any C program to FlipJump.  
Take a look at the [prime numbers c program](https://github.com/tomhea/c2fj/blob/main/tests/programs/primes/main.c) that can be compiled to fj just as is.

# Contribute

If you want to contribute to this project, read the [CONTRIBUTING.md](CONTRIBUTING.md) file, and take a look at the [I-Want-To-Contribute Thread](https://github.com/tomhea/flip-jump/discussions/148).

Actually, just writing your own flipjump programs and sharing them with the world is a great contribution to the community :)  
Take a look at what the [standard library](flipjump/stl/README.md) offers, and see some [example programs](programs) to get you inspired!

            

Raw data

            {
    "_id": null,
    "home_page": "https://esolangs.org/wiki/FlipJump",
    "name": "flipjump",
    "maintainer": null,
    "docs_url": null,
    "requires_python": "<4.0.0,>=3.8.1",
    "maintainer_email": null,
    "keywords": "esolang, oisc, assembly",
    "author": "Tom Herman",
    "author_email": "flipjumpproject@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/64/36/b2c2ab6e4da9ac3549fbd07c7d718e3ab0e39031c21c4dc6c6eb4f664022/flipjump-1.3.0.tar.gz",
    "platform": null,
    "description": "# FlipJump\n\n[![Tests](https://github.com/tomhea/flip-jump/actions/workflows/tests.yml/badge.svg)](https://github.com/tomhea/flip-jump/actions/workflows/tests.yml)\n[![PyPI - Version](https://img.shields.io/pypi/v/flipjump)](https://pypi.org/project/flipjump/)\n[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)\n[![Checked with mypy](http://www.mypy-lang.org/static/mypy_badge.svg)](http://mypy-lang.org/)  \n[![Website](https://img.shields.io/website?down_color=red&down_message=down&up_message=up&url=https%3A%2F%2Fesolangs.org%2Fwiki%2FFlipJump)](https://esolangs.org/wiki/FlipJump)\n[![GitHub Discussions](https://img.shields.io/github/discussions/tomhea/flip-jump)](https://github.com/tomhea/flip-jump/discussions)\n[![GitHub code size in bytes](https://img.shields.io/github/languages/code-size/tomhea/flip-jump)](https://mango-dune-07a8b7110.1.azurestaticapps.net/?repo=Tomhea%2Fflip-jump)\n[![GitHub](https://img.shields.io/github/license/tomhea/flip-jump)](LICENSE)\n\nFlipJump is the simplest programing language.  \nYet, it can do **any modern computation**. See the [C -> FlipJump compiler](https://github.com/tomhea/c2fj).\n\nIt's an Esoteric language ([FlipJump esolangs page](https://esolangs.org/wiki/FlipJump)), with just 1 operation `a;b`:  \n- `not *a; jump b`\n\nWhich means - **Flip** a bit, then **Jump**.\n\nThe operation takes 2 memory addresses - it flips (inverts) the bit the first address points to, and jumps to (continue execution from) the second address. The next opcode is the two memory-addresses found right where you jumped to. You flip and jump again, and so on...  \n\n\nThis project includes a **Macro Assembler**, an **Interpreter**, and a **Thoroughly Tested Standard Library** for the FlipJump language.  \nAdditionally, it provides a [**Python Library**](https://pypi.org/project/flipjump/) that makes it easy to work with those components.\n\nThis prime numbers program was coded only with FlipJump ([source](programs/prime_sieve.fj)):\n![Printing prime numbers using only FlipJump](resources/prime_sieve.gif)\n\n## Hello, World!\n\n<details>\n  <summary>A simple hello-world flipjump program, not using the standard library:</summary>\n(jump to the source code)\n\n```c\n// define macros that will be used later\n\n// this macro exports the \"IO\" label to be a global label\ndef startup @ code_start > IO  {\n    ;code_start\n  IO:\n    ;0              // the second op is reserved for Input/Output.\n  code_start:\n}\n\n// this macro gets one parameter \"bit\", and uses the global label \"IO\".\ndef output_bit bit < IO {\n    IO + bit;       // flipping IO+0 outputs 0; flipping IO+1 outputs 1.\n}\ndef output_char ascii {\n    // the next line will be unwinded into 8 output_bit macro-uses, each with a different parameter\n    rep(8, i) output_bit ((ascii>>i)&1)\n}\n\ndef end_loop @ loop_label {\n    loop_label:\n    ;loop_label     // a flipjump program finishes on a self loop\n}\n\n\n// The first lines of actual code:\n\n    startup\n    \n    output_char 'H'\n    output_char 'e'\n    output_char 'l'\n    output_char 'l'\n    output_char 'o'\n    output_char ','\n    output_char ' '\n    \n    output_char 'W'\n    output_char 'o'\n    output_char 'r'\n    output_char 'l'\n    output_char 'd'\n    output_char '!'\n    \n    end_loop\n\n```\n\nThe source code can be found here: [hello_no-stl.fj](programs/print_tests/hello_no-stl.fj).\n\nThe FlipJump assembly supports a ```\"Hello, World!\"``` syntax for initializing a variable with a string value.\nLook at the [hello_world.fj](programs/print_tests/hello_world.fj) program for more info.\n\nNote that all of these macros are already implemented in the standard library (all in [runlib.fj](flipjump/stl/runlib.fj)):\n- startup\n- end_loop     (loop)\n- output_char\n- output       (for printing string consts, e.g. output \"Hello, World!\")\n</details>\n\n\n# How to install?\n\n```shell\npip install flipjump\n```\n\nYou can also install it with its extras:\n- flipjump[**stats**]: support for viewing macro usage in an interactive graph.\n- flipjump[**tests**]: all the testing libraries needed.\n```shell\npip install flipjump[stats,tests]\n```\n\n\nPycharm Extensions:\n- Add <span style=\"color:orange\">syntax highlighting</span> support for *.fj files - just import the [PycharmHighlighting.zip](ide-extensions/pycharm/PycharmHighlighting.zip) settings.\n- Add a ctrl+shift+click (find fj-macro definition) functionality by using the [AutoHotKey script](ide-extensions/pycharm/fj-pycharm-def-finder.ahk).\n\n# How to run?\n\nUse the `fj` utility:\n```shell\nfj hello_world.fj\n```\n\n![Hello World in FlipJump](resources/hello.gif)\n\n  - The --no-stl flag tells the assembler not to include the standard library. for example: `fj programs/print_tests/hello_no-stl.fj --no-stl`.\n  - the `-w [WIDTH]` flag allows compiling the .fj files to a WIDTH-bits memory width. WIDTH is 64 by default.\n  - You can use the `-o` flag to save the assembled file for later use too.\n  - you can find all the different flags with `fj -h`.\n\nYou can also **[Test the project](tests/README.md#run-the-tests)** with the project's tests, and with your own tests.\n\nYou can also assemble and run separately:\n\n```bash\nfj --asm hello.fj -o hello_world.fjm\nfj --run hello_world.fjm\n```\n\n- The first line will assemble your code.\n- The second line will run your code.\n\nYou can also use the faster [cpp-based interpreter](https://github.com/tomhea/fji-cpp):\n\n```bash\n>>> fji hello.fjm -s\nHello, World!\n```\n\n### How to Debug?\nPrograms won't work on their first run. They just can't. That's why we support the next debugging flags.\n\n- No debugging flags at all: Shows the last 10 executed addresses of tests that failed their run (i.e. finished not by looping). \n- `-d [PATH]`: Save debug information: Adds [very extensive label names](tests/README.md#example-label-name-youll-get-with-using---debuginfo-len), Which are like a \"**macro-stack**\" for each of the last executed address. (can be used with `--debug-ops-list LEN`)\n- `--debug-ops-list LEN`: Shows the last _LEN_ executed addresses (instead of 10). (can be used with `-d`)\n- `-b NAME [NAME ...]`: Places breakpoints at every specified label NAMEs (note that label names are long: [more information about labels](flipjump/README.md#generated-label-names)). (requires `-b`)\n- `-B NAME [NAME ...]`: Places breakpoints at every label that contains one of the given NAMEs. (requires `-b`)\n\nThe debugger can single-step, read-memory, read flipjump variables (bit/hex/byte, and their vectors), continue, or skip forward a fixed number of opcodes.\n\n# Get Started with FlipJump\n- Install flipjump: `pip install flipjump`\n- Write your flipjump program (use the [stl - standard library](flipjump/stl/README.md) macros).\n  - For example: [print_dec.fj](programs/print_tests/print_dec.fj).\n- assemble+run your program: `fj print_dec.fj`\n\n### Example usage of the flipjump python library\n```python\nfrom pathlib import Path\nfrom flipjump import assemble_and_run  # assemble, run_test_output, ...\n\nfj_file_paths = [Path('path/to/main.fj'), Path('path/to/consts.fj')]\ntermination_statistics = assemble_and_run(fj_file_paths)\n```\n\n_You can also use the `flipjump.assemble_run_according_to_cmd_line_args(cmd_line_args=[...])`._\n\n\n# Project Structure\n\n**[flipjump](flipjump/README.md)** (assembler + interpreter source files):\n  - [flipjump_cli.py](flipjump/flipjump_cli.py) - Main CLI script fot the FlipJump Assembler & Interpreter.\n  - [fjm/](flipjump/fjm) - Tools for reading/writing .fjm (flip-jump-memory) files.\n  - [interpreter/fjm_run.py](flipjump/interpretter/fjm_run.py) - Interpreter + debugger for assembled fj files.\n  - [assembler/](flipjump/assembler) - Components for assembling FlipJump code.\n    - [fj_parser.py](flipjump/assembler/fj_parser.py) - Pythonic lex/yacc parser.\n    - [preprocessor.py](flipjump/assembler/preprocessor.py) - Unwinds all macros and reps (repetitions).\n    - [assembler.py](flipjump/assembler/assembler.py) - Assembles macro-less fj files.\n  - [more...](flipjump/README.md) - Additional project files and documentation.\n\n**[flipjump/stl](flipjump/stl/README.md)** (standard library files - macros. The [stl readme](flipjump/stl/README.md#the-files) contains the list of all macros):\n  - runlib.fj - Constants and initialization macros. Output constant strings.\n  - [bit/](flipjump/stl/README.md#bit) - Directory of stl files. Macros for io/manipulating binary variables and vectors (i.e. numbers): math, logic, conditional jumps, pointers, casting, IO, ...\n  - [hex/](flipjump/stl/README.md#hex) - Directory of stl files. Macros for io/manipulating hexadecimal variables and vectors (i.e. numbers): math, logic, conditional jumps, pointers, casting, IO, ...\n  - mathlib.fj - Advanced math macros (mul/div).\n  - casting.fj - Macros for casting between bit/hex.\n  - ptrlib.fj - Macros for working with pointers, stacks, and functions.\n  - conf.json - The list of the standard library files.\n\n**[programs](programs)** (flipjump programs, used by the tests), for example:\n  - [hello_world.fj](programs/print_tests/hello_world.fj) - Prints \"hello world :)\"\n  - [calc.fj](programs/calc.fj) - A command-line calculator for 2 hex/dec numbers: ```a [+-*/%] b```.\n  - [func_tests/](programs/func_tests) - Programs for testing function calls and stack operations.\n  - [hexlib_tests/](programs/hexlib_tests) - Tests for all the hex macros, except the hex.pointers.\n  - [quine16.fj](programs/quine16.fj) - A 16-bits quine by [lestrozi](https://github.com/lestrozi); when assembled with `-w16 -v0` - prints itself.\n  - [pair_ns.fj](programs/concept_checks/pair_ns.fj) - Simulates the concept of a Class, by using a namespace.\n  - [print_dec.fj](programs/print_tests/print_dec.fj) - Prints binary variables as decimals.\n  - [multi_comp/](programs/multi_comp) - Simulates a big project (compilation of multiple files).\n\n**[tests](tests/README.md)** (tests compiling+running the programs with the stl), for example:\n  - compiled/ - The designated directory for the assembled tests files.\n  - inout/ - Contains the .in and .out files for each test.\n  - conftest.py - The pytest configuration file. The tests are being generated here.\n  - test_fj.py - The base test functions for compilation and running ([how to run](tests/README.md#run-the-tests)).\n  - conf.json - The tests groups+order lists.\n  - [tests_tables/](tests/tests_tables)\n    - test_compile_*.csv - Arguments for the compile tests ([compile test arguments format](tests/README.md#compile-csvs-format)).\n    - test_run_*.csv - Arguments for the run tests ([run test arguments format](tests/README.md#run-csvs-format)).\n    - xfail_*.csv - [xfail](https://docs.pytest.org/en/7.1.x/how-to/skipping.html#xfail-mark-test-functions-as-expected-to-fail) these tests.\n\n\n# Read More - Extra Documentation\n\nTake a look at the other READMEs:\n* Read more about the [assembler/interpreter source files](flipjump/README.md).    \n* Read more about [how to run the tests](tests/README.md).\n* Read more about the [standard library](flipjump/stl/README.md).\n\nA very extensive explanation can be found on the [GitHub wiki page](https://github.com/tomhea/flip-jump/wiki/Learn-FlipJump).\n\nMore detailed explanation and the **specifications of the FlipJump assembly** can be found on the [FlipJump esolangs page](https://esolangs.org/wiki/FlipJump).\n\nIf you are new to FlipJump and you want to learn how modern computation can be executed using FlipJump, and you want to jump onto your first flipjump code - Start by reading the [bit.xor](flipjump/stl/bit/logics.fj) and [bit.if](flipjump/stl/bit/cond_jumps.fj) macros. That's where the FlipJump magic begins.  \nIf you want to understand how the deep optimized hex macros work, understand how the next macros are implemented: [hex.exact_xor](flipjump/stl/hex/logics.fj), [hex.output](flipjump/stl/hex/output.fj), [hex.inc1](flipjump/stl/hex/math_basic.fj), and [hex.add](flipjump/stl/hex/math.fj) (understand the concept of the [lookup tables](https://esolangs.org/wiki/FlipJump#Lookup_Tables).\n\nYou can also write and run programs for yourself! It is just [that](README.md#how-to-run) easy :)\n\n## Turing Complete?\nAs the language expects a finite memory, like most of today's programming languages, it's technically not Turing complete. \nYet, It's very capable.\n\nI wrote a [Brainfuck to Flipjump Compiler (bf2fj)](https://github.com/tomhea/bf2fj) to emphasize just that. \nBrainfuck is indeed Turing complete, and the compiler proves that flipjump can run any program that brainfuck runs (besides those that require an unbounded memory).\n\nA newer project is [c2fj](https://github.com/tomhea/c2fj) - It can compile any C program to FlipJump.  \nTake a look at the [prime numbers c program](https://github.com/tomhea/c2fj/blob/main/tests/programs/primes/main.c) that can be compiled to fj just as is.\n\n# Contribute\n\nIf you want to contribute to this project, read the [CONTRIBUTING.md](CONTRIBUTING.md) file, and take a look at the [I-Want-To-Contribute Thread](https://github.com/tomhea/flip-jump/discussions/148).\n\nActually, just writing your own flipjump programs and sharing them with the world is a great contribution to the community :)  \nTake a look at what the [standard library](flipjump/stl/README.md) offers, and see some [example programs](programs) to get you inspired!\n",
    "bugtrack_url": null,
    "license": "BSD-2-Clause-Simplified",
    "summary": "The single instruction language - Flip a bit, then Jump",
    "version": "1.3.0",
    "project_urls": {
        "Documentation": "https://github.com/tomhea/flip-jump/wiki",
        "Homepage": "https://esolangs.org/wiki/FlipJump",
        "Repository": "https://github.com/tomhea/flip-jump"
    },
    "split_keywords": [
        "esolang",
        " oisc",
        " assembly"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "4caa729f99646d575c56f970b0fa477be4d90793e42dc55d6801a2b91292f092",
                "md5": "b8c8260ce818c317f098e8224583b82e",
                "sha256": "2b4d6b8cc9b6a10ae65879f05cd86759ad04e777b5965eaae7971b6c7c991332"
            },
            "downloads": -1,
            "filename": "flipjump-1.3.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "b8c8260ce818c317f098e8224583b82e",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": "<4.0.0,>=3.8.1",
            "size": 102935,
            "upload_time": "2025-01-11T10:21:04",
            "upload_time_iso_8601": "2025-01-11T10:21:04.180618Z",
            "url": "https://files.pythonhosted.org/packages/4c/aa/729f99646d575c56f970b0fa477be4d90793e42dc55d6801a2b91292f092/flipjump-1.3.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "6436b2c2ab6e4da9ac3549fbd07c7d718e3ab0e39031c21c4dc6c6eb4f664022",
                "md5": "00fab998566dca8195819e9e8b135c1d",
                "sha256": "aab3a48f0d9af94020b42d9c1c16e79f385dfe325fa8d17be1c579737c1c6e22"
            },
            "downloads": -1,
            "filename": "flipjump-1.3.0.tar.gz",
            "has_sig": false,
            "md5_digest": "00fab998566dca8195819e9e8b135c1d",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": "<4.0.0,>=3.8.1",
            "size": 82818,
            "upload_time": "2025-01-11T10:21:06",
            "upload_time_iso_8601": "2025-01-11T10:21:06.565238Z",
            "url": "https://files.pythonhosted.org/packages/64/36/b2c2ab6e4da9ac3549fbd07c7d718e3ab0e39031c21c4dc6c6eb4f664022/flipjump-1.3.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-01-11 10:21:06",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "tomhea",
    "github_project": "flip-jump",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "tox": true,
    "lcname": "flipjump"
}
        
Elapsed time: 1.84291s