├── .editorconfig ├── .gitattributes ├── .github └── workflows │ ├── compile-warnings.yml │ ├── compilers.yml │ ├── os.yml │ ├── runtests.yml │ ├── sanitisers.yml │ └── spelling.yml ├── .gitignore ├── LICENSE.TXT ├── Makefile.am ├── README.md ├── TestSupport ├── generate_graphs.bat ├── planarity_runner.bat ├── planaritytesting │ ├── __init__.py │ ├── edge_deletion_analysis.py │ ├── g6_diff_finder.py │ ├── g6_generation_and_comparison_driver.py │ ├── graph.py │ ├── graph_generation_orchestrator.py │ ├── leaksorchestrator │ │ ├── planarity_leaks_config_manager.py │ │ └── planarity_leaks_orchestrator.py │ ├── planarity_testAllGraphs_orchestrator.py │ ├── planarity_testAllGraphs_output_parsing.py │ ├── planaritytesting_utils.py │ ├── test_table_generation_with_numInvalidOK.py │ └── test_table_generator.py └── tables │ ├── 5 │ ├── n5.mALL.2.out.txt │ ├── n5.mALL.3.out.txt │ ├── n5.mALL.4.out.txt │ ├── n5.mALL.d.out.txt │ ├── n5.mALL.o.out.txt │ └── n5.mALL.p.out.txt │ ├── 6 │ ├── n6.mALL.2.out.txt │ ├── n6.mALL.3.out.txt │ ├── n6.mALL.4.out.txt │ ├── n6.mALL.d.out.txt │ ├── n6.mALL.o.out.txt │ └── n6.mALL.p.out.txt │ ├── 7 │ ├── n7.mALL.2.out.txt │ ├── n7.mALL.3.out.txt │ ├── n7.mALL.4.out.txt │ ├── n7.mALL.d.out.txt │ ├── n7.mALL.o.out.txt │ └── n7.mALL.p.out.txt │ ├── 8 │ ├── n8.mALL.2.out.txt │ ├── n8.mALL.3.out.txt │ ├── n8.mALL.4.out.txt │ ├── n8.mALL.d.out.txt │ ├── n8.mALL.o.out.txt │ └── n8.mALL.p.out.txt │ ├── 9 │ ├── n9.mALL.2.out.txt │ ├── n9.mALL.3.out.txt │ ├── n9.mALL.4.out.txt │ ├── n9.mALL.d.out.txt │ ├── n9.mALL.o.out.txt │ └── n9.mALL.p.out.txt │ ├── 10 │ ├── n10.mALL.2.out.txt │ ├── n10.mALL.3.out.txt │ ├── n10.mALL.4.out.txt │ ├── n10.mALL.d.out.txt │ ├── n10.mALL.o.out.txt │ └── n10.mALL.p.out.txt │ └── 11 │ ├── n11.mALL.2.out.txt │ ├── n11.mALL.3.out.txt │ ├── n11.mALL.4.out.txt │ ├── n11.mALL.d.out.txt │ ├── n11.mALL.o.out.txt │ └── n11.mALL.p.out.txt ├── c ├── .gdbinit ├── graph.h ├── graphLib.h ├── graphLib │ ├── extensionSystem │ │ ├── graphExtensions.c │ │ ├── graphExtensions.h │ │ ├── graphExtensions.private.h │ │ └── graphFunctionTable.h │ ├── graph.h │ ├── graphDFSUtils.c │ ├── graphLib.h │ ├── graphStructures.h │ ├── graphUtils.c │ ├── homeomorphSearch │ │ ├── graphK23Search.c │ │ ├── graphK23Search.h │ │ ├── graphK23Search.private.h │ │ ├── graphK23Search_Extensions.c │ │ ├── graphK33Search.c │ │ ├── graphK33Search.h │ │ ├── graphK33Search.private.h │ │ ├── graphK33Search_Extensions.c │ │ ├── graphK4Search.c │ │ ├── graphK4Search.h │ │ ├── graphK4Search.private.h │ │ └── graphK4Search_Extensions.c │ ├── io │ │ ├── g6-api-utilities.c │ │ ├── g6-api-utilities.h │ │ ├── g6-read-iterator.c │ │ ├── g6-read-iterator.h │ │ ├── g6-write-iterator.c │ │ ├── g6-write-iterator.h │ │ ├── graphIO.c │ │ ├── strOrFile.c │ │ ├── strOrFile.h │ │ ├── strbuf.c │ │ └── strbuf.h │ ├── lowLevelUtils │ │ ├── apiutils.c │ │ ├── apiutils.h │ │ ├── appconst.h │ │ ├── listcoll.c │ │ ├── listcoll.h │ │ ├── platformTime.h │ │ ├── stack.c │ │ └── stack.h │ └── planarityRelated │ │ ├── graphDrawPlanar.c │ │ ├── graphDrawPlanar.h │ │ ├── graphDrawPlanar.private.h │ │ ├── graphDrawPlanar_Extensions.c │ │ ├── graphEmbed.c │ │ ├── graphIsolator.c │ │ ├── graphNonplanar.c │ │ ├── graphOuterplanarObstruction.c │ │ └── graphTests.c ├── planarityApp │ ├── planarity.1 │ ├── planarity.c │ ├── planarity.h │ ├── planarityCommandLine.c │ ├── planarityHelp.c │ ├── planarityMenu.c │ ├── planarityRandomGraphs.c │ ├── planaritySpecificGraph.c │ ├── planarityTestAllGraphs.c │ ├── planarityTransformGraph.c │ └── planarityUtils.c └── samples │ ├── K10.g6 │ ├── K10.g6.0-based.AdjList.out.txt │ ├── K10.g6.0-based.AdjList.out.txt.0-based.G6.out.g6 │ ├── K10.g6.0-based.AdjMat.out.txt │ ├── Makefile.am │ ├── N5-all.g6 │ ├── N5-all.g6.0-based.AdjList.out.txt │ ├── N5-all.g6.0-based.AdjMat.out.txt │ ├── Petersen.0-based.txt │ ├── Petersen.0-based.txt.ColorVertices.out.txt │ ├── Petersen.0-based.txt.K23Search.out.txt │ ├── Petersen.0-based.txt.K33Search.out.txt │ ├── Petersen.0-based.txt.K4Search.out.txt │ ├── Petersen.0-based.txt.OuterplanarEmbed.out.txt │ ├── Petersen.0-based.txt.PlanarEmbed.out.txt │ ├── Petersen.txt │ ├── Petersen.txt.ColorVertices.out.txt │ ├── Petersen.txt.K23Search.out.txt │ ├── Petersen.txt.K33Search.out.txt │ ├── Petersen.txt.K4Search.out.txt │ ├── Petersen.txt.OuterplanarEmbed.out.txt │ ├── Petersen.txt.PlanarEmbed.out.txt │ ├── drawExample.0-based.txt │ ├── drawExample.0-based.txt.ColorVertices.out.txt │ ├── drawExample.0-based.txt.DrawPlanar.out.txt │ ├── drawExample.0-based.txt.DrawPlanar.out.txt.render.txt │ ├── drawExample.txt │ ├── drawExample.txt.ColorVertices.out.txt │ ├── drawExample.txt.DrawPlanar.out.txt │ ├── drawExample.txt.DrawPlanar.out.txt.render.txt │ ├── maxPlanar5.0-based.txt │ ├── maxPlanar5.0-based.txt.ColorVertices.out.txt │ ├── maxPlanar5.0-based.txt.DrawPlanar.out.txt │ ├── maxPlanar5.0-based.txt.DrawPlanar.out.txt.render.txt │ ├── maxPlanar5.0-based.txt.PlanarEmbed.out.txt │ ├── maxPlanar5.txt │ ├── maxPlanar5.txt.ColorVertices.out.txt │ ├── maxPlanar5.txt.DrawPlanar.out.txt │ ├── maxPlanar5.txt.DrawPlanar.out.txt.render.txt │ ├── maxPlanar5.txt.PlanarEmbed.out.txt │ ├── nauty_example.LEDA │ ├── nauty_example.g6 │ ├── nauty_example.g6.0-based.AdjList.out.txt │ ├── nauty_example.g6.0-based.AdjList.out.txt.0-based.G6.out.g6 │ └── nauty_example.g6.0-based.AdjMat.out.txt ├── configure.ac ├── devEnvSetupAndDefaults ├── .vscode │ ├── launch.json │ ├── settings.json │ └── tasks.json ├── TestSupport │ └── planaritytesting │ │ ├── .pylintrc │ │ └── leaksorchestrator │ │ └── planarity_leaks_config.ini └── devEnvSetup.sh ├── libplanarity.pc.in ├── m4 ├── ax_append_compile_flags.m4 ├── ax_append_flag.m4 ├── ax_check_compile_flag.m4 ├── ax_compiler_flags_cflags.m4 └── ax_require_defined.m4 └── test-samples.sh.in /.editorconfig: -------------------------------------------------------------------------------- 1 | # From https://stackoverflow.com/a/42136008 2 | # EditorConfig is awesome: http://EditorConfig.org 3 | 4 | # top-most EditorConfig file 5 | root = true 6 | 7 | # Unix-style newlines with a newline ending every file 8 | [*] 9 | end_of_line = lf 10 | insert_final_newline = true 11 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # From https://stackoverflow.com/a/42136008 2 | # See also https://docs.github.com/en/get-started/git-basics/configuring-git-to-handle-line-endings 3 | * text=auto eol=lf 4 | -------------------------------------------------------------------------------- /.github/workflows/compile-warnings.yml: -------------------------------------------------------------------------------- 1 | name: Compiler warnings 2 | on: [pull_request, workflow_dispatch] 3 | 4 | concurrency: 5 | group: ${{ github.workflow }}-${{ github.ref }} 6 | cancel-in-progress: true 7 | 8 | jobs: 9 | tests: 10 | name: ${{ matrix.compiler }} 11 | timeout-minutes: 60 12 | runs-on: ubuntu-latest 13 | env: 14 | CC: ${{ matrix.compiler }} 15 | CFLAGS: -Werror 16 | strategy: 17 | fail-fast: false 18 | matrix: 19 | compiler: [clang-18, gcc-14] 20 | steps: 21 | - uses: actions/checkout@v4 22 | - name: Compiler information . . . 23 | run: $CC --version 24 | # TODO: Add --enable-compile-warnings to ./configure when available 25 | - name: Configure . . . 26 | run: | 27 | mkdir -p m4 28 | autoreconf -if 29 | ./configure CC="$CC" CFLAGS="$CFLAGS" 30 | - name: Build . . . 31 | run: make -j4 32 | # We don't run the tests, since in this job we are only checking for 33 | # compiler warnings 34 | -------------------------------------------------------------------------------- /.github/workflows/compilers.yml: -------------------------------------------------------------------------------- 1 | name: Compilers 2 | on: [pull_request, workflow_dispatch] 3 | 4 | concurrency: 5 | group: ${{ github.workflow }}-${{ github.ref }} 6 | cancel-in-progress: true 7 | 8 | jobs: 9 | tests: 10 | name: ${{ matrix.sys.compiler }}-${{ matrix.sys.version }} 11 | timeout-minutes: 60 12 | runs-on: ubuntu-latest 13 | strategy: 14 | fail-fast: false 15 | matrix: 16 | sys: 17 | - { compiler: gcc, version: 9 } 18 | - { compiler: gcc, version: 10 } 19 | - { compiler: gcc, version: 11 } 20 | - { compiler: gcc, version: 12 } 21 | - { compiler: gcc, version: 13 } 22 | - { compiler: gcc, version: 14 } 23 | - { compiler: clang, version: 14 } 24 | - { compiler: clang, version: 15 } 25 | - { compiler: clang, version: 16 } 26 | - { compiler: clang, version: 17 } 27 | - { compiler: clang, version: 18 } 28 | - { compiler: clang, version: 19 } 29 | steps: 30 | - uses: actions/checkout@v4 31 | - name: Setup compiler . . . 32 | run: | 33 | sudo add-apt-repository ppa:ubuntu-toolchain-r/ppa -y 34 | sudo apt-get --yes update 35 | sudo apt-get install ${{ matrix.sys.compiler }}-${{ matrix.sys.version }} 36 | CC=${{ matrix.sys.compiler }}-${{ matrix.sys.version }} 37 | echo "CC=$CC" >> $GITHUB_ENV 38 | - name: Compiler information 39 | run: | 40 | echo $CC 41 | $CC --version 42 | - name: Configure . . . 43 | env: 44 | CC: ${{ env.CC }} 45 | run: | 46 | mkdir -p m4 47 | autoreconf -if 48 | ./configure CC="$CC" 49 | - name: Build . . . 50 | run: make -j4 51 | - name: Run the tests . . . 52 | run: ./test-samples.sh 53 | -------------------------------------------------------------------------------- /.github/workflows/os.yml: -------------------------------------------------------------------------------- 1 | name: OS 2 | on: [pull_request, workflow_dispatch] 3 | 4 | concurrency: 5 | group: ${{ github.workflow }}-${{ github.ref }} 6 | cancel-in-progress: true 7 | 8 | jobs: 9 | alpine: 10 | name: Alpine 11 | defaults: 12 | run: 13 | shell: alpine.sh {0} 14 | runs-on: ubuntu-latest 15 | steps: 16 | - uses: actions/checkout@v4 17 | - uses: jirutka/setup-alpine@v1 18 | with: 19 | branch: v3.15 20 | - name: Alpine/musl versions . . . 21 | run: | 22 | cat /etc/alpine-release 23 | apk info musl 24 | - name: Install autotools etc . . . 25 | run: | 26 | apk add build-base autoconf automake libtool 27 | shell: alpine.sh --root {0} 28 | - name: Configure . . . 29 | run: autoreconf -if && ./configure 30 | - name: Build . . . 31 | run: make -j4 32 | - name: Run the tests . . . 33 | run: ./test-samples.sh 34 | cygwin: 35 | name: Cygwin 36 | defaults: 37 | run: 38 | shell: C:\cygwin\bin\bash.exe --noprofile --norc -o igncr -eo pipefail '{0}' 39 | timeout-minutes: 60 40 | runs-on: windows-latest 41 | steps: 42 | - run: git config --global core.autocrlf input 43 | shell: pwsh -command ". '{0}'". 44 | - uses: actions/checkout@v4 45 | - uses: cygwin/cygwin-install-action@v5 46 | with: 47 | packages: gcc-core,automake,libtool,autoconf 48 | - name: Configure . . . 49 | run: autoreconf -if && ./configure 50 | - name: Build . . . 51 | run: make -j4 52 | - name: Run the tests . . . 53 | run: ./test-samples.sh 54 | msys: 55 | name: Windows-${{ matrix.sys }} 56 | defaults: 57 | run: 58 | shell: msys2 {0} 59 | timeout-minutes: 60 60 | runs-on: windows-latest 61 | strategy: 62 | fail-fast: false 63 | matrix: 64 | sys: [MINGW64, MINGW32, UCRT64, CLANG64] 65 | steps: 66 | - uses: msys2/setup-msys2@v2 67 | with: 68 | update: true 69 | msystem: ${{ matrix.sys }} 70 | pacboy: toolchain autotools 71 | - uses: actions/checkout@v4 72 | - name: Configure . . . 73 | run: autoreconf -if && ./configure 74 | - name: Build . . . 75 | run: make -j4 76 | - name: Run the tests . . . 77 | run: ./test-samples.sh 78 | msys-arm: 79 | name: Windows-CLANGARM64 80 | defaults: 81 | run: 82 | shell: msys2 {0} 83 | runs-on: windows-11-arm 84 | steps: 85 | - uses: msys2/setup-msys2@v2 86 | with: 87 | update: true 88 | msystem: CLANGARM64 89 | pacboy: toolchain autotools 90 | - uses: actions/checkout@v4 91 | - name: Configure . . . 92 | run: autoreconf -if && ./configure 93 | - name: Build . . . 94 | run: make -j4 95 | - name: Run the tests . . . 96 | run: ./test-samples.sh 97 | macos: 98 | name: macOS 99 | timeout-minutes: 60 100 | runs-on: macOS-latest 101 | env: 102 | CC: clang 103 | steps: 104 | - uses: actions/checkout@v4 105 | - name: Install dependencies . . . 106 | run: brew install autoconf automake libtool 107 | - name: Clang version . . . 108 | run: clang --version 109 | - name: Configure . . . 110 | run: | 111 | mkdir -p m4 112 | autoreconf -if 113 | ./configure CC="$CC" 114 | - name: Build . . . 115 | run: make -j4 116 | - name: Run the tests . . . 117 | run: ./test-samples.sh 118 | arm: 119 | name: Ubuntu-arm 120 | runs-on: ubuntu-24.04-arm 121 | steps: 122 | - uses: actions/checkout@v4 123 | - name: Install autotools etc . . . 124 | run: sudo apt-get install autoconf automake libtool 125 | - name: Configure . . . 126 | run: autoreconf -if && ./configure 127 | - name: Build . . . 128 | run: make -j4 129 | - name: Run the tests . . . 130 | run: ./test-samples.sh 131 | aarch64: 132 | name: Ubuntu-aarch64 133 | runs-on: ubuntu-24.04-arm 134 | steps: 135 | - uses: actions/checkout@v4 136 | - uses: uraimo/run-on-arch-action@v3 137 | with: 138 | arch: aarch64 139 | distro: ubuntu22.04 140 | run: | 141 | apt-get --yes update 142 | apt-get install autoconf automake libtool build-essential --yes 143 | gcc --version 144 | autoreconf -if && ./configure 145 | make -j4 146 | ./test-samples.sh 147 | debian: 148 | name: Debian 149 | runs-on: ubuntu-latest 150 | container: 151 | image: debian:latest 152 | steps: 153 | - uses: actions/checkout@v4 154 | - name: Install autotools etc . . . 155 | run: apt update && apt -y upgrade && apt install -y make autoconf automake libtool 156 | - name: Configure . . . 157 | run: autoreconf -if && ./configure 158 | - name: Build . . . 159 | run: make -j4 160 | - name: Run the tests . . . 161 | run: ./test-samples.sh 162 | -------------------------------------------------------------------------------- /.github/workflows/runtests.yml: -------------------------------------------------------------------------------- 1 | name: Tests 2 | on: [pull_request, workflow_dispatch] 3 | 4 | concurrency: 5 | group: ${{ github.workflow }}-${{ github.ref }} 6 | cancel-in-progress: true 7 | 8 | jobs: 9 | basic-tests: 10 | name: ${{ matrix.compiler }} 11 | timeout-minutes: 60 12 | runs-on: ubuntu-latest 13 | env: 14 | CC: ${{ matrix.compiler }} 15 | strategy: 16 | fail-fast: false 17 | matrix: 18 | compiler: [clang, gcc] 19 | steps: 20 | - uses: actions/checkout@v4 21 | - name: test 22 | run: | 23 | echo ${{ github.event_name }} 24 | echo ${{ github.event_name == 'pull_request' }} 25 | - name: Configure . . . 26 | run: | 27 | mkdir -p m4 28 | autoreconf -if 29 | ./configure CC="$CC" 30 | - name: Build . . . 31 | run: make -j4 32 | - name: Run the tests . . . 33 | run: ./test-samples.sh 34 | distcheck: 35 | timeout-minutes: 15 36 | runs-on: ubuntu-latest 37 | if: ${{ github.event_name == 'pull_request' }} 38 | env: 39 | CC: gcc 40 | steps: 41 | - uses: actions/checkout@v4 42 | - name: Configure . . . 43 | run: | 44 | mkdir -p m4 45 | autoreconf -if 46 | ./configure CC="$CC" 47 | - name: make distcheck . . . 48 | run: make distcheck -j4 49 | -------------------------------------------------------------------------------- /.github/workflows/sanitisers.yml: -------------------------------------------------------------------------------- 1 | name: Sanitisers 2 | on: [pull_request, workflow_dispatch] 3 | 4 | concurrency: 5 | group: ${{ github.workflow }}-${{ github.ref }} 6 | cancel-in-progress: true 7 | jobs: 8 | sanitisers: 9 | timeout-minutes: 60 10 | runs-on: ubuntu-latest 11 | env: 12 | CC: clang 13 | CFLAGS: -fno-omit-frame-pointer -g -O1 14 | strategy: 15 | matrix: 16 | type: [address, undefined] 17 | include: 18 | - type: undefined 19 | environment_variables: UBSAN_OPTIONS=log_path=ubsan.log 20 | fail-fast: false 21 | name: ${{ matrix.type }} 22 | steps: 23 | - uses: actions/checkout@v4 24 | - name: Configure with -fsanitize=${{ matrix.type }} . . . 25 | run: | 26 | mkdir -p m4 && autoreconf -if 27 | ./configure CC="$CC" CFLAGS="-fsanitize=${{ matrix.type }} $CFLAGS" 28 | - name: Build . . . 29 | run: make -j4 30 | - name: Run tests . . . 31 | run: ${{ matrix.environment_variables }} ./test-samples.sh 32 | - name: Check log files 33 | if: ${{ matrix.type == 'undefined' }} 34 | run: | 35 | if [ -f ubsan.log* ]; then 36 | cat ubsan.log* 37 | $(exit 1) 38 | fi 39 | valgrind: 40 | timeout-minutes: 60 41 | runs-on: ubuntu-latest 42 | env: 43 | CC: gcc 44 | CFLAGS: -g -O0 45 | steps: 46 | - uses: actions/checkout@v4 47 | - name: Install dependencies . . . 48 | run: | 49 | sudo apt-get --yes update 50 | sudo apt-get install -y expect libc6-dbg libtool-bin valgrind 51 | - name: Configure . . . 52 | run: | 53 | mkdir -p m4 && autoreconf -if 54 | ./configure CC="$CC" CFLAGS="$CFLAGS" 55 | - name: Build . . . 56 | run: make -j4 57 | - name: Run tests with valgrind . . . 58 | run: | 59 | valgrind --version 60 | unbuffer libtool --mode=execute valgrind --leak-check=full ./test-samples.sh 2>&1 | tee valgrind.log 61 | echo 62 | ( ! grep -i "Invalid" valgrind.log ) 63 | ( ! grep -E "lost: [^0]" valgrind.log ) 64 | -------------------------------------------------------------------------------- /.github/workflows/spelling.yml: -------------------------------------------------------------------------------- 1 | name: Spelling 2 | on: [pull_request, workflow_dispatch] 3 | 4 | jobs: 5 | codespell: 6 | runs-on: ubuntu-latest 7 | steps: 8 | - uses: actions/checkout@v4 9 | - uses: codespell-project/actions-codespell@v2 10 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Directories 2 | **/Release/ 3 | **/Debug/ 4 | /c/.settings/ 5 | 6 | # Ignore directories for output of Random Graphs 7 | **/random/ 8 | **/embedded/ 9 | **/adjlist/ 10 | **/obstructed/ 11 | **/error/ 12 | 13 | # Object files 14 | *.o 15 | *.ko 16 | *.obj 17 | *.elf 18 | 19 | # Precompiled Headers 20 | *.gch 21 | *.pch 22 | 23 | # Libraries 24 | *.lib 25 | *.a 26 | *.la 27 | *.lo 28 | 29 | # Shared objects (inc. Windows DLLs) 30 | *.dll 31 | *.so 32 | *.so.* 33 | *.dylib 34 | 35 | # Executables 36 | *.exe 37 | *.out 38 | *.app 39 | *.i*86 40 | *.x86_64 41 | *.hex 42 | 43 | # Linker output 44 | *.ilk 45 | *.map 46 | *.exp 47 | 48 | # Debug files 49 | *.dSYM/ 50 | *.su 51 | *.idb 52 | *.pdb 53 | 54 | # Java 55 | *.class 56 | *.log 57 | *.jar 58 | *.war 59 | *.ear 60 | *.zip 61 | *.tar.gz 62 | *.rar 63 | 64 | # To ignore files generated by the make distribution process 65 | *.tar.gz 66 | **/.deps/ 67 | /autom4te.cache/ 68 | libtool 69 | test-samples.sh 70 | Makefile 71 | config.status 72 | config.guess* 73 | config.sub* 74 | depcomp 75 | install-sh* 76 | Makefile.in 77 | missing 78 | ltmain.sh 79 | configure 80 | configure~ 81 | aclocal.m4 82 | compile 83 | test-driver 84 | planarity-* 85 | planarity-*/* 86 | libplanarity.pc 87 | m4/ 88 | 89 | # Ignoring configuration for VSCode 90 | /.vscode/ 91 | 92 | # Ignoring configuration for Eclipse project 93 | .project 94 | /c/.project 95 | /c/.cproject 96 | 97 | ## MacOS excludes 98 | .DS_Store 99 | 100 | # Ignore binary produced by compiling on MacOS 101 | planarity 102 | 103 | # Ignore planaritytesting Package default output directories, pycache, 104 | # .pylintrc, and configuration file for leaks orchestrator 105 | TestSupport/planaritytesting/__pycache__/ 106 | TestSupport/results/ 107 | TestSupport/g6_diff_finder_logs/ 108 | TestSupport/planaritytesting/.pylintrc 109 | TestSupport/planaritytesting/leaksorchestrator/planarity_leaks_config.ini 110 | -------------------------------------------------------------------------------- /LICENSE.TXT: -------------------------------------------------------------------------------- 1 | The Edge Addition Planarity Suite 2 | Copyright (c) 1997-2025, John M. Boyer 3 | All rights reserved. Includes a reference implementation of the following: 4 | 5 | * John M. Boyer. "Subgraph Homeomorphism via the Edge Addition Planarity Algorithm". 6 | Journal of Graph Algorithms and Applications, Vol. 16, no. 2, pp. 381-410, 2012. 7 | http://dx.doi.org/10.7155/jgaa.00268 8 | 9 | * John M. Boyer. "A New Method for Efficiently Generating Planar Graph 10 | Visibility Representations". In P. Eades and P. Healy, editors, 11 | Proceedings of the 13th International Conference on Graph Drawing 2005, 12 | Lecture Notes Comput. Sci., Volume 3843, pp. 508-511, Springer-Verlag, 2006. 13 | http://dx.doi.org/10.1007/11618058_47 14 | 15 | * John M. Boyer and Wendy J. Myrvold. "On the Cutting Edge: Simplified O(n) 16 | Planarity by Edge Addition". Journal of Graph Algorithms and Applications, 17 | Vol. 8, No. 3, pp. 241-273, 2004. 18 | http://dx.doi.org/10.7155/jgaa.00091 19 | 20 | * John M. Boyer. "Simplified O(n) Algorithms for Planar Graph Embedding, 21 | Kuratowski Subgraph Isolation, and Related Problems". Ph.D. Dissertation, 22 | University of Victoria, 2001. 23 | https://dspace.library.uvic.ca/handle/1828/9918 24 | 25 | Redistribution and use in source and binary forms, with or without 26 | modification, are permitted provided that the following conditions are met: 27 | 28 | * Redistributions of source code must retain the above copyright notice, this 29 | list of conditions and the following disclaimer. 30 | 31 | * Redistributions in binary form must reproduce the above copyright notice, 32 | this list of conditions and the following disclaimer in the documentation 33 | and/or other materials provided with the distribution. 34 | 35 | * Neither the name of The Edge Addition Planarity Suite nor the names of its 36 | contributors may be used to endorse or promote products derived from 37 | this software without specific prior written permission. 38 | 39 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 40 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 41 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 42 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 43 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 44 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 45 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 46 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 47 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 48 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 49 | -------------------------------------------------------------------------------- /Makefile.am: -------------------------------------------------------------------------------- 1 | SUBDIRS = c/samples 2 | 3 | ACLOCAL_AMFLAGS = -I m4 4 | 5 | lib_LTLIBRARIES = libplanarity.la 6 | 7 | AM_CFLAGS = $(WARNING_CFLAGS) 8 | 9 | libplanarity_la_SOURCES = \ 10 | c/graphLib/graphDFSUtils.c \ 11 | c/graphLib/graphUtils.c \ 12 | c/graphLib/extensionSystem/graphExtensions.c \ 13 | c/graphLib/homeomorphSearch/graphK23Search.c \ 14 | c/graphLib/homeomorphSearch/graphK23Search_Extensions.c \ 15 | c/graphLib/homeomorphSearch/graphK33Search.c \ 16 | c/graphLib/homeomorphSearch/graphK33Search_Extensions.c \ 17 | c/graphLib/homeomorphSearch/graphK4Search.c \ 18 | c/graphLib/homeomorphSearch/graphK4Search_Extensions.c \ 19 | c/graphLib/io/g6-api-utilities.c \ 20 | c/graphLib/io/g6-read-iterator.c \ 21 | c/graphLib/io/g6-write-iterator.c \ 22 | c/graphLib/io/graphIO.c \ 23 | c/graphLib/io/strbuf.c \ 24 | c/graphLib/io/strOrFile.c \ 25 | c/graphLib/lowLevelUtils/apiutils.c \ 26 | c/graphLib/lowLevelUtils/listcoll.c \ 27 | c/graphLib/lowLevelUtils/stack.c \ 28 | c/graphLib/planarityRelated/graphDrawPlanar.c \ 29 | c/graphLib/planarityRelated/graphDrawPlanar_Extensions.c \ 30 | c/graphLib/planarityRelated/graphEmbed.c \ 31 | c/graphLib/planarityRelated/graphIsolator.c \ 32 | c/graphLib/planarityRelated/graphNonplanar.c \ 33 | c/graphLib/planarityRelated/graphOuterplanarObstruction.c \ 34 | c/graphLib/planarityRelated/graphTests.c 35 | 36 | libplanarity_la_LDFLAGS = -no-undefined $(AM_LDFLAGS) -version-info @LT_CURRENT@:@LT_REVISION@:@LT_AGE@ 37 | 38 | # These pkgincludes are added without "nobase_" so that the files will be copied to the 39 | # root of the planarity project includedir (i.e. excluding the c subdirectory) 40 | pkginclude_HEADERS = \ 41 | c/graph.h \ 42 | c/graphLib.h 43 | 44 | # This is the full set of pkgincludes for which "nobase_" has been used to ensure that 45 | # the directory structure is retained when installing the planarity headers. 46 | nobase_pkginclude_HEADERS = \ 47 | c/graphLib/graph.h \ 48 | c/graphLib/graphLib.h \ 49 | c/graphLib/graphStructures.h \ 50 | c/graphLib/extensionSystem/graphExtensions.h \ 51 | c/graphLib/extensionSystem/graphExtensions.private.h \ 52 | c/graphLib/extensionSystem/graphFunctionTable.h \ 53 | c/graphLib/homeomorphSearch/graphK23Search.h \ 54 | c/graphLib/homeomorphSearch/graphK23Search.private.h \ 55 | c/graphLib/homeomorphSearch/graphK33Search.h \ 56 | c/graphLib/homeomorphSearch/graphK33Search.private.h \ 57 | c/graphLib/homeomorphSearch/graphK4Search.h \ 58 | c/graphLib/homeomorphSearch/graphK4Search.private.h \ 59 | c/graphLib/io/g6-api-utilities.h \ 60 | c/graphLib/io/g6-read-iterator.h \ 61 | c/graphLib/io/g6-write-iterator.h \ 62 | c/graphLib/io/strbuf.h \ 63 | c/graphLib/io/strOrFile.h \ 64 | c/graphLib/lowLevelUtils/apiutils.h \ 65 | c/graphLib/lowLevelUtils/appconst.h \ 66 | c/graphLib/lowLevelUtils/listcoll.h \ 67 | c/graphLib/lowLevelUtils/platformTime.h \ 68 | c/graphLib/lowLevelUtils/stack.h \ 69 | c/graphLib/planarityRelated/graphDrawPlanar.h \ 70 | c/graphLib/planarityRelated/graphDrawPlanar.private.h \ 71 | c/planarityApp/planarity.h 72 | 73 | bin_PROGRAMS = planarity 74 | planarity_LDADD = libplanarity.la 75 | planarity_SOURCES = \ 76 | c/planarityApp/planarity.c \ 77 | c/planarityApp/planarityCommandLine.c \ 78 | c/planarityApp/planarityHelp.c \ 79 | c/planarityApp/planarityMenu.c \ 80 | c/planarityApp/planarityRandomGraphs.c \ 81 | c/planarityApp/planaritySpecificGraph.c \ 82 | c/planarityApp/planarityTransformGraph.c \ 83 | c/planarityApp/planarityTestAllGraphs.c \ 84 | c/planarityApp/planarityUtils.c 85 | 86 | man1_MANS = c/planarityApp/planarity.1 87 | EXTRA_DIST=$(man1_MANS) 88 | 89 | TESTS = test-samples.sh 90 | 91 | # The @docdir@ variable will be replaced by the ./configure script. 92 | docdir = @docdir@ 93 | dist_doc_DATA = README.md LICENSE.TXT 94 | 95 | pkgconfigdir = $(libdir)/pkgconfig 96 | pkgconfig_DATA = libplanarity.pc 97 | -------------------------------------------------------------------------------- /TestSupport/generate_graphs.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | REM Change to correspond to the location of the geng executable 3 | SET gengPath="C:\Users\wbkbo\git\nauty\geng.exe" 4 | 5 | REM Change to correspond to the root output directory 6 | SET graphOutputDir="E:\graphs" 7 | 8 | SET /A N=11 9 | IF NOT "%1"=="" ( 10 | SET N=%1 11 | ) 12 | 13 | SET /A MAXM = (%N% * (%N% - 1^)) / 2 14 | 15 | IF NOT EXIST "%graphOutputDir%\%N%" mkdir "%graphOutputDir%\%N%" 16 | 17 | REM Make sure to update the path to the geng executable and the directory to which you wish to write the generated graphs 18 | FOR /L %%M IN (0,1,%MAXM%) DO ( 19 | START /B "geng%%M" %gengPath% %N% %%M:%%M > "%graphOutputDir%\%N%\n%N%.m%%M.g6" 20 | ) 21 | -------------------------------------------------------------------------------- /TestSupport/planarity_runner.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | 3 | REM Change to correspond to the location of the planarity executable 4 | SET planarityPath="C:\Users\wbkbo\git\edge-addition-planarity-suite-fork\Release\planarity.exe" 5 | 6 | REM Change to correspond to the parent of the test files directory 7 | SET graphFilesDir="E:\graphs" 8 | 9 | REM Change to correspond to the root output directory 10 | SET outputDir="C:\Users\wbkbo\git\edge-addition-planarity-suite-fork\TestSupport\results" 11 | 12 | SET /A N=11 13 | SET C=p 14 | IF NOT "%1"=="" ( 15 | SET N=%1 16 | IF NOT "%2"=="" ( 17 | SET C=%2 18 | ) 19 | ) 20 | 21 | IF NOT EXIST "%outputDir%\%N%\%C%" mkdir "%outputDir%\%N%\%C%" 22 | 23 | SET /A MAXM = (%N% * (%N% - 1^)) / 2 24 | 25 | FOR /L %%M IN (0,1,%MAXM%) DO ( 26 | CALL %planarityPath% -t -%C% "%graphFilesDir%\%N%\test.n%N%.m%%M.g6" "%outputDir%\%N%\%C%\n%N%.m%%M.%C%.out.txt" 27 | ) 28 | -------------------------------------------------------------------------------- /TestSupport/planaritytesting/__init__.py: -------------------------------------------------------------------------------- 1 | """Tools to help investigate K_{3, 3} search graph algorithm extension bug""" 2 | 3 | __all__ = [ 4 | "planaritytesting_utils", 5 | "graph_generation_orchestrator", 6 | "planarity_testAllGraphs_orchestrator", 7 | "g6_diff_finder", 8 | "planarity_testAllGraphs_output_parsing", 9 | "graph", 10 | "edge_deletion_analysis", 11 | "test_table_generator", 12 | ] 13 | 14 | import logging 15 | 16 | from . import planaritytesting_utils 17 | from . import graph_generation_orchestrator 18 | from . import planarity_testAllGraphs_orchestrator 19 | from . import g6_diff_finder 20 | from . import planarity_testAllGraphs_output_parsing 21 | from . import graph 22 | from . import edge_deletion_analysis 23 | from . import test_table_generator 24 | 25 | # This ensures that no logging occurs by default unless a logger has been 26 | # properly configured on a per-module basis 27 | logging.getLogger(__name__).addHandler(logging.NullHandler()) 28 | -------------------------------------------------------------------------------- /TestSupport/tables/10/n10.mALL.d.out.txt: -------------------------------------------------------------------------------- 1 | | Input filename | # Edges | # Graphs | # OK | # NONEMBEDDABLE |Error flag| Duration | 2 | |================|=========|==========|=========|=================|==========|==========| 3 | |n10.m0.g6 |0 |1 |1 |0 |SUCCESS |0.0 | 4 | |n10.m1.g6 |1 |1 |1 |0 |SUCCESS |0.0 | 5 | |n10.m2.g6 |2 |2 |2 |0 |SUCCESS |0.0 | 6 | |n10.m3.g6 |3 |5 |5 |0 |SUCCESS |0.0 | 7 | |n10.m4.g6 |4 |11 |11 |0 |SUCCESS |0.0 | 8 | |n10.m5.g6 |5 |26 |26 |0 |SUCCESS |0.0 | 9 | |n10.m6.g6 |6 |66 |66 |0 |SUCCESS |0.0 | 10 | |n10.m7.g6 |7 |165 |165 |0 |SUCCESS |0.0 | 11 | |n10.m8.g6 |8 |428 |428 |0 |SUCCESS |0.015 | 12 | |n10.m9.g6 |9 |1103 |1102 |1 |SUCCESS |0.0 | 13 | |n10.m10.g6 |10 |2769 |2764 |5 |SUCCESS |0.032 | 14 | |n10.m11.g6 |11 |6759 |6731 |28 |SUCCESS |0.078 | 15 | |n10.m12.g6 |12 |15772 |15610 |162 |SUCCESS |0.157 | 16 | |n10.m13.g6 |13 |34663 |33724 |939 |SUCCESS |0.359 | 17 | |n10.m14.g6 |14 |71318 |66450 |4868 |SUCCESS |0.687 | 18 | |n10.m15.g6 |15 |136433 |115473 |20960 |SUCCESS |1.422 | 19 | |n10.m16.g6 |16 |241577 |171162 |70415 |SUCCESS |2.453 | 20 | |n10.m17.g6 |17 |395166 |209599 |185567 |SUCCESS |3.609 | 21 | |n10.m18.g6 |18 |596191 |206850 |389341 |SUCCESS |4.14 | 22 | |n10.m19.g6 |19 |828728 |160060 |668668 |SUCCESS |5.031 | 23 | |n10.m20.g6 |20 |1061159 |94699 |966460 |SUCCESS |5.453 | 24 | |n10.m21.g6 |21 |1251389 |41054 |1210335 |SUCCESS |6.422 | 25 | |n10.m22.g6 |22 |1358852 |12394 |1346458 |SUCCESS |6.797 | 26 | |n10.m23.g6 |23 |1358852 |2306 |1356546 |SUCCESS |5.953 | 27 | |n10.m24.g6 |24 |1251389 |233 |1251156 |SUCCESS |6.047 | 28 | |n10.m25.g6 |25 |1061159 |0 |1061159 |SUCCESS |5.312 | 29 | |n10.m26.g6 |26 |828728 |0 |828728 |SUCCESS |3.469 | 30 | |n10.m27.g6 |27 |596191 |0 |596191 |SUCCESS |3.407 | 31 | |n10.m28.g6 |28 |395166 |0 |395166 |SUCCESS |2.265 | 32 | |n10.m29.g6 |29 |241577 |0 |241577 |SUCCESS |1.281 | 33 | |n10.m30.g6 |30 |136433 |0 |136433 |SUCCESS |0.765 | 34 | |n10.m31.g6 |31 |71318 |0 |71318 |SUCCESS |0.406 | 35 | |n10.m32.g6 |32 |34663 |0 |34663 |SUCCESS |0.156 | 36 | |n10.m33.g6 |33 |15772 |0 |15772 |SUCCESS |0.078 | 37 | |n10.m34.g6 |34 |6759 |0 |6759 |SUCCESS |0.031 | 38 | |n10.m35.g6 |35 |2769 |0 |2769 |SUCCESS |0.016 | 39 | |n10.m36.g6 |36 |1103 |0 |1103 |SUCCESS |0.016 | 40 | |n10.m37.g6 |37 |428 |0 |428 |SUCCESS |0.0 | 41 | |n10.m38.g6 |38 |165 |0 |165 |SUCCESS |0.0 | 42 | |n10.m39.g6 |39 |66 |0 |66 |SUCCESS |0.0 | 43 | |n10.m40.g6 |40 |26 |0 |26 |SUCCESS |0.0 | 44 | |n10.m41.g6 |41 |11 |0 |11 |SUCCESS |0.0 | 45 | |n10.m42.g6 |42 |5 |0 |5 |SUCCESS |0.0 | 46 | |n10.m43.g6 |43 |2 |0 |2 |SUCCESS |0.0 | 47 | |n10.m44.g6 |44 |1 |0 |1 |SUCCESS |0.0 | 48 | |n10.m45.g6 |45 |1 |0 |1 |SUCCESS |0.0 | 49 | |================|=========|==========|=========|=================|==========|==========| 50 | |TOTALS |12005168 |1140916 |10864252 |46 |65.857 | 51 | -------------------------------------------------------------------------------- /TestSupport/tables/10/n10.mALL.o.out.txt: -------------------------------------------------------------------------------- 1 | | Input filename | # Edges | # Graphs | # OK | # NONEMBEDDABLE |Error flag| Duration | 2 | |================|=========|==========|=======|=================|==========|==========| 3 | |n10.m0.g6 |0 |1 |1 |0 |SUCCESS |0.0 | 4 | |n10.m1.g6 |1 |1 |1 |0 |SUCCESS |0.0 | 5 | |n10.m2.g6 |2 |2 |2 |0 |SUCCESS |0.0 | 6 | |n10.m3.g6 |3 |5 |5 |0 |SUCCESS |0.016 | 7 | |n10.m4.g6 |4 |11 |11 |0 |SUCCESS |0.0 | 8 | |n10.m5.g6 |5 |26 |26 |0 |SUCCESS |0.0 | 9 | |n10.m6.g6 |6 |66 |64 |2 |SUCCESS |0.0 | 10 | |n10.m7.g6 |7 |165 |157 |8 |SUCCESS |0.0 | 11 | |n10.m8.g6 |8 |428 |390 |38 |SUCCESS |0.0 | 12 | |n10.m9.g6 |9 |1103 |934 |169 |SUCCESS |0.016 | 13 | |n10.m10.g6 |10 |2769 |2043 |726 |SUCCESS |0.016 | 14 | |n10.m11.g6 |11 |6759 |3849 |2910 |SUCCESS |0.016 | 15 | |n10.m12.g6 |12 |15772 |5686 |10086 |SUCCESS |0.078 | 16 | |n10.m13.g6 |13 |34663 |6187 |28476 |SUCCESS |0.203 | 17 | |n10.m14.g6 |14 |71318 |4612 |66706 |SUCCESS |0.484 | 18 | |n10.m15.g6 |15 |136433 |2250 |134183 |SUCCESS |0.671 | 19 | |n10.m16.g6 |16 |241577 |618 |240959 |SUCCESS |1.329 | 20 | |n10.m17.g6 |17 |395166 |82 |395084 |SUCCESS |1.984 | 21 | |n10.m18.g6 |18 |596191 |0 |596191 |SUCCESS |3.157 | 22 | |n10.m19.g6 |19 |828728 |0 |828728 |SUCCESS |4.766 | 23 | |n10.m20.g6 |20 |1061159 |0 |1061159 |SUCCESS |5.703 | 24 | |n10.m21.g6 |21 |1251389 |0 |1251389 |SUCCESS |6.516 | 25 | |n10.m22.g6 |22 |1358852 |0 |1358852 |SUCCESS |7.969 | 26 | |n10.m23.g6 |23 |1358852 |0 |1358852 |SUCCESS |7.297 | 27 | |n10.m24.g6 |24 |1251389 |0 |1251389 |SUCCESS |6.641 | 28 | |n10.m25.g6 |25 |1061159 |0 |1061159 |SUCCESS |6.203 | 29 | |n10.m26.g6 |26 |828728 |0 |828728 |SUCCESS |4.75 | 30 | |n10.m27.g6 |27 |596191 |0 |596191 |SUCCESS |3.641 | 31 | |n10.m28.g6 |28 |395166 |0 |395166 |SUCCESS |2.422 | 32 | |n10.m29.g6 |29 |241577 |0 |241577 |SUCCESS |1.672 | 33 | |n10.m30.g6 |30 |136433 |0 |136433 |SUCCESS |0.969 | 34 | |n10.m31.g6 |31 |71318 |0 |71318 |SUCCESS |0.5 | 35 | |n10.m32.g6 |32 |34663 |0 |34663 |SUCCESS |0.266 | 36 | |n10.m33.g6 |33 |15772 |0 |15772 |SUCCESS |0.093 | 37 | |n10.m34.g6 |34 |6759 |0 |6759 |SUCCESS |0.047 | 38 | |n10.m35.g6 |35 |2769 |0 |2769 |SUCCESS |0.016 | 39 | |n10.m36.g6 |36 |1103 |0 |1103 |SUCCESS |0.0 | 40 | |n10.m37.g6 |37 |428 |0 |428 |SUCCESS |0.0 | 41 | |n10.m38.g6 |38 |165 |0 |165 |SUCCESS |0.0 | 42 | |n10.m39.g6 |39 |66 |0 |66 |SUCCESS |0.0 | 43 | |n10.m40.g6 |40 |26 |0 |26 |SUCCESS |0.0 | 44 | |n10.m41.g6 |41 |11 |0 |11 |SUCCESS |0.0 | 45 | |n10.m42.g6 |42 |5 |0 |5 |SUCCESS |0.0 | 46 | |n10.m43.g6 |43 |2 |0 |2 |SUCCESS |0.0 | 47 | |n10.m44.g6 |44 |1 |0 |1 |SUCCESS |0.0 | 48 | |n10.m45.g6 |45 |1 |0 |1 |SUCCESS |0.0 | 49 | |================|=========|==========|=======|=================|==========|==========| 50 | |TOTALS |12005168 |26918 |11978250 |46 |67.441 | 51 | -------------------------------------------------------------------------------- /TestSupport/tables/10/n10.mALL.p.out.txt: -------------------------------------------------------------------------------- 1 | | Input filename | # Edges | # Graphs | # OK | # NONEMBEDDABLE |Error flag| Duration | 2 | |================|=========|==========|=========|=================|==========|==========| 3 | |n10.m0.g6 |0 |1 |1 |0 |SUCCESS |0.0 | 4 | |n10.m1.g6 |1 |1 |1 |0 |SUCCESS |0.0 | 5 | |n10.m2.g6 |2 |2 |2 |0 |SUCCESS |0.0 | 6 | |n10.m3.g6 |3 |5 |5 |0 |SUCCESS |0.0 | 7 | |n10.m4.g6 |4 |11 |11 |0 |SUCCESS |0.0 | 8 | |n10.m5.g6 |5 |26 |26 |0 |SUCCESS |0.0 | 9 | |n10.m6.g6 |6 |66 |66 |0 |SUCCESS |0.015 | 10 | |n10.m7.g6 |7 |165 |165 |0 |SUCCESS |0.016 | 11 | |n10.m8.g6 |8 |428 |428 |0 |SUCCESS |0.0 | 12 | |n10.m9.g6 |9 |1103 |1102 |1 |SUCCESS |0.016 | 13 | |n10.m10.g6 |10 |2769 |2764 |5 |SUCCESS |0.016 | 14 | |n10.m11.g6 |11 |6759 |6731 |28 |SUCCESS |0.047 | 15 | |n10.m12.g6 |12 |15772 |15610 |162 |SUCCESS |0.094 | 16 | |n10.m13.g6 |13 |34663 |33724 |939 |SUCCESS |0.187 | 17 | |n10.m14.g6 |14 |71318 |66450 |4868 |SUCCESS |0.359 | 18 | |n10.m15.g6 |15 |136433 |115473 |20960 |SUCCESS |0.75 | 19 | |n10.m16.g6 |16 |241577 |171162 |70415 |SUCCESS |1.5 | 20 | |n10.m17.g6 |17 |395166 |209599 |185567 |SUCCESS |2.281 | 21 | |n10.m18.g6 |18 |596191 |206850 |389341 |SUCCESS |3.765 | 22 | |n10.m19.g6 |19 |828728 |160060 |668668 |SUCCESS |4.579 | 23 | |n10.m20.g6 |20 |1061159 |94699 |966460 |SUCCESS |6.266 | 24 | |n10.m21.g6 |21 |1251389 |41054 |1210335 |SUCCESS |7.219 | 25 | |n10.m22.g6 |22 |1358852 |12394 |1346458 |SUCCESS |7.781 | 26 | |n10.m23.g6 |23 |1358852 |2306 |1356546 |SUCCESS |8.219 | 27 | |n10.m24.g6 |24 |1251389 |233 |1251156 |SUCCESS |7.907 | 28 | |n10.m25.g6 |25 |1061159 |0 |1061159 |SUCCESS |6.281 | 29 | |n10.m26.g6 |26 |828728 |0 |828728 |SUCCESS |5.109 | 30 | |n10.m27.g6 |27 |596191 |0 |596191 |SUCCESS |3.516 | 31 | |n10.m28.g6 |28 |395166 |0 |395166 |SUCCESS |2.516 | 32 | |n10.m29.g6 |29 |241577 |0 |241577 |SUCCESS |1.735 | 33 | |n10.m30.g6 |30 |136433 |0 |136433 |SUCCESS |1.047 | 34 | |n10.m31.g6 |31 |71318 |0 |71318 |SUCCESS |0.516 | 35 | |n10.m32.g6 |32 |34663 |0 |34663 |SUCCESS |0.25 | 36 | |n10.m33.g6 |33 |15772 |0 |15772 |SUCCESS |0.14 | 37 | |n10.m34.g6 |34 |6759 |0 |6759 |SUCCESS |0.063 | 38 | |n10.m35.g6 |35 |2769 |0 |2769 |SUCCESS |0.032 | 39 | |n10.m36.g6 |36 |1103 |0 |1103 |SUCCESS |0.015 | 40 | |n10.m37.g6 |37 |428 |0 |428 |SUCCESS |0.016 | 41 | |n10.m38.g6 |38 |165 |0 |165 |SUCCESS |0.0 | 42 | |n10.m39.g6 |39 |66 |0 |66 |SUCCESS |0.016 | 43 | |n10.m40.g6 |40 |26 |0 |26 |SUCCESS |0.016 | 44 | |n10.m41.g6 |41 |11 |0 |11 |SUCCESS |0.0 | 45 | |n10.m42.g6 |42 |5 |0 |5 |SUCCESS |0.0 | 46 | |n10.m43.g6 |43 |2 |0 |2 |SUCCESS |0.0 | 47 | |n10.m44.g6 |44 |1 |0 |1 |SUCCESS |0.0 | 48 | |n10.m45.g6 |45 |1 |0 |1 |SUCCESS |0.0 | 49 | |================|=========|==========|=========|=================|==========|==========| 50 | |TOTALS |12005168 |1140916 |10864252 |46 |72.285 | 51 | -------------------------------------------------------------------------------- /TestSupport/tables/5/n5.mALL.2.out.txt: -------------------------------------------------------------------------------- 1 | | Input filename | # Edges | # Graphs | # OK | # NONEMBEDDABLE |Error flag| Duration | # Invalid OK | EDA Proc Time | EDA Total Time | 2 | |================|=========|==========|======|=================|==========|==========|==============|===============|================| 3 | |n5.m0.g6 |0 |1 |1 |0 |SUCCESS |0.0 |0 |0.000 |0.021 | 4 | |n5.m1.g6 |1 |1 |1 |0 |SUCCESS |0.0 |0 |0.016 |0.021 | 5 | |n5.m2.g6 |2 |2 |2 |0 |SUCCESS |0.0 |0 |0.031 |0.040 | 6 | |n5.m3.g6 |3 |4 |4 |0 |SUCCESS |0.0 |0 |0.031 |0.077 | 7 | |n5.m4.g6 |4 |6 |6 |0 |SUCCESS |0.0 |0 |0.031 |0.115 | 8 | |n5.m5.g6 |5 |6 |6 |0 |SUCCESS |0.0 |0 |0.078 |0.112 | 9 | |n5.m6.g6 |6 |6 |5 |1 |SUCCESS |0.0 |0 |0.000 |0.152 | 10 | |n5.m7.g6 |7 |4 |2 |2 |SUCCESS |0.0 |0 |0.031 |0.124 | 11 | |n5.m8.g6 |8 |2 |0 |2 |SUCCESS |0.016 |0 |0.000 |0.029 | 12 | |n5.m9.g6 |9 |1 |0 |1 |SUCCESS |0.0 |0 |0.000 |0.013 | 13 | |n5.m10.g6 |10 |1 |0 |1 |SUCCESS |0.0 |0 |0.000 |0.014 | 14 | |================|=========|==========|======|=================|==========|==========|==============|===============|================| 15 | |TOTALS |34 |27 |7 |11 |0.016 |0 |0.219 |0.718 | 16 | -------------------------------------------------------------------------------- /TestSupport/tables/5/n5.mALL.3.out.txt: -------------------------------------------------------------------------------- 1 | | Input filename | # Edges | # Graphs | # OK | # NONEMBEDDABLE |Error flag| Duration | # Invalid OK | EDA Proc Time | EDA Total Time | 2 | |================|=========|==========|======|=================|==========|==========|==============|===============|====================| 3 | |n5.m0.g6 |0 |1 |1 |0 |SUCCESS |0.0 |0 |0.000 |0.019 | 4 | |n5.m1.g6 |1 |1 |1 |0 |SUCCESS |0.0 |0 |0.000 |0.020 | 5 | |n5.m2.g6 |2 |2 |2 |0 |SUCCESS |0.0 |0 |0.000 |0.039 | 6 | |n5.m3.g6 |3 |4 |4 |0 |SUCCESS |0.0 |0 |0.016 |0.073 | 7 | |n5.m4.g6 |4 |6 |6 |0 |SUCCESS |0.016 |0 |0.047 |0.117 | 8 | |n5.m5.g6 |5 |6 |6 |0 |SUCCESS |0.0 |0 |0.031 |0.118 | 9 | |n5.m6.g6 |6 |6 |6 |0 |SUCCESS |0.0 |0 |0.031 |0.115 | 10 | |n5.m7.g6 |7 |4 |4 |0 |SUCCESS |0.0 |0 |0.000 |0.077 | 11 | |n5.m8.g6 |8 |2 |2 |0 |SUCCESS |0.016 |0 |0.031 |0.040 | 12 | |n5.m9.g6 |9 |1 |1 |0 |SUCCESS |0.0 |0 |0.000 |0.021 | 13 | |n5.m10.g6 |10 |1 |1 |0 |SUCCESS |0.0 |0 |0.016 |0.089 | 14 | |================|=========|==========|======|=================|==========|==========|==============|===============|====================| 15 | |TOTALS |34 |34 |0 |11 |0.032 |0 |0.172 |0.728 | 16 | -------------------------------------------------------------------------------- /TestSupport/tables/5/n5.mALL.4.out.txt: -------------------------------------------------------------------------------- 1 | | Input filename | # Edges | # Graphs | # OK | # NONEMBEDDABLE |Error flag| Duration | # Invalid OK | EDA Proc Time | EDA Total Time | 2 | |================|=========|==========|======|=================|==========|==========|==============|===============|================| 3 | |n5.m0.g6 |0 |1 |1 |0 |SUCCESS |0.0 |0 |0.000 |0.019 | 4 | |n5.m1.g6 |1 |1 |1 |0 |SUCCESS |0.0 |0 |0.016 |0.020 | 5 | |n5.m2.g6 |2 |2 |2 |0 |SUCCESS |0.0 |0 |0.016 |0.035 | 6 | |n5.m3.g6 |3 |4 |4 |0 |SUCCESS |0.0 |0 |0.016 |0.071 | 7 | |n5.m4.g6 |4 |6 |6 |0 |SUCCESS |0.0 |0 |0.031 |0.111 | 8 | |n5.m5.g6 |5 |6 |6 |0 |SUCCESS |0.0 |0 |0.031 |0.110 | 9 | |n5.m6.g6 |6 |6 |5 |1 |SUCCESS |0.0 |0 |0.062 |0.146 | 10 | |n5.m7.g6 |7 |4 |2 |2 |SUCCESS |0.0 |0 |0.062 |0.120 | 11 | |n5.m8.g6 |8 |2 |0 |2 |SUCCESS |0.0 |0 |0.000 |0.027 | 12 | |n5.m9.g6 |9 |1 |0 |1 |SUCCESS |0.0 |0 |0.000 |0.014 | 13 | |n5.m10.g6 |10 |1 |0 |1 |SUCCESS |0.0 |0 |0.000 |0.014 | 14 | |================|=========|==========|======|=================|==========|==========|==============|===============|================| 15 | |TOTALS |34 |27 |7 |11 |0.0 |0 |0.234 |0.689 | 16 | -------------------------------------------------------------------------------- /TestSupport/tables/5/n5.mALL.d.out.txt: -------------------------------------------------------------------------------- 1 | | Input filename | # Edges | # Graphs | # OK | # NONEMBEDDABLE |Error flag| Duration | 2 | |================|=========|==========|======|=================|==========|==========| 3 | |n5.m0.g6 |0 |1 |1 |0 |SUCCESS |0.0 | 4 | |n5.m1.g6 |1 |1 |1 |0 |SUCCESS |0.0 | 5 | |n5.m2.g6 |2 |2 |2 |0 |SUCCESS |0.0 | 6 | |n5.m3.g6 |3 |4 |4 |0 |SUCCESS |0.0 | 7 | |n5.m4.g6 |4 |6 |6 |0 |SUCCESS |0.0 | 8 | |n5.m5.g6 |5 |6 |6 |0 |SUCCESS |0.0 | 9 | |n5.m6.g6 |6 |6 |6 |0 |SUCCESS |0.0 | 10 | |n5.m7.g6 |7 |4 |4 |0 |SUCCESS |0.0 | 11 | |n5.m8.g6 |8 |2 |2 |0 |SUCCESS |0.0 | 12 | |n5.m9.g6 |9 |1 |1 |0 |SUCCESS |0.0 | 13 | |n5.m10.g6 |10 |1 |0 |1 |SUCCESS |0.0 | 14 | |================|=========|==========|======|=================|==========|==========| 15 | |TOTALS |34 |33 |1 |11 |0.0 | 16 | -------------------------------------------------------------------------------- /TestSupport/tables/5/n5.mALL.o.out.txt: -------------------------------------------------------------------------------- 1 | | Input filename | # Edges | # Graphs | # OK | # NONEMBEDDABLE |Error flag| Duration | 2 | |================|=========|==========|======|=================|==========|==========| 3 | |n5.m0.g6 |0 |1 |1 |0 |SUCCESS |0.0 | 4 | |n5.m1.g6 |1 |1 |1 |0 |SUCCESS |0.015 | 5 | |n5.m2.g6 |2 |2 |2 |0 |SUCCESS |0.0 | 6 | |n5.m3.g6 |3 |4 |4 |0 |SUCCESS |0.016 | 7 | |n5.m4.g6 |4 |6 |6 |0 |SUCCESS |0.016 | 8 | |n5.m5.g6 |5 |6 |6 |0 |SUCCESS |0.0 | 9 | |n5.m6.g6 |6 |6 |4 |2 |SUCCESS |0.015 | 10 | |n5.m7.g6 |7 |4 |1 |3 |SUCCESS |0.0 | 11 | |n5.m8.g6 |8 |2 |0 |2 |SUCCESS |0.016 | 12 | |n5.m9.g6 |9 |1 |0 |1 |SUCCESS |0.0 | 13 | |n5.m10.g6 |10 |1 |0 |1 |SUCCESS |0.0 | 14 | |================|=========|==========|======|=================|==========|==========| 15 | |TOTALS |34 |25 |9 |11 |0.078 | 16 | -------------------------------------------------------------------------------- /TestSupport/tables/5/n5.mALL.p.out.txt: -------------------------------------------------------------------------------- 1 | | Input filename | # Edges | # Graphs | # OK | # NONEMBEDDABLE |Error flag| Duration | 2 | |================|=========|==========|======|=================|==========|==========| 3 | |n5.m0.g6 |0 |1 |1 |0 |SUCCESS |0.0 | 4 | |n5.m1.g6 |1 |1 |1 |0 |SUCCESS |0.015 | 5 | |n5.m2.g6 |2 |2 |2 |0 |SUCCESS |0.0 | 6 | |n5.m3.g6 |3 |4 |4 |0 |SUCCESS |0.016 | 7 | |n5.m4.g6 |4 |6 |6 |0 |SUCCESS |0.016 | 8 | |n5.m5.g6 |5 |6 |6 |0 |SUCCESS |0.016 | 9 | |n5.m6.g6 |6 |6 |6 |0 |SUCCESS |0.015 | 10 | |n5.m7.g6 |7 |4 |4 |0 |SUCCESS |0.0 | 11 | |n5.m8.g6 |8 |2 |2 |0 |SUCCESS |0.016 | 12 | |n5.m9.g6 |9 |1 |1 |0 |SUCCESS |0.0 | 13 | |n5.m10.g6 |10 |1 |0 |1 |SUCCESS |0.0 | 14 | |================|=========|==========|======|=================|==========|==========| 15 | |TOTALS |34 |33 |1 |11 |0.094 | 16 | -------------------------------------------------------------------------------- /TestSupport/tables/6/n6.mALL.2.out.txt: -------------------------------------------------------------------------------- 1 | | Input filename | # Edges | # Graphs | # OK | # NONEMBEDDABLE |Error flag| Duration | # Invalid OK | EDA Proc Time | EDA Total Time | 2 | |================|=========|==========|======|=================|==========|==========|==============|===============|================| 3 | |n6.m0.g6 |0 |1 |1 |0 |SUCCESS |0.0 |0 |0.000 |0.020 | 4 | |n6.m1.g6 |1 |1 |1 |0 |SUCCESS |0.0 |0 |0.000 |0.020 | 5 | |n6.m2.g6 |2 |2 |2 |0 |SUCCESS |0.0 |0 |0.000 |0.040 | 6 | |n6.m3.g6 |3 |5 |5 |0 |SUCCESS |0.0 |0 |0.000 |0.095 | 7 | |n6.m4.g6 |4 |9 |9 |0 |SUCCESS |0.0 |0 |0.078 |0.168 | 8 | |n6.m5.g6 |5 |15 |15 |0 |SUCCESS |0.0 |0 |0.078 |0.288 | 9 | |n6.m6.g6 |6 |21 |20 |1 |SUCCESS |0.0 |0 |0.109 |0.437 | 10 | |n6.m7.g6 |7 |24 |19 |5 |SUCCESS |0.0 |0 |0.188 |0.537 | 11 | |n6.m8.g6 |8 |24 |11 |13 |SUCCESS |0.0 |0 |0.156 |0.580 | 12 | |n6.m9.g6 |9 |21 |4 |17 |SUCCESS |0.0 |0 |0.141 |0.389 | 13 | |n6.m10.g6 |10 |15 |0 |15 |SUCCESS |0.0 |0 |0.031 |0.203 | 14 | |n6.m11.g6 |11 |9 |0 |9 |SUCCESS |0.0 |0 |0.047 |0.121 | 15 | |n6.m12.g6 |12 |5 |0 |5 |SUCCESS |0.0 |0 |0.000 |0.065 | 16 | |n6.m13.g6 |13 |2 |0 |2 |SUCCESS |0.0 |0 |0.000 |0.028 | 17 | |n6.m14.g6 |14 |1 |0 |1 |SUCCESS |0.0 |0 |0.016 |0.014 | 18 | |n6.m15.g6 |15 |1 |0 |1 |SUCCESS |0.0 |0 |0.000 |0.015 | 19 | |================|=========|==========|======|=================|==========|==========|==============|===============|================| 20 | |TOTALS |156 |87 |69 |16 |0.0 |0 |0.844 |3.019 | 21 | -------------------------------------------------------------------------------- /TestSupport/tables/6/n6.mALL.3.out.txt: -------------------------------------------------------------------------------- 1 | | Input filename | # Edges | # Graphs | # OK | # NONEMBEDDABLE |Error flag| Duration | # Invalid OK | EDA Proc Time | EDA Total Time | 2 | |================|=========|==========|======|=================|==========|==========|==============|===============|================| 3 | |n6.m0.g6 |0 |1 |1 |0 |SUCCESS |0.0 |0 |0.000 |0.020 | 4 | |n6.m1.g6 |1 |1 |1 |0 |SUCCESS |0.0 |0 |0.000 |0.019 | 5 | |n6.m2.g6 |2 |2 |2 |0 |SUCCESS |0.0 |0 |0.016 |0.039 | 6 | |n6.m3.g6 |3 |5 |5 |0 |SUCCESS |0.0 |0 |0.016 |0.094 | 7 | |n6.m4.g6 |4 |9 |9 |0 |SUCCESS |0.0 |0 |0.047 |0.171 | 8 | |n6.m5.g6 |5 |15 |15 |0 |SUCCESS |0.0 |0 |0.047 |0.286 | 9 | |n6.m6.g6 |6 |21 |21 |0 |SUCCESS |0.0 |0 |0.156 |0.405 | 10 | |n6.m7.g6 |7 |24 |24 |0 |SUCCESS |0.0 |0 |0.109 |0.457 | 11 | |n6.m8.g6 |8 |24 |24 |0 |SUCCESS |0.0 |0 |0.094 |0.457 | 12 | |n6.m9.g6 |9 |21 |20 |1 |SUCCESS |0.016 |0 |0.047 |0.407 | 13 | |n6.m10.g6 |10 |15 |14 |1 |SUCCESS |0.0 |0 |0.094 |0.352 | 14 | |n6.m11.g6 |11 |9 |7 |2 |SUCCESS |0.0 |0 |0.125 |0.318 | 15 | |n6.m12.g6 |12 |5 |3 |2 |SUCCESS |0.0 |0 |0.078 |0.184 | 16 | |n6.m13.g6 |13 |2 |0 |2 |SUCCESS |0.016 |0 |0.000 |0.028 | 17 | |n6.m14.g6 |14 |1 |0 |1 |SUCCESS |0.0 |0 |0.016 |0.014 | 18 | |n6.m15.g6 |15 |1 |0 |1 |SUCCESS |0.0 |0 |0.000 |0.014 | 19 | |================|=========|==========|======|=================|==========|==========|==============|===============|================| 20 | |TOTALS |156 |146 |10 |16 |0.032 |0 |0.844 |3.264 | 21 | -------------------------------------------------------------------------------- /TestSupport/tables/6/n6.mALL.4.out.txt: -------------------------------------------------------------------------------- 1 | | Input filename | # Edges | # Graphs | # OK | # NONEMBEDDABLE |Error flag| Duration | # Invalid OK | EDA Proc Time | EDA Total Time | 2 | |================|=========|==========|======|=================|==========|==========|==============|===============|================| 3 | |n6.m0.g6 |0 |1 |1 |0 |SUCCESS |0.0 |0 |0.000 |0.019 | 4 | |n6.m1.g6 |1 |1 |1 |0 |SUCCESS |0.0 |0 |0.016 |0.018 | 5 | |n6.m2.g6 |2 |2 |2 |0 |SUCCESS |0.0 |0 |0.016 |0.035 | 6 | |n6.m3.g6 |3 |5 |5 |0 |SUCCESS |0.016 |0 |0.031 |0.089 | 7 | |n6.m4.g6 |4 |9 |9 |0 |SUCCESS |0.0 |0 |0.031 |0.162 | 8 | |n6.m5.g6 |5 |15 |15 |0 |SUCCESS |0.0 |0 |0.078 |0.276 | 9 | |n6.m6.g6 |6 |21 |20 |1 |SUCCESS |0.0 |0 |0.172 |0.421 | 10 | |n6.m7.g6 |7 |24 |21 |3 |SUCCESS |0.0 |0 |0.203 |0.642 | 11 | |n6.m8.g6 |8 |24 |13 |11 |SUCCESS |0.0 |0 |0.250 |0.796 | 12 | |n6.m9.g6 |9 |21 |5 |16 |SUCCESS |0.0 |0 |0.109 |0.528 | 13 | |n6.m10.g6 |10 |15 |0 |15 |SUCCESS |0.0 |0 |0.016 |0.208 | 14 | |n6.m11.g6 |11 |9 |0 |9 |SUCCESS |0.0 |0 |0.047 |0.125 | 15 | |n6.m12.g6 |12 |5 |0 |5 |SUCCESS |0.0 |0 |0.000 |0.070 | 16 | |n6.m13.g6 |13 |2 |0 |2 |SUCCESS |0.0 |0 |0.016 |0.030 | 17 | |n6.m14.g6 |14 |1 |0 |1 |SUCCESS |0.0 |0 |0.000 |0.015 | 18 | |n6.m15.g6 |15 |1 |0 |1 |SUCCESS |0.0 |0 |0.000 |0.016 | 19 | |================|=========|==========|======|=================|==========|==========|==============|===============|================| 20 | |TOTALS |156 |92 |64 |16 |0.016 |0 |0.984 |3.447 | 21 | -------------------------------------------------------------------------------- /TestSupport/tables/6/n6.mALL.d.out.txt: -------------------------------------------------------------------------------- 1 | | Input filename | # Edges | # Graphs | # OK | # NONEMBEDDABLE |Error flag| Duration | 2 | |================|=========|==========|======|=================|==========|==========| 3 | |n6.m0.g6 |0 |1 |1 |0 |SUCCESS |0.0 | 4 | |n6.m1.g6 |1 |1 |1 |0 |SUCCESS |0.0 | 5 | |n6.m2.g6 |2 |2 |2 |0 |SUCCESS |0.0 | 6 | |n6.m3.g6 |3 |5 |5 |0 |SUCCESS |0.0 | 7 | |n6.m4.g6 |4 |9 |9 |0 |SUCCESS |0.0 | 8 | |n6.m5.g6 |5 |15 |15 |0 |SUCCESS |0.0 | 9 | |n6.m6.g6 |6 |21 |21 |0 |SUCCESS |0.0 | 10 | |n6.m7.g6 |7 |24 |24 |0 |SUCCESS |0.0 | 11 | |n6.m8.g6 |8 |24 |24 |0 |SUCCESS |0.0 | 12 | |n6.m9.g6 |9 |21 |20 |1 |SUCCESS |0.0 | 13 | |n6.m10.g6 |10 |15 |13 |2 |SUCCESS |0.0 | 14 | |n6.m11.g6 |11 |9 |5 |4 |SUCCESS |0.0 | 15 | |n6.m12.g6 |12 |5 |2 |3 |SUCCESS |0.0 | 16 | |n6.m13.g6 |13 |2 |0 |2 |SUCCESS |0.0 | 17 | |n6.m14.g6 |14 |1 |0 |1 |SUCCESS |0.0 | 18 | |n6.m15.g6 |15 |1 |0 |1 |SUCCESS |0.0 | 19 | |================|=========|==========|======|=================|==========|==========| 20 | |TOTALS |156 |142 |14 |16 |0.0 | 21 | -------------------------------------------------------------------------------- /TestSupport/tables/6/n6.mALL.o.out.txt: -------------------------------------------------------------------------------- 1 | | Input filename | # Edges | # Graphs | # OK | # NONEMBEDDABLE |Error flag| Duration | 2 | |================|=========|==========|======|=================|==========|==========| 3 | |n6.m0.g6 |0 |1 |1 |0 |SUCCESS |0.0 | 4 | |n6.m1.g6 |1 |1 |1 |0 |SUCCESS |0.0 | 5 | |n6.m2.g6 |2 |2 |2 |0 |SUCCESS |0.0 | 6 | |n6.m3.g6 |3 |5 |5 |0 |SUCCESS |0.0 | 7 | |n6.m4.g6 |4 |9 |9 |0 |SUCCESS |0.0 | 8 | |n6.m5.g6 |5 |15 |15 |0 |SUCCESS |0.0 | 9 | |n6.m6.g6 |6 |21 |19 |2 |SUCCESS |0.0 | 10 | |n6.m7.g6 |7 |24 |17 |7 |SUCCESS |0.015 | 11 | |n6.m8.g6 |8 |24 |8 |16 |SUCCESS |0.0 | 12 | |n6.m9.g6 |9 |21 |3 |18 |SUCCESS |0.016 | 13 | |n6.m10.g6 |10 |15 |0 |15 |SUCCESS |0.0 | 14 | |n6.m11.g6 |11 |9 |0 |9 |SUCCESS |0.015 | 15 | |n6.m12.g6 |12 |5 |0 |5 |SUCCESS |0.0 | 16 | |n6.m13.g6 |13 |2 |0 |2 |SUCCESS |0.016 | 17 | |n6.m14.g6 |14 |1 |0 |1 |SUCCESS |0.0 | 18 | |n6.m15.g6 |15 |1 |0 |1 |SUCCESS |0.0 | 19 | |================|=========|==========|======|=================|==========|==========| 20 | |TOTALS |156 |80 |76 |16 |0.062 | 21 | -------------------------------------------------------------------------------- /TestSupport/tables/6/n6.mALL.p.out.txt: -------------------------------------------------------------------------------- 1 | | Input filename | # Edges | # Graphs | # OK | # NONEMBEDDABLE |Error flag| Duration | 2 | |================|=========|==========|======|=================|==========|==========| 3 | |n6.m0.g6 |0 |1 |1 |0 |SUCCESS |0.0 | 4 | |n6.m1.g6 |1 |1 |1 |0 |SUCCESS |0.0 | 5 | |n6.m2.g6 |2 |2 |2 |0 |SUCCESS |0.0 | 6 | |n6.m3.g6 |3 |5 |5 |0 |SUCCESS |0.0 | 7 | |n6.m4.g6 |4 |9 |9 |0 |SUCCESS |0.0 | 8 | |n6.m5.g6 |5 |15 |15 |0 |SUCCESS |0.016 | 9 | |n6.m6.g6 |6 |21 |21 |0 |SUCCESS |0.0 | 10 | |n6.m7.g6 |7 |24 |24 |0 |SUCCESS |0.015 | 11 | |n6.m8.g6 |8 |24 |24 |0 |SUCCESS |0.0 | 12 | |n6.m9.g6 |9 |21 |20 |1 |SUCCESS |0.016 | 13 | |n6.m10.g6 |10 |15 |13 |2 |SUCCESS |0.0 | 14 | |n6.m11.g6 |11 |9 |5 |4 |SUCCESS |0.015 | 15 | |n6.m12.g6 |12 |5 |2 |3 |SUCCESS |0.0 | 16 | |n6.m13.g6 |13 |2 |0 |2 |SUCCESS |0.016 | 17 | |n6.m14.g6 |14 |1 |0 |1 |SUCCESS |0.0 | 18 | |n6.m15.g6 |15 |1 |0 |1 |SUCCESS |0.0 | 19 | |================|=========|==========|======|=================|==========|==========| 20 | |TOTALS |156 |142 |14 |16 |0.078 | 21 | -------------------------------------------------------------------------------- /TestSupport/tables/7/n7.mALL.2.out.txt: -------------------------------------------------------------------------------- 1 | | Input filename | # Edges | # Graphs | # OK | # NONEMBEDDABLE |Error flag| Duration | # Invalid OK | EDA Proc Time | EDA Total Time | 2 | |================|=========|==========|======|=================|==========|==========|==============|===============|================| 3 | |n7.m0.g6 |0 |1 |1 |0 |SUCCESS |0.0 |0 |0.000 |0.021 | 4 | |n7.m1.g6 |1 |1 |1 |0 |SUCCESS |0.016 |0 |0.000 |0.021 | 5 | |n7.m2.g6 |2 |2 |2 |0 |SUCCESS |0.0 |0 |0.000 |0.040 | 6 | |n7.m3.g6 |3 |5 |5 |0 |SUCCESS |0.0 |0 |0.000 |0.101 | 7 | |n7.m4.g6 |4 |10 |10 |0 |SUCCESS |0.015 |0 |0.047 |0.196 | 8 | |n7.m5.g6 |5 |21 |21 |0 |SUCCESS |0.015 |0 |0.094 |0.415 | 9 | |n7.m6.g6 |6 |41 |40 |1 |SUCCESS |0.0 |0 |0.234 |0.867 | 10 | |n7.m7.g6 |7 |65 |59 |6 |SUCCESS |0.016 |0 |0.297 |1.350 | 11 | |n7.m8.g6 |8 |97 |70 |27 |SUCCESS |0.0 |0 |0.500 |2.106 | 12 | |n7.m9.g6 |9 |131 |59 |72 |SUCCESS |0.0 |0 |0.844 |3.879 | 13 | |n7.m10.g6 |10 |148 |27 |121 |SUCCESS |0.015 |0 |0.734 |2.560 | 14 | |n7.m11.g6 |11 |148 |6 |142 |SUCCESS |0.016 |0 |0.562 |2.189 | 15 | |n7.m12.g6 |12 |131 |1 |130 |SUCCESS |0.016 |0 |0.438 |1.874 | 16 | |n7.m13.g6 |13 |97 |0 |97 |SUCCESS |0.0 |0 |0.359 |1.261 | 17 | |n7.m14.g6 |14 |65 |0 |65 |SUCCESS |0.016 |0 |0.234 |0.863 | 18 | |n7.m15.g6 |15 |41 |0 |41 |SUCCESS |0.0 |0 |0.109 |0.587 | 19 | |n7.m16.g6 |16 |21 |0 |21 |SUCCESS |0.016 |0 |0.047 |0.288 | 20 | |n7.m17.g6 |17 |10 |0 |10 |SUCCESS |0.0 |0 |0.047 |0.133 | 21 | |n7.m18.g6 |18 |5 |0 |5 |SUCCESS |0.016 |0 |0.031 |0.067 | 22 | |n7.m19.g6 |19 |2 |0 |2 |SUCCESS |0.016 |0 |0.000 |0.027 | 23 | |n7.m20.g6 |20 |1 |0 |1 |SUCCESS |0.0 |0 |0.000 |0.013 | 24 | |n7.m21.g6 |21 |1 |0 |1 |SUCCESS |0.015 |0 |0.000 |0.013 | 25 | |================|=========|==========|======|=================|==========|==========|==============|===============|================| 26 | |TOTALS |1044 |302 |742 |22 |0.188 |0 |4.578 |18.870 | 27 | -------------------------------------------------------------------------------- /TestSupport/tables/7/n7.mALL.3.out.txt: -------------------------------------------------------------------------------- 1 | | Input filename | # Edges | # Graphs | # OK | # NONEMBEDDABLE |Error flag| Duration | # Invalid OK | EDA Proc Time | EDA Total Time | 2 | |================|=========|==========|======|=================|==========|==========|==============|===============|================| 3 | |n7.m0.g6 |0 |1 |1 |0 |SUCCESS |0.0 |0 |0.000 |0.019 | 4 | |n7.m1.g6 |1 |1 |1 |0 |SUCCESS |0.0 |0 |0.031 |0.019 | 5 | |n7.m2.g6 |2 |2 |2 |0 |SUCCESS |0.0 |0 |0.016 |0.040 | 6 | |n7.m3.g6 |3 |5 |5 |0 |SUCCESS |0.0 |0 |0.047 |0.095 | 7 | |n7.m4.g6 |4 |10 |10 |0 |SUCCESS |0.0 |0 |0.078 |0.188 | 8 | |n7.m5.g6 |5 |21 |21 |0 |SUCCESS |0.0 |0 |0.062 |0.389 | 9 | |n7.m6.g6 |6 |41 |41 |0 |SUCCESS |0.0 |0 |0.281 |0.802 | 10 | |n7.m7.g6 |7 |65 |65 |0 |SUCCESS |0.0 |0 |0.375 |1.272 | 11 | |n7.m8.g6 |8 |97 |97 |0 |SUCCESS |0.0 |0 |0.531 |1.910 | 12 | |n7.m9.g6 |9 |131 |130 |1 |SUCCESS |0.0 |0 |0.688 |2.544 | 13 | |n7.m10.g6 |10 |148 |145 |3 |SUCCESS |0.0 |0 |0.734 |2.954 | 14 | |n7.m11.g6 |11 |148 |138 |10 |SUCCESS |0.0 |0 |0.625 |3.077 | 15 | |n7.m12.g6 |12 |131 |108 |23 |SUCCESS |0.0 |0 |0.875 |3.276 | 16 | |n7.m13.g6 |13 |97 |60 |37 |SUCCESS |0.0 |0 |0.656 |2.708 | 17 | |n7.m14.g6 |14 |65 |21 |44 |SUCCESS |0.0 |0 |0.375 |1.672 | 18 | |n7.m15.g6 |15 |41 |6 |35 |SUCCESS |0.0 |0 |0.203 |0.749 | 19 | |n7.m16.g6 |16 |21 |0 |21 |SUCCESS |0.0 |0 |0.078 |0.289 | 20 | |n7.m17.g6 |17 |10 |0 |10 |SUCCESS |0.0 |0 |0.016 |0.137 | 21 | |n7.m18.g6 |18 |5 |0 |5 |SUCCESS |0.0 |0 |0.016 |0.070 | 22 | |n7.m19.g6 |19 |2 |0 |2 |SUCCESS |0.0 |0 |0.000 |0.029 | 23 | |n7.m20.g6 |20 |1 |0 |1 |SUCCESS |0.0 |0 |0.016 |0.016 | 24 | |n7.m21.g6 |21 |1 |0 |1 |SUCCESS |0.0 |0 |0.016 |0.014 | 25 | |================|=========|==========|======|=================|==========|==========|==============|===============|================| 26 | |TOTALS |1044 |851 |193 |22 |0.0 |0 |5.719 |22.269 | 27 | -------------------------------------------------------------------------------- /TestSupport/tables/7/n7.mALL.4.out.txt: -------------------------------------------------------------------------------- 1 | | Input filename | # Edges | # Graphs | # OK | # NONEMBEDDABLE |Error flag| Duration | # Invalid OK | EDA Proc Time | EDA Total Time | 2 | |================|=========|==========|======|=================|==========|==========|==============|===============|================| 3 | |n7.m0.g6 |0 |1 |1 |0 |SUCCESS |0.0 |0 |0.000 |0.019 | 4 | |n7.m1.g6 |1 |1 |1 |0 |SUCCESS |0.0 |0 |0.000 |0.020 | 5 | |n7.m2.g6 |2 |2 |2 |0 |SUCCESS |0.0 |0 |0.000 |0.036 | 6 | |n7.m3.g6 |3 |5 |5 |0 |SUCCESS |0.0 |0 |0.031 |0.090 | 7 | |n7.m4.g6 |4 |10 |10 |0 |SUCCESS |0.0 |0 |0.031 |0.179 | 8 | |n7.m5.g6 |5 |21 |21 |0 |SUCCESS |0.0 |0 |0.078 |0.368 | 9 | |n7.m6.g6 |6 |41 |40 |1 |SUCCESS |0.0 |0 |0.203 |0.757 | 10 | |n7.m7.g6 |7 |65 |62 |3 |SUCCESS |0.0 |0 |0.328 |1.402 | 11 | |n7.m8.g6 |8 |97 |83 |14 |SUCCESS |0.0 |0 |0.656 |2.848 | 12 | |n7.m9.g6 |9 |131 |79 |52 |SUCCESS |0.0 |0 |1.375 |4.576 | 13 | |n7.m10.g6 |10 |148 |44 |104 |SUCCESS |0.0 |0 |1.469 |4.495 | 14 | |n7.m11.g6 |11 |148 |12 |136 |SUCCESS |0.0 |0 |0.953 |3.008 | 15 | |n7.m12.g6 |12 |131 |0 |131 |SUCCESS |0.0 |0 |0.438 |1.721 | 16 | |n7.m13.g6 |13 |97 |0 |97 |SUCCESS |0.0 |0 |0.281 |1.266 | 17 | |n7.m14.g6 |14 |65 |0 |65 |SUCCESS |0.0 |0 |0.234 |0.860 | 18 | |n7.m15.g6 |15 |41 |0 |41 |SUCCESS |0.0 |0 |0.219 |0.539 | 19 | |n7.m16.g6 |16 |21 |0 |21 |SUCCESS |0.0 |0 |0.062 |0.277 | 20 | |n7.m17.g6 |17 |10 |0 |10 |SUCCESS |0.0 |0 |0.000 |0.129 | 21 | |n7.m18.g6 |18 |5 |0 |5 |SUCCESS |0.0 |0 |0.031 |0.067 | 22 | |n7.m19.g6 |19 |2 |0 |2 |SUCCESS |0.0 |0 |0.016 |0.026 | 23 | |n7.m20.g6 |20 |1 |0 |1 |SUCCESS |0.0 |0 |0.000 |0.013 | 24 | |n7.m21.g6 |21 |1 |0 |1 |SUCCESS |0.0 |0 |0.000 |0.013 | 25 | |================|=========|==========|======|=================|==========|==========|==============|===============|================| 26 | |TOTALS |1044 |360 |684 |22 |0.0 |0 |6.406 |22.709 | 27 | -------------------------------------------------------------------------------- /TestSupport/tables/7/n7.mALL.d.out.txt: -------------------------------------------------------------------------------- 1 | | Input filename | # Edges | # Graphs | # OK | # NONEMBEDDABLE |Error flag| Duration | 2 | |================|=========|==========|======|=================|==========|==========| 3 | |n7.m0.g6 |0 |1 |1 |0 |SUCCESS |0.0 | 4 | |n7.m1.g6 |1 |1 |1 |0 |SUCCESS |0.0 | 5 | |n7.m2.g6 |2 |2 |2 |0 |SUCCESS |0.0 | 6 | |n7.m3.g6 |3 |5 |5 |0 |SUCCESS |0.0 | 7 | |n7.m4.g6 |4 |10 |10 |0 |SUCCESS |0.0 | 8 | |n7.m5.g6 |5 |21 |21 |0 |SUCCESS |0.0 | 9 | |n7.m6.g6 |6 |41 |41 |0 |SUCCESS |0.0 | 10 | |n7.m7.g6 |7 |65 |65 |0 |SUCCESS |0.0 | 11 | |n7.m8.g6 |8 |97 |97 |0 |SUCCESS |0.0 | 12 | |n7.m9.g6 |9 |131 |130 |1 |SUCCESS |0.0 | 13 | |n7.m10.g6 |10 |148 |144 |4 |SUCCESS |0.0 | 14 | |n7.m11.g6 |11 |148 |135 |13 |SUCCESS |0.0 | 15 | |n7.m12.g6 |12 |131 |98 |33 |SUCCESS |0.0 | 16 | |n7.m13.g6 |13 |97 |51 |46 |SUCCESS |0.0 | 17 | |n7.m14.g6 |14 |65 |16 |49 |SUCCESS |0.0 | 18 | |n7.m15.g6 |15 |41 |5 |36 |SUCCESS |0.0 | 19 | |n7.m16.g6 |16 |21 |0 |21 |SUCCESS |0.0 | 20 | |n7.m17.g6 |17 |10 |0 |10 |SUCCESS |0.0 | 21 | |n7.m18.g6 |18 |5 |0 |5 |SUCCESS |0.0 | 22 | |n7.m19.g6 |19 |2 |0 |2 |SUCCESS |0.0 | 23 | |n7.m20.g6 |20 |1 |0 |1 |SUCCESS |0.0 | 24 | |n7.m21.g6 |21 |1 |0 |1 |SUCCESS |0.0 | 25 | |================|=========|==========|======|=================|==========|==========| 26 | |TOTALS |1044 |822 |222 |22 |0.0 | 27 | -------------------------------------------------------------------------------- /TestSupport/tables/7/n7.mALL.o.out.txt: -------------------------------------------------------------------------------- 1 | | Input filename | # Edges | # Graphs | # OK | # NONEMBEDDABLE |Error flag| Duration | 2 | |================|=========|==========|======|=================|==========|==========| 3 | |n7.m0.g6 |0 |1 |1 |0 |SUCCESS |0.0 | 4 | |n7.m1.g6 |1 |1 |1 |0 |SUCCESS |0.0 | 5 | |n7.m2.g6 |2 |2 |2 |0 |SUCCESS |0.0 | 6 | |n7.m3.g6 |3 |5 |5 |0 |SUCCESS |0.0 | 7 | |n7.m4.g6 |4 |10 |10 |0 |SUCCESS |0.0 | 8 | |n7.m5.g6 |5 |21 |21 |0 |SUCCESS |0.0 | 9 | |n7.m6.g6 |6 |41 |39 |2 |SUCCESS |0.0 | 10 | |n7.m7.g6 |7 |65 |57 |8 |SUCCESS |0.0 | 11 | |n7.m8.g6 |8 |97 |65 |32 |SUCCESS |0.0 | 12 | |n7.m9.g6 |9 |131 |50 |81 |SUCCESS |0.0 | 13 | |n7.m10.g6 |10 |148 |22 |126 |SUCCESS |0.0 | 14 | |n7.m11.g6 |11 |148 |4 |144 |SUCCESS |0.0 | 15 | |n7.m12.g6 |12 |131 |0 |131 |SUCCESS |0.0 | 16 | |n7.m13.g6 |13 |97 |0 |97 |SUCCESS |0.0 | 17 | |n7.m14.g6 |14 |65 |0 |65 |SUCCESS |0.0 | 18 | |n7.m15.g6 |15 |41 |0 |41 |SUCCESS |0.0 | 19 | |n7.m16.g6 |16 |21 |0 |21 |SUCCESS |0.0 | 20 | |n7.m17.g6 |17 |10 |0 |10 |SUCCESS |0.0 | 21 | |n7.m18.g6 |18 |5 |0 |5 |SUCCESS |0.0 | 22 | |n7.m19.g6 |19 |2 |0 |2 |SUCCESS |0.0 | 23 | |n7.m20.g6 |20 |1 |0 |1 |SUCCESS |0.0 | 24 | |n7.m21.g6 |21 |1 |0 |1 |SUCCESS |0.0 | 25 | |================|=========|==========|======|=================|==========|==========| 26 | |TOTALS |1044 |277 |767 |22 |0.0 | 27 | -------------------------------------------------------------------------------- /TestSupport/tables/7/n7.mALL.p.out.txt: -------------------------------------------------------------------------------- 1 | | Input filename | # Edges | # Graphs | # OK | # NONEMBEDDABLE |Error flag| Duration | 2 | |================|=========|==========|======|=================|==========|==========| 3 | |n7.m0.g6 |0 |1 |1 |0 |SUCCESS |0.0 | 4 | |n7.m1.g6 |1 |1 |1 |0 |SUCCESS |0.016 | 5 | |n7.m2.g6 |2 |2 |2 |0 |SUCCESS |0.016 | 6 | |n7.m3.g6 |3 |5 |5 |0 |SUCCESS |0.016 | 7 | |n7.m4.g6 |4 |10 |10 |0 |SUCCESS |0.015 | 8 | |n7.m5.g6 |5 |21 |21 |0 |SUCCESS |0.015 | 9 | |n7.m6.g6 |6 |41 |41 |0 |SUCCESS |0.0 | 10 | |n7.m7.g6 |7 |65 |65 |0 |SUCCESS |0.016 | 11 | |n7.m8.g6 |8 |97 |97 |0 |SUCCESS |0.0 | 12 | |n7.m9.g6 |9 |131 |130 |1 |SUCCESS |0.016 | 13 | |n7.m10.g6 |10 |148 |144 |4 |SUCCESS |0.015 | 14 | |n7.m11.g6 |11 |148 |135 |13 |SUCCESS |0.016 | 15 | |n7.m12.g6 |12 |131 |98 |33 |SUCCESS |0.016 | 16 | |n7.m13.g6 |13 |97 |51 |46 |SUCCESS |0.0 | 17 | |n7.m14.g6 |14 |65 |16 |49 |SUCCESS |0.016 | 18 | |n7.m15.g6 |15 |41 |5 |36 |SUCCESS |0.0 | 19 | |n7.m16.g6 |16 |21 |0 |21 |SUCCESS |0.016 | 20 | |n7.m17.g6 |17 |10 |0 |10 |SUCCESS |0.016 | 21 | |n7.m18.g6 |18 |5 |0 |5 |SUCCESS |0.016 | 22 | |n7.m19.g6 |19 |2 |0 |2 |SUCCESS |0.016 | 23 | |n7.m20.g6 |20 |1 |0 |1 |SUCCESS |0.0 | 24 | |n7.m21.g6 |21 |1 |0 |1 |SUCCESS |0.015 | 25 | |================|=========|==========|======|=================|==========|==========| 26 | |TOTALS |1044 |822 |222 |22 |0.252 | 27 | -------------------------------------------------------------------------------- /TestSupport/tables/8/n8.mALL.2.out.txt: -------------------------------------------------------------------------------- 1 | | Input filename | # Edges | # Graphs | # OK | # NONEMBEDDABLE |Error flag| Duration | # Invalid OK | EDA Proc Time | EDA Total Time | 2 | |================|=========|==========|======|=================|==========|==========|==============|===============|================| 3 | |n8.m0.g6 |0 |1 |1 |0 |SUCCESS |0.0 |0 |0.016 |0.020 | 4 | |n8.m1.g6 |1 |1 |1 |0 |SUCCESS |0.0 |0 |0.000 |0.019 | 5 | |n8.m2.g6 |2 |2 |2 |0 |SUCCESS |0.0 |0 |0.000 |0.039 | 6 | |n8.m3.g6 |3 |5 |5 |0 |SUCCESS |0.0 |0 |0.031 |0.094 | 7 | |n8.m4.g6 |4 |11 |11 |0 |SUCCESS |0.0 |0 |0.016 |0.207 | 8 | |n8.m5.g6 |5 |24 |24 |0 |SUCCESS |0.0 |0 |0.094 |0.446 | 9 | |n8.m6.g6 |6 |56 |55 |1 |SUCCESS |0.0 |0 |0.297 |1.080 | 10 | |n8.m7.g6 |7 |115 |109 |6 |SUCCESS |0.0 |0 |0.656 |2.325 | 11 | |n8.m8.g6 |8 |221 |190 |31 |SUCCESS |0.0 |0 |1.438 |4.536 | 12 | |n8.m9.g6 |9 |402 |274 |128 |SUCCESS |0.0 |0 |1.984 |31.633 | 13 | |n8.m10.g6 |10 |663 |285 |378 |SUCCESS |0.0 |0 |3.938 |13.422 | 14 | |n8.m11.g6 |11 |980 |197 |783 |SUCCESS |0.0 |0 |4.531 |16.640 | 15 | |n8.m12.g6 |12 |1312 |79 |1233 |SUCCESS |0.0 |0 |5.562 |20.562 | 16 | |n8.m13.g6 |13 |1557 |18 |1539 |SUCCESS |0.016 |0 |5.766 |22.289 | 17 | |n8.m14.g6 |14 |1646 |0 |1646 |SUCCESS |0.015 |0 |6.094 |22.081 | 18 | |n8.m15.g6 |15 |1557 |0 |1557 |SUCCESS |0.0 |0 |5.469 |20.910 | 19 | |n8.m16.g6 |16 |1312 |0 |1312 |SUCCESS |0.0 |0 |4.672 |18.096 | 20 | |n8.m17.g6 |17 |980 |0 |980 |SUCCESS |0.016 |0 |3.547 |13.880 | 21 | |n8.m18.g6 |18 |663 |0 |663 |SUCCESS |0.0 |0 |2.453 |12.722 | 22 | |n8.m19.g6 |19 |402 |0 |402 |SUCCESS |0.0 |0 |1.406 |5.643 | 23 | |n8.m20.g6 |20 |221 |0 |221 |SUCCESS |0.0 |0 |0.797 |3.129 | 24 | |n8.m21.g6 |21 |115 |0 |115 |SUCCESS |0.0 |0 |0.453 |1.607 | 25 | |n8.m22.g6 |22 |56 |0 |56 |SUCCESS |0.0 |0 |0.234 |0.784 | 26 | |n8.m23.g6 |23 |24 |0 |24 |SUCCESS |0.0 |0 |0.094 |0.338 | 27 | |n8.m24.g6 |24 |11 |0 |11 |SUCCESS |0.0 |0 |0.047 |0.153 | 28 | |n8.m25.g6 |25 |5 |0 |5 |SUCCESS |0.0 |0 |0.016 |0.067 | 29 | |n8.m26.g6 |26 |2 |0 |2 |SUCCESS |0.0 |0 |0.000 |0.028 | 30 | |n8.m27.g6 |27 |1 |0 |1 |SUCCESS |0.0 |0 |0.000 |0.014 | 31 | |n8.m28.g6 |28 |1 |0 |1 |SUCCESS |0.0 |0 |0.000 |0.014 | 32 | |================|=========|==========|======|=================|==========|==========|==============|===============|================| 33 | |TOTALS |12346 |1251 |11095 |29 |0.047 |0 |49.609 |212.776 | 34 | -------------------------------------------------------------------------------- /TestSupport/tables/8/n8.mALL.3.out.txt: -------------------------------------------------------------------------------- 1 | | Input filename | # Edges | # Graphs | # OK | # NONEMBEDDABLE |Error flag| Duration | # Invalid OK | EDA Proc Time | EDA Total Time | 2 | |================|=========|==========|======|=================|==========|==========|==============|===============|================| 3 | |n8.m0.g6 |0 |1 |1 |0 |SUCCESS |0.0 |0 |0.000 |0.021 | 4 | |n8.m1.g6 |1 |1 |1 |0 |SUCCESS |0.0 |0 |0.000 |0.020 | 5 | |n8.m2.g6 |2 |2 |2 |0 |SUCCESS |0.0 |0 |0.016 |0.039 | 6 | |n8.m3.g6 |3 |5 |5 |0 |SUCCESS |0.0 |0 |0.047 |0.100 | 7 | |n8.m4.g6 |4 |11 |11 |0 |SUCCESS |0.016 |0 |0.047 |0.223 | 8 | |n8.m5.g6 |5 |24 |24 |0 |SUCCESS |0.0 |0 |0.125 |0.484 | 9 | |n8.m6.g6 |6 |56 |56 |0 |SUCCESS |0.0 |0 |0.219 |1.116 | 10 | |n8.m7.g6 |7 |115 |115 |0 |SUCCESS |0.0 |0 |0.516 |2.388 | 11 | |n8.m8.g6 |8 |221 |221 |0 |SUCCESS |0.015 |0 |1.188 |4.601 | 12 | |n8.m9.g6 |9 |402 |401 |1 |SUCCESS |0.0 |0 |1.938 |8.423 | 13 | |n8.m10.g6 |10 |663 |659 |4 |SUCCESS |0.031 |0 |3.781 |14.562 | 14 | |n8.m11.g6 |11 |980 |959 |21 |SUCCESS |0.0 |0 |5.406 |20.674 | 15 | |n8.m12.g6 |12 |1312 |1230 |82 |SUCCESS |0.032 |0 |6.750 |28.116 | 16 | |n8.m13.g6 |13 |1557 |1310 |247 |SUCCESS |0.015 |0 |9.109 |35.457 | 17 | |n8.m14.g6 |14 |1646 |1109 |537 |SUCCESS |0.032 |0 |10.047 |39.394 | 18 | |n8.m15.g6 |15 |1557 |689 |868 |SUCCESS |0.015 |0 |8.875 |34.850 | 19 | |n8.m16.g6 |16 |1312 |307 |1005 |SUCCESS |0.031 |0 |7.125 |25.652 | 20 | |n8.m17.g6 |17 |980 |82 |898 |SUCCESS |0.0 |0 |4.422 |16.156 | 21 | |n8.m18.g6 |18 |663 |17 |646 |SUCCESS |0.016 |0 |2.438 |10.103 | 22 | |n8.m19.g6 |19 |402 |1 |401 |SUCCESS |0.0 |0 |1.516 |5.922 | 23 | |n8.m20.g6 |20 |221 |0 |221 |SUCCESS |0.016 |0 |0.797 |3.134 | 24 | |n8.m21.g6 |21 |115 |0 |115 |SUCCESS |0.0 |0 |0.484 |1.608 | 25 | |n8.m22.g6 |22 |56 |0 |56 |SUCCESS |0.0 |0 |0.172 |0.787 | 26 | |n8.m23.g6 |23 |24 |0 |24 |SUCCESS |0.0 |0 |0.109 |0.335 | 27 | |n8.m24.g6 |24 |11 |0 |11 |SUCCESS |0.0 |0 |0.062 |0.217 | 28 | |n8.m25.g6 |25 |5 |0 |5 |SUCCESS |0.0 |0 |0.047 |0.073 | 29 | |n8.m26.g6 |26 |2 |0 |2 |SUCCESS |0.0 |0 |0.016 |0.029 | 30 | |n8.m27.g6 |27 |1 |0 |1 |SUCCESS |0.0 |0 |0.016 |0.014 | 31 | |n8.m28.g6 |28 |1 |0 |1 |SUCCESS |0.0 |0 |0.016 |0.014 | 32 | |================|=========|==========|======|=================|==========|==========|==============|===============|================| 33 | |TOTALS |12346 |7200 |5146 |29 |0.219 |0 |65.281 |254.515 | 34 | -------------------------------------------------------------------------------- /TestSupport/tables/8/n8.mALL.4.out.txt: -------------------------------------------------------------------------------- 1 | | Input filename | # Edges | # Graphs | # OK | # NONEMBEDDABLE |Error flag| Duration | # Invalid OK | EDA Proc Time | EDA Total Time | 2 | |================|=========|==========|======|=================|==========|==========|==============|===============|================| 3 | |n8.m0.g6 |0 |1 |1 |0 |SUCCESS |0.0 |0 |0.000 |0.020 | 4 | |n8.m1.g6 |1 |1 |1 |0 |SUCCESS |0.0 |0 |0.016 |0.020 | 5 | |n8.m2.g6 |2 |2 |2 |0 |SUCCESS |0.0 |0 |0.000 |0.040 | 6 | |n8.m3.g6 |3 |5 |5 |0 |SUCCESS |0.0 |0 |0.047 |0.103 | 7 | |n8.m4.g6 |4 |11 |11 |0 |SUCCESS |0.0 |0 |0.047 |0.228 | 8 | |n8.m5.g6 |5 |24 |24 |0 |SUCCESS |0.0 |0 |0.109 |0.493 | 9 | |n8.m6.g6 |6 |56 |55 |1 |SUCCESS |0.0 |0 |0.234 |1.194 | 10 | |n8.m7.g6 |7 |115 |112 |3 |SUCCESS |0.0 |0 |0.609 |2.667 | 11 | |n8.m8.g6 |8 |221 |206 |15 |SUCCESS |0.0 |0 |1.297 |5.948 | 12 | |n8.m9.g6 |9 |402 |337 |65 |SUCCESS |0.0 |0 |3.953 |14.052 | 13 | |n8.m10.g6 |10 |663 |411 |252 |SUCCESS |0.016 |0 |7.250 |27.221 | 14 | |n8.m11.g6 |11 |980 |345 |635 |SUCCESS |0.0 |0 |10.484 |35.927 | 15 | |n8.m12.g6 |12 |1312 |166 |1146 |SUCCESS |0.015 |0 |9.156 |32.939 | 16 | |n8.m13.g6 |13 |1557 |39 |1518 |SUCCESS |0.0 |0 |6.688 |26.015 | 17 | |n8.m14.g6 |14 |1646 |0 |1646 |SUCCESS |0.0 |0 |5.578 |23.025 | 18 | |n8.m15.g6 |15 |1557 |0 |1557 |SUCCESS |0.0 |0 |5.375 |21.793 | 19 | |n8.m16.g6 |16 |1312 |0 |1312 |SUCCESS |0.0 |0 |4.312 |18.348 | 20 | |n8.m17.g6 |17 |980 |0 |980 |SUCCESS |0.0 |0 |3.469 |13.709 | 21 | |n8.m18.g6 |18 |663 |0 |663 |SUCCESS |0.016 |0 |2.312 |9.270 | 22 | |n8.m19.g6 |19 |402 |0 |402 |SUCCESS |0.0 |0 |1.234 |5.652 | 23 | |n8.m20.g6 |20 |221 |0 |221 |SUCCESS |0.015 |0 |0.703 |3.080 | 24 | |n8.m21.g6 |21 |115 |0 |115 |SUCCESS |0.0 |0 |0.359 |1.603 | 25 | |n8.m22.g6 |22 |56 |0 |56 |SUCCESS |0.0 |0 |0.156 |0.781 | 26 | |n8.m23.g6 |23 |24 |0 |24 |SUCCESS |0.0 |0 |0.078 |0.333 | 27 | |n8.m24.g6 |24 |11 |0 |11 |SUCCESS |0.0 |0 |0.047 |0.151 | 28 | |n8.m25.g6 |25 |5 |0 |5 |SUCCESS |0.0 |0 |0.016 |0.066 | 29 | |n8.m26.g6 |26 |2 |0 |2 |SUCCESS |0.0 |0 |0.000 |0.027 | 30 | |n8.m27.g6 |27 |1 |0 |1 |SUCCESS |0.0 |0 |0.000 |0.013 | 31 | |n8.m28.g6 |28 |1 |0 |1 |SUCCESS |0.0 |0 |0.000 |0.013 | 32 | |================|=========|==========|======|=================|==========|==========|==============|===============|================| 33 | |TOTALS |12346 |1715 |10631 |29 |0.062 |0 |63.531 |244.733 | 34 | -------------------------------------------------------------------------------- /TestSupport/tables/8/n8.mALL.d.out.txt: -------------------------------------------------------------------------------- 1 | | Input filename | # Edges | # Graphs | # OK | # NONEMBEDDABLE |Error flag| Duration | 2 | |================|=========|==========|======|=================|==========|==========| 3 | |n8.m0.g6 |0 |1 |1 |0 |SUCCESS |0.016 | 4 | |n8.m1.g6 |1 |1 |1 |0 |SUCCESS |0.0 | 5 | |n8.m2.g6 |2 |2 |2 |0 |SUCCESS |0.0 | 6 | |n8.m3.g6 |3 |5 |5 |0 |SUCCESS |0.0 | 7 | |n8.m4.g6 |4 |11 |11 |0 |SUCCESS |0.0 | 8 | |n8.m5.g6 |5 |24 |24 |0 |SUCCESS |0.0 | 9 | |n8.m6.g6 |6 |56 |56 |0 |SUCCESS |0.0 | 10 | |n8.m7.g6 |7 |115 |115 |0 |SUCCESS |0.0 | 11 | |n8.m8.g6 |8 |221 |221 |0 |SUCCESS |0.0 | 12 | |n8.m9.g6 |9 |402 |401 |1 |SUCCESS |0.0 | 13 | |n8.m10.g6 |10 |663 |658 |5 |SUCCESS |0.016 | 14 | |n8.m11.g6 |11 |980 |956 |24 |SUCCESS |0.0 | 15 | |n8.m12.g6 |12 |1312 |1217 |95 |SUCCESS |0.015 | 16 | |n8.m13.g6 |13 |1557 |1264 |293 |SUCCESS |0.016 | 17 | |n8.m14.g6 |14 |1646 |1042 |604 |SUCCESS |0.0 | 18 | |n8.m15.g6 |15 |1557 |631 |926 |SUCCESS |0.015 | 19 | |n8.m16.g6 |16 |1312 |275 |1037 |SUCCESS |0.016 | 20 | |n8.m17.g6 |17 |980 |72 |908 |SUCCESS |0.0 | 21 | |n8.m18.g6 |18 |663 |14 |649 |SUCCESS |0.0 | 22 | |n8.m19.g6 |19 |402 |0 |402 |SUCCESS |0.0 | 23 | |n8.m20.g6 |20 |221 |0 |221 |SUCCESS |0.0 | 24 | |n8.m21.g6 |21 |115 |0 |115 |SUCCESS |0.016 | 25 | |n8.m22.g6 |22 |56 |0 |56 |SUCCESS |0.0 | 26 | |n8.m23.g6 |23 |24 |0 |24 |SUCCESS |0.0 | 27 | |n8.m24.g6 |24 |11 |0 |11 |SUCCESS |0.0 | 28 | |n8.m25.g6 |25 |5 |0 |5 |SUCCESS |0.0 | 29 | |n8.m26.g6 |26 |2 |0 |2 |SUCCESS |0.0 | 30 | |n8.m27.g6 |27 |1 |0 |1 |SUCCESS |0.0 | 31 | |n8.m28.g6 |28 |1 |0 |1 |SUCCESS |0.0 | 32 | |================|=========|==========|======|=================|==========|==========| 33 | |TOTALS |12346 |6966 |5380 |29 |0.11 | 34 | -------------------------------------------------------------------------------- /TestSupport/tables/8/n8.mALL.o.out.txt: -------------------------------------------------------------------------------- 1 | | Input filename | # Edges | # Graphs | # OK | # NONEMBEDDABLE |Error flag| Duration | 2 | |================|=========|==========|======|=================|==========|==========| 3 | |n8.m0.g6 |0 |1 |1 |0 |SUCCESS |0.0 | 4 | |n8.m1.g6 |1 |1 |1 |0 |SUCCESS |0.0 | 5 | |n8.m2.g6 |2 |2 |2 |0 |SUCCESS |0.0 | 6 | |n8.m3.g6 |3 |5 |5 |0 |SUCCESS |0.0 | 7 | |n8.m4.g6 |4 |11 |11 |0 |SUCCESS |0.0 | 8 | |n8.m5.g6 |5 |24 |24 |0 |SUCCESS |0.0 | 9 | |n8.m6.g6 |6 |56 |54 |2 |SUCCESS |0.0 | 10 | |n8.m7.g6 |7 |115 |107 |8 |SUCCESS |0.016 | 11 | |n8.m8.g6 |8 |221 |184 |37 |SUCCESS |0.0 | 12 | |n8.m9.g6 |9 |402 |259 |143 |SUCCESS |0.015 | 13 | |n8.m10.g6 |10 |663 |257 |406 |SUCCESS |0.0 | 14 | |n8.m11.g6 |11 |980 |172 |808 |SUCCESS |0.015 | 15 | |n8.m12.g6 |12 |1312 |61 |1251 |SUCCESS |0.0 | 16 | |n8.m13.g6 |13 |1557 |12 |1545 |SUCCESS |0.047 | 17 | |n8.m14.g6 |14 |1646 |0 |1646 |SUCCESS |0.0 | 18 | |n8.m15.g6 |15 |1557 |0 |1557 |SUCCESS |0.031 | 19 | |n8.m16.g6 |16 |1312 |0 |1312 |SUCCESS |0.0 | 20 | |n8.m17.g6 |17 |980 |0 |980 |SUCCESS |0.0 | 21 | |n8.m18.g6 |18 |663 |0 |663 |SUCCESS |0.015 | 22 | |n8.m19.g6 |19 |402 |0 |402 |SUCCESS |0.015 | 23 | |n8.m20.g6 |20 |221 |0 |221 |SUCCESS |0.0 | 24 | |n8.m21.g6 |21 |115 |0 |115 |SUCCESS |0.016 | 25 | |n8.m22.g6 |22 |56 |0 |56 |SUCCESS |0.0 | 26 | |n8.m23.g6 |23 |24 |0 |24 |SUCCESS |0.016 | 27 | |n8.m24.g6 |24 |11 |0 |11 |SUCCESS |0.0 | 28 | |n8.m25.g6 |25 |5 |0 |5 |SUCCESS |0.016 | 29 | |n8.m26.g6 |26 |2 |0 |2 |SUCCESS |0.0 | 30 | |n8.m27.g6 |27 |1 |0 |1 |SUCCESS |0.015 | 31 | |n8.m28.g6 |28 |1 |0 |1 |SUCCESS |0.0 | 32 | |================|=========|==========|======|=================|==========|==========| 33 | |TOTALS |12346 |1150 |11196 |29 |0.217 | 34 | -------------------------------------------------------------------------------- /TestSupport/tables/8/n8.mALL.p.out.txt: -------------------------------------------------------------------------------- 1 | | Input filename | # Edges | # Graphs | # OK | # NONEMBEDDABLE |Error flag| Duration | 2 | |================|=========|==========|======|=================|==========|=====================| 3 | |n8.m0.g6 |0 |1 |1 |0 |SUCCESS |0.015 | 4 | |n8.m1.g6 |1 |1 |1 |0 |SUCCESS |0.0 | 5 | |n8.m2.g6 |2 |2 |2 |0 |SUCCESS |0.016 | 6 | |n8.m3.g6 |3 |5 |5 |0 |SUCCESS |0.0 | 7 | |n8.m4.g6 |4 |11 |11 |0 |SUCCESS |0.016 | 8 | |n8.m5.g6 |5 |24 |24 |0 |SUCCESS |0.0 | 9 | |n8.m6.g6 |6 |56 |56 |0 |SUCCESS |0.0 | 10 | |n8.m7.g6 |7 |115 |115 |0 |SUCCESS |0.0 | 11 | |n8.m8.g6 |8 |221 |221 |0 |SUCCESS |0.015 | 12 | |n8.m9.g6 |9 |402 |401 |1 |SUCCESS |0.0 | 13 | |n8.m10.g6 |10 |663 |658 |5 |SUCCESS |0.031 | 14 | |n8.m11.g6 |11 |980 |956 |24 |SUCCESS |0.015 | 15 | |n8.m12.g6 |12 |1312 |1217 |95 |SUCCESS |0.016 | 16 | |n8.m13.g6 |13 |1557 |1264 |293 |SUCCESS |0.016 | 17 | |n8.m14.g6 |14 |1646 |1042 |604 |SUCCESS |0.032 | 18 | |n8.m15.g6 |15 |1557 |631 |926 |SUCCESS |0.0 | 19 | |n8.m16.g6 |16 |1312 |275 |1037 |SUCCESS |0.031 | 20 | |n8.m17.g6 |17 |980 |72 |908 |SUCCESS |0.016 | 21 | |n8.m18.g6 |18 |663 |14 |649 |SUCCESS |0.016 | 22 | |n8.m19.g6 |19 |402 |0 |402 |SUCCESS |0.0 | 23 | |n8.m20.g6 |20 |221 |0 |221 |SUCCESS |0.016 | 24 | |n8.m21.g6 |21 |115 |0 |115 |SUCCESS |0.0 | 25 | |n8.m22.g6 |22 |56 |0 |56 |SUCCESS |0.0 | 26 | |n8.m23.g6 |23 |24 |0 |24 |SUCCESS |0.0 | 27 | |n8.m24.g6 |24 |11 |0 |11 |SUCCESS |0.016 | 28 | |n8.m25.g6 |25 |5 |0 |5 |SUCCESS |0.0 | 29 | |n8.m26.g6 |26 |2 |0 |2 |SUCCESS |0.016 | 30 | |n8.m27.g6 |27 |1 |0 |1 |SUCCESS |0.0 | 31 | |n8.m28.g6 |28 |1 |0 |1 |SUCCESS |0.0 | 32 | |================|=========|==========|======|=================|==========|=====================| 33 | |TOTALS |12346 |6966 |5380 |29 |0.28300000000000003 | 34 | -------------------------------------------------------------------------------- /TestSupport/tables/9/n9.mALL.2.out.txt: -------------------------------------------------------------------------------- 1 | | Input filename | # Edges | # Graphs | # OK | # NONEMBEDDABLE |Error flag| Duration | # Invalid OK | EDA Proc Time | EDA Total Time | 2 | |================|=========|==========|======|=================|==========|==========|==============|===============|================| 3 | |n9.m0.g6 |0 |1 |1 |0 |SUCCESS |0.0 |0 |0.031 |0.027 | 4 | |n9.m1.g6 |1 |1 |1 |0 |SUCCESS |0.0 |0 |0.016 |0.021 | 5 | |n9.m2.g6 |2 |2 |2 |0 |SUCCESS |0.0 |0 |0.031 |0.041 | 6 | |n9.m3.g6 |3 |5 |5 |0 |SUCCESS |0.0 |0 |0.031 |0.101 | 7 | |n9.m4.g6 |4 |11 |11 |0 |SUCCESS |0.0 |0 |0.062 |0.216 | 8 | |n9.m5.g6 |5 |25 |25 |0 |SUCCESS |0.0 |0 |0.125 |0.494 | 9 | |n9.m6.g6 |6 |63 |62 |1 |SUCCESS |0.0 |0 |0.328 |1.222 | 10 | |n9.m7.g6 |7 |148 |142 |6 |SUCCESS |0.0 |0 |0.641 |2.991 | 11 | |n9.m8.g6 |8 |345 |313 |32 |SUCCESS |0.0 |0 |1.859 |6.844 | 12 | |n9.m9.g6 |9 |771 |624 |147 |SUCCESS |0.0 |0 |4.641 |14.866 | 13 | |n9.m10.g6 |10 |1637 |1039 |598 |SUCCESS |0.0 |0 |9.047 |31.701 | 14 | |n9.m11.g6 |11 |3252 |1326 |1926 |SUCCESS |0.016 |0 |16.547 |60.376 | 15 | |n9.m12.g6 |12 |5995 |1190 |4805 |SUCCESS |0.125 |0 |27.312 |98.291 | 16 | |n9.m13.g6 |13 |10120 |698 |9422 |SUCCESS |0.032 |0 |40.984 |148.088 | 17 | |n9.m14.g6 |14 |15615 |242 |15373 |SUCCESS |0.032 |0 |55.594 |204.946 | 18 | |n9.m15.g6 |15 |21933 |39 |21894 |SUCCESS |0.094 |0 |72.844 |275.623 | 19 | |n9.m16.g6 |16 |27987 |0 |27987 |SUCCESS |0.11 |0 |93.359 |349.813 | 20 | |n9.m17.g6 |17 |32403 |0 |32403 |SUCCESS |0.172 |0 |110.359 |405.828 | 21 | |n9.m18.g6 |18 |34040 |0 |34040 |SUCCESS |0.125 |0 |115.688 |427.330 | 22 | |n9.m19.g6 |19 |32403 |0 |32403 |SUCCESS |0.125 |0 |107.531 |403.245 | 23 | |n9.m20.g6 |20 |27987 |0 |27987 |SUCCESS |0.109 |0 |95.531 |352.095 | 24 | |n9.m21.g6 |21 |21933 |0 |21933 |SUCCESS |0.093 |0 |75.734 |286.352 | 25 | |n9.m22.g6 |22 |15615 |0 |15615 |SUCCESS |0.109 |0 |53.109 |197.246 | 26 | |n9.m23.g6 |23 |10120 |0 |10120 |SUCCESS |0.031 |0 |34.078 |151.998 | 27 | |n9.m24.g6 |24 |5995 |0 |5995 |SUCCESS |0.031 |0 |20.094 |75.166 | 28 | |n9.m25.g6 |25 |3252 |0 |3252 |SUCCESS |0.0 |0 |10.438 |40.512 | 29 | |n9.m26.g6 |26 |1637 |0 |1637 |SUCCESS |0.0 |0 |5.578 |20.693 | 30 | |n9.m27.g6 |27 |771 |0 |771 |SUCCESS |0.0 |0 |2.422 |9.702 | 31 | |n9.m28.g6 |28 |345 |0 |345 |SUCCESS |0.0 |0 |1.094 |4.269 | 32 | |n9.m29.g6 |29 |148 |0 |148 |SUCCESS |0.0 |0 |0.422 |1.968 | 33 | |n9.m30.g6 |30 |63 |0 |63 |SUCCESS |0.0 |0 |0.297 |0.808 | 34 | |n9.m31.g6 |31 |25 |0 |25 |SUCCESS |0.0 |0 |0.062 |0.313 | 35 | |n9.m32.g6 |32 |11 |0 |11 |SUCCESS |0.015 |0 |0.047 |0.139 | 36 | |n9.m33.g6 |33 |5 |0 |5 |SUCCESS |0.0 |0 |0.000 |0.067 | 37 | |n9.m34.g6 |34 |2 |0 |2 |SUCCESS |0.0 |0 |0.000 |0.026 | 38 | |n9.m35.g6 |35 |1 |0 |1 |SUCCESS |0.0 |0 |0.000 |0.014 | 39 | |n9.m36.g6 |36 |1 |0 |1 |SUCCESS |0.0 |0 |0.000 |0.014 | 40 | |================|=========|==========|======|=================|==========|==========|==============|===============|================| 41 | |TOTALS |274668 |5720 |268948 |37 |1.219 |0 |955.938 |3573.447 | 42 | -------------------------------------------------------------------------------- /TestSupport/tables/9/n9.mALL.4.out.txt: -------------------------------------------------------------------------------- 1 | | Input filename | # Edges | # Graphs | # OK | # NONEMBEDDABLE |Error flag| Duration | # Invalid OK | EDA Proc Time | EDA Total Time | 2 | |================|=========|==========|======|=================|==========|==========|==============|===============|================| 3 | |n9.m0.g6 |0 |1 |1 |0 |SUCCESS |0.0 |0 |0.000 |0.018 | 4 | |n9.m1.g6 |1 |1 |1 |0 |SUCCESS |0.0 |0 |0.000 |0.019 | 5 | |n9.m2.g6 |2 |2 |2 |0 |SUCCESS |0.0 |0 |0.031 |0.036 | 6 | |n9.m3.g6 |3 |5 |5 |0 |SUCCESS |0.0 |0 |0.047 |0.090 | 7 | |n9.m4.g6 |4 |11 |11 |0 |SUCCESS |0.0 |0 |0.047 |0.196 | 8 | |n9.m5.g6 |5 |25 |25 |0 |SUCCESS |0.0 |0 |0.156 |0.446 | 9 | |n9.m6.g6 |6 |63 |62 |1 |SUCCESS |0.0 |0 |0.203 |1.213 | 10 | |n9.m7.g6 |7 |148 |145 |3 |SUCCESS |0.0 |0 |0.719 |2.887 | 11 | |n9.m8.g6 |8 |345 |330 |15 |SUCCESS |0.0 |0 |1.953 |7.506 | 12 | |n9.m9.g6 |9 |771 |703 |68 |SUCCESS |0.0 |0 |6.062 |20.905 | 13 | |n9.m10.g6 |10 |1637 |1333 |304 |SUCCESS |0.015 |0 |16.594 |57.654 | 14 | |n9.m11.g6 |11 |3252 |2026 |1226 |SUCCESS |0.0 |0 |39.688 |135.331 | 15 | |n9.m12.g6 |12 |5995 |2243 |3752 |SUCCESS |0.016 |0 |70.031 |231.341 | 16 | |n9.m13.g6 |13 |10120 |1637 |8483 |SUCCESS |0.047 |0 |81.953 |281.337 | 17 | |n9.m14.g6 |14 |15615 |696 |14919 |SUCCESS |0.063 |0 |79.250 |281.962 | 18 | |n9.m15.g6 |15 |21933 |136 |21797 |SUCCESS |0.25 |0 |79.156 |299.984 | 19 | |n9.m16.g6 |16 |27987 |0 |27987 |SUCCESS |0.125 |0 |93.516 |354.317 | 20 | |n9.m17.g6 |17 |32403 |0 |32403 |SUCCESS |0.14 |0 |108.391 |408.340 | 21 | |n9.m18.g6 |18 |34040 |0 |34040 |SUCCESS |0.172 |0 |115.578 |428.094 | 22 | |n9.m19.g6 |19 |32403 |0 |32403 |SUCCESS |0.141 |0 |111.953 |407.300 | 23 | |n9.m20.g6 |20 |27987 |0 |27987 |SUCCESS |0.125 |0 |94.422 |357.247 | 24 | |n9.m21.g6 |21 |21933 |0 |21933 |SUCCESS |0.094 |0 |75.531 |278.112 | 25 | |n9.m22.g6 |22 |15615 |0 |15615 |SUCCESS |0.078 |0 |52.125 |195.842 | 26 | |n9.m23.g6 |23 |10120 |0 |10120 |SUCCESS |0.046 |0 |33.922 |126.369 | 27 | |n9.m24.g6 |24 |5995 |0 |5995 |SUCCESS |0.016 |0 |20.344 |74.988 | 28 | |n9.m25.g6 |25 |3252 |0 |3252 |SUCCESS |0.016 |0 |10.125 |40.800 | 29 | |n9.m26.g6 |26 |1637 |0 |1637 |SUCCESS |0.015 |0 |5.609 |20.510 | 30 | |n9.m27.g6 |27 |771 |0 |771 |SUCCESS |0.0 |0 |2.641 |9.694 | 31 | |n9.m28.g6 |28 |345 |0 |345 |SUCCESS |0.0 |0 |1.172 |4.409 | 32 | |n9.m29.g6 |29 |148 |0 |148 |SUCCESS |0.015 |0 |0.469 |1.879 | 33 | |n9.m30.g6 |30 |63 |0 |63 |SUCCESS |0.0 |0 |0.250 |0.799 | 34 | |n9.m31.g6 |31 |25 |0 |25 |SUCCESS |0.0 |0 |0.047 |0.321 | 35 | |n9.m32.g6 |32 |11 |0 |11 |SUCCESS |0.0 |0 |0.016 |0.144 | 36 | |n9.m33.g6 |33 |5 |0 |5 |SUCCESS |0.0 |0 |0.031 |0.067 | 37 | |n9.m34.g6 |34 |2 |0 |2 |SUCCESS |0.016 |0 |0.016 |0.026 | 38 | |n9.m35.g6 |35 |1 |0 |1 |SUCCESS |0.0 |0 |0.000 |0.014 | 39 | |n9.m36.g6 |36 |1 |0 |1 |SUCCESS |0.0 |0 |0.000 |0.013 | 40 | |================|=========|==========|======|=================|==========|==========|==============|===============|================| 41 | |TOTALS |274668 |9356 |265312 |37 |1.39 |0 |1102.047 |4030.209 | 42 | -------------------------------------------------------------------------------- /TestSupport/tables/9/n9.mALL.d.out.txt: -------------------------------------------------------------------------------- 1 | | Input filename | # Edges | # Graphs | # OK | # NONEMBEDDABLE |Error flag| Duration | 2 | |================|=========|==========|=======|=================|==========|==========| 3 | |n9.m0.g6 |0 |1 |1 |0 |SUCCESS |0.0 | 4 | |n9.m1.g6 |1 |1 |1 |0 |SUCCESS |0.0 | 5 | |n9.m2.g6 |2 |2 |2 |0 |SUCCESS |0.0 | 6 | |n9.m3.g6 |3 |5 |5 |0 |SUCCESS |0.0 | 7 | |n9.m4.g6 |4 |11 |11 |0 |SUCCESS |0.016 | 8 | |n9.m5.g6 |5 |25 |25 |0 |SUCCESS |0.0 | 9 | |n9.m6.g6 |6 |63 |63 |0 |SUCCESS |0.0 | 10 | |n9.m7.g6 |7 |148 |148 |0 |SUCCESS |0.0 | 11 | |n9.m8.g6 |8 |345 |345 |0 |SUCCESS |0.0 | 12 | |n9.m9.g6 |9 |771 |770 |1 |SUCCESS |0.031 | 13 | |n9.m10.g6 |10 |1637 |1632 |5 |SUCCESS |0.016 | 14 | |n9.m11.g6 |11 |3252 |3225 |27 |SUCCESS |0.032 | 15 | |n9.m12.g6 |12 |5995 |5848 |147 |SUCCESS |0.047 | 16 | |n9.m13.g6 |13 |10120 |9439 |681 |SUCCESS |0.063 | 17 | |n9.m14.g6 |14 |15615 |13093 |2522 |SUCCESS |0.11 | 18 | |n9.m15.g6 |15 |21933 |15029 |6904 |SUCCESS |0.125 | 19 | |n9.m16.g6 |16 |27987 |13660 |14327 |SUCCESS |0.172 | 20 | |n9.m17.g6 |17 |32403 |9536 |22867 |SUCCESS |0.156 | 21 | |n9.m18.g6 |18 |34040 |4858 |29182 |SUCCESS |0.141 | 22 | |n9.m19.g6 |19 |32403 |1734 |30669 |SUCCESS |0.266 | 23 | |n9.m20.g6 |20 |27987 |378 |27609 |SUCCESS |0.078 | 24 | |n9.m21.g6 |21 |21933 |50 |21883 |SUCCESS |0.078 | 25 | |n9.m22.g6 |22 |15615 |0 |15615 |SUCCESS |0.046 | 26 | |n9.m23.g6 |23 |10120 |0 |10120 |SUCCESS |0.031 | 27 | |n9.m24.g6 |24 |5995 |0 |5995 |SUCCESS |0.063 | 28 | |n9.m25.g6 |25 |3252 |0 |3252 |SUCCESS |0.015 | 29 | |n9.m26.g6 |26 |1637 |0 |1637 |SUCCESS |0.0 | 30 | |n9.m27.g6 |27 |771 |0 |771 |SUCCESS |0.0 | 31 | |n9.m28.g6 |28 |345 |0 |345 |SUCCESS |0.0 | 32 | |n9.m29.g6 |29 |148 |0 |148 |SUCCESS |0.0 | 33 | |n9.m30.g6 |30 |63 |0 |63 |SUCCESS |0.0 | 34 | |n9.m31.g6 |31 |25 |0 |25 |SUCCESS |0.0 | 35 | |n9.m32.g6 |32 |11 |0 |11 |SUCCESS |0.0 | 36 | |n9.m33.g6 |33 |5 |0 |5 |SUCCESS |0.0 | 37 | |n9.m34.g6 |34 |2 |0 |2 |SUCCESS |0.016 | 38 | |n9.m35.g6 |35 |1 |0 |1 |SUCCESS |0.0 | 39 | |n9.m36.g6 |36 |1 |0 |1 |SUCCESS |0.0 | 40 | |================|=========|==========|=======|=================|==========|==========| 41 | |TOTALS |274668 |79853 |194815 |37 |1.502 | 42 | -------------------------------------------------------------------------------- /TestSupport/tables/9/n9.mALL.o.out.txt: -------------------------------------------------------------------------------- 1 | | Input filename | # Edges | # Graphs | # OK | # NONEMBEDDABLE |Error flag| Duration | 2 | |================|=========|==========|======|=================|==========|==========| 3 | |n9.m0.g6 |0 |1 |1 |0 |SUCCESS |0.0 | 4 | |n9.m1.g6 |1 |1 |1 |0 |SUCCESS |0.0 | 5 | |n9.m2.g6 |2 |2 |2 |0 |SUCCESS |0.0 | 6 | |n9.m3.g6 |3 |5 |5 |0 |SUCCESS |0.016 | 7 | |n9.m4.g6 |4 |11 |11 |0 |SUCCESS |0.0 | 8 | |n9.m5.g6 |5 |25 |25 |0 |SUCCESS |0.0 | 9 | |n9.m6.g6 |6 |63 |61 |2 |SUCCESS |0.0 | 10 | |n9.m7.g6 |7 |148 |140 |8 |SUCCESS |0.0 | 11 | |n9.m8.g6 |8 |345 |307 |38 |SUCCESS |0.015 | 12 | |n9.m9.g6 |9 |771 |607 |164 |SUCCESS |0.0 | 13 | |n9.m10.g6 |10 |1637 |995 |642 |SUCCESS |0.0 | 14 | |n9.m11.g6 |11 |3252 |1239 |2013 |SUCCESS |0.015 | 15 | |n9.m12.g6 |12 |5995 |1080 |4915 |SUCCESS |0.016 | 16 | |n9.m13.g6 |13 |10120 |599 |9521 |SUCCESS |0.281 | 17 | |n9.m14.g6 |14 |15615 |191 |15424 |SUCCESS |0.046 | 18 | |n9.m15.g6 |15 |21933 |27 |21906 |SUCCESS |0.078 | 19 | |n9.m16.g6 |16 |27987 |0 |27987 |SUCCESS |0.11 | 20 | |n9.m17.g6 |17 |32403 |0 |32403 |SUCCESS |0.062 | 21 | |n9.m18.g6 |18 |34040 |0 |34040 |SUCCESS |0.36 | 22 | |n9.m19.g6 |19 |32403 |0 |32403 |SUCCESS |0.125 | 23 | |n9.m20.g6 |20 |27987 |0 |27987 |SUCCESS |0.11 | 24 | |n9.m21.g6 |21 |21933 |0 |21933 |SUCCESS |0.094 | 25 | |n9.m22.g6 |22 |15615 |0 |15615 |SUCCESS |0.063 | 26 | |n9.m23.g6 |23 |10120 |0 |10120 |SUCCESS |0.109 | 27 | |n9.m24.g6 |24 |5995 |0 |5995 |SUCCESS |0.031 | 28 | |n9.m25.g6 |25 |3252 |0 |3252 |SUCCESS |0.015 | 29 | |n9.m26.g6 |26 |1637 |0 |1637 |SUCCESS |0.0 | 30 | |n9.m27.g6 |27 |771 |0 |771 |SUCCESS |0.015 | 31 | |n9.m28.g6 |28 |345 |0 |345 |SUCCESS |0.047 | 32 | |n9.m29.g6 |29 |148 |0 |148 |SUCCESS |0.0 | 33 | |n9.m30.g6 |30 |63 |0 |63 |SUCCESS |0.0 | 34 | |n9.m31.g6 |31 |25 |0 |25 |SUCCESS |0.0 | 35 | |n9.m32.g6 |32 |11 |0 |11 |SUCCESS |0.0 | 36 | |n9.m33.g6 |33 |5 |0 |5 |SUCCESS |0.0 | 37 | |n9.m34.g6 |34 |2 |0 |2 |SUCCESS |0.0 | 38 | |n9.m35.g6 |35 |1 |0 |1 |SUCCESS |0.0 | 39 | |n9.m36.g6 |36 |1 |0 |1 |SUCCESS |0.0 | 40 | |================|=========|==========|======|=================|==========|==========| 41 | |TOTALS |274668 |5291 |269377 |37 |1.608 | 42 | -------------------------------------------------------------------------------- /TestSupport/tables/9/n9.mALL.p.out.txt: -------------------------------------------------------------------------------- 1 | | Input filename | # Edges | # Graphs | # OK | # NONEMBEDDABLE |Error flag| Duration | 2 | |================|=========|==========|=======|=================|==========|==========| 3 | |n9.m0.g6 |0 |1 |1 |0 |SUCCESS |0.0 | 4 | |n9.m1.g6 |1 |1 |1 |0 |SUCCESS |0.0 | 5 | |n9.m2.g6 |2 |2 |2 |0 |SUCCESS |0.0 | 6 | |n9.m3.g6 |3 |5 |5 |0 |SUCCESS |0.0 | 7 | |n9.m4.g6 |4 |11 |11 |0 |SUCCESS |0.0 | 8 | |n9.m5.g6 |5 |25 |25 |0 |SUCCESS |0.016 | 9 | |n9.m6.g6 |6 |63 |63 |0 |SUCCESS |0.0 | 10 | |n9.m7.g6 |7 |148 |148 |0 |SUCCESS |0.0 | 11 | |n9.m8.g6 |8 |345 |345 |0 |SUCCESS |0.0 | 12 | |n9.m9.g6 |9 |771 |770 |1 |SUCCESS |0.0 | 13 | |n9.m10.g6 |10 |1637 |1632 |5 |SUCCESS |0.031 | 14 | |n9.m11.g6 |11 |3252 |3225 |27 |SUCCESS |0.203 | 15 | |n9.m12.g6 |12 |5995 |5848 |147 |SUCCESS |0.015 | 16 | |n9.m13.g6 |13 |10120 |9439 |681 |SUCCESS |0.11 | 17 | |n9.m14.g6 |14 |15615 |13093 |2522 |SUCCESS |0.062 | 18 | |n9.m15.g6 |15 |21933 |15029 |6904 |SUCCESS |0.235 | 19 | |n9.m16.g6 |16 |27987 |13660 |14327 |SUCCESS |0.172 | 20 | |n9.m17.g6 |17 |32403 |9536 |22867 |SUCCESS |0.156 | 21 | |n9.m18.g6 |18 |34040 |4858 |29182 |SUCCESS |0.141 | 22 | |n9.m19.g6 |19 |32403 |1734 |30669 |SUCCESS |0.078 | 23 | |n9.m20.g6 |20 |27987 |378 |27609 |SUCCESS |0.297 | 24 | |n9.m21.g6 |21 |21933 |50 |21883 |SUCCESS |0.094 | 25 | |n9.m22.g6 |22 |15615 |0 |15615 |SUCCESS |0.063 | 26 | |n9.m23.g6 |23 |10120 |0 |10120 |SUCCESS |0.047 | 27 | |n9.m24.g6 |24 |5995 |0 |5995 |SUCCESS |0.031 | 28 | |n9.m25.g6 |25 |3252 |0 |3252 |SUCCESS |0.032 | 29 | |n9.m26.g6 |26 |1637 |0 |1637 |SUCCESS |0.015 | 30 | |n9.m27.g6 |27 |771 |0 |771 |SUCCESS |0.016 | 31 | |n9.m28.g6 |28 |345 |0 |345 |SUCCESS |0.0 | 32 | |n9.m29.g6 |29 |148 |0 |148 |SUCCESS |0.0 | 33 | |n9.m30.g6 |30 |63 |0 |63 |SUCCESS |0.016 | 34 | |n9.m31.g6 |31 |25 |0 |25 |SUCCESS |0.015 | 35 | |n9.m32.g6 |32 |11 |0 |11 |SUCCESS |0.0 | 36 | |n9.m33.g6 |33 |5 |0 |5 |SUCCESS |0.0 | 37 | |n9.m34.g6 |34 |2 |0 |2 |SUCCESS |0.0 | 38 | |n9.m35.g6 |35 |1 |0 |1 |SUCCESS |0.016 | 39 | |n9.m36.g6 |36 |1 |0 |1 |SUCCESS |0.0 | 40 | |================|=========|==========|=======|=================|==========|==========| 41 | |TOTALS |274668 |79853 |194815 |37 |1.861 | 42 | -------------------------------------------------------------------------------- /c/.gdbinit: -------------------------------------------------------------------------------- 1 | set new-console on 2 | -------------------------------------------------------------------------------- /c/graph.h: -------------------------------------------------------------------------------- 1 | #ifndef HELPERSTUB_GRAPH_H 2 | #define HELPERSTUB_GRAPH_H 3 | 4 | /* 5 | Copyright (c) 1997-2025, John M. Boyer 6 | All rights reserved. 7 | See the LICENSE.TXT file for licensing information. 8 | */ 9 | 10 | // NOTE: This helper stub has been added for backwards compatibility to 11 | // support downstream consumers who expect graph.h to be at the 12 | // root of the installed planarity headers directory. Future downstream 13 | // consumers are advised to include the graphLib.h helper stub instead 14 | // because it offers access to all features in the graph library of 15 | // the planarity project. 16 | 17 | #ifdef __cplusplus 18 | extern "C" 19 | { 20 | #endif 21 | 22 | #include "c/graphLib/graph.h" 23 | 24 | #ifdef __cplusplus 25 | } 26 | #endif 27 | 28 | #endif 29 | -------------------------------------------------------------------------------- /c/graphLib.h: -------------------------------------------------------------------------------- 1 | #ifndef HELPERSTUB_GRAPHLIB_H 2 | #define HELPERSTUB_GRAPHLIB_H 3 | 4 | /* 5 | Copyright (c) 1997-2025, John M. Boyer 6 | All rights reserved. 7 | See the LICENSE.TXT file for licensing information. 8 | */ 9 | 10 | // NOTE: This helper stub has been added to make it easier for downstream 11 | // consumers to obtain access to all features in the graph library of 12 | // the planarity project. 13 | 14 | #ifdef __cplusplus 15 | extern "C" 16 | { 17 | #endif 18 | 19 | #include "c/graphLib/graphLib.h" 20 | 21 | #ifdef __cplusplus 22 | } 23 | #endif 24 | 25 | #endif 26 | -------------------------------------------------------------------------------- /c/graphLib/extensionSystem/graphExtensions.h: -------------------------------------------------------------------------------- 1 | #ifndef GRAPH_EXTENSIONS_H 2 | #define GRAPH_EXTENSIONS_H 3 | 4 | /* 5 | Copyright (c) 1997-2025, John M. Boyer 6 | All rights reserved. 7 | See the LICENSE.TXT file for licensing information. 8 | */ 9 | 10 | #ifdef __cplusplus 11 | extern "C" 12 | { 13 | #endif 14 | 15 | #include "../graphStructures.h" 16 | 17 | int gp_AddExtension(graphP theGraph, 18 | int *pModuleID, 19 | void *context, 20 | void *(*dupContext)(void *, void *), 21 | void (*freeContext)(void *), 22 | graphFunctionTableP overloadTable); 23 | 24 | int gp_FindExtension(graphP theGraph, int moduleID, void **pContext); 25 | void *gp_GetExtension(graphP theGraph, int moduleID); 26 | 27 | int gp_RemoveExtension(graphP theGraph, int moduleID); 28 | 29 | int gp_CopyExtensions(graphP dstGraph, graphP srcGraph); 30 | 31 | void gp_FreeExtensions(graphP theGraph); 32 | 33 | #ifdef __cplusplus 34 | } 35 | #endif 36 | 37 | #endif 38 | -------------------------------------------------------------------------------- /c/graphLib/extensionSystem/graphExtensions.private.h: -------------------------------------------------------------------------------- 1 | #ifndef GRAPH_EXTENSIONS_PRIVATE_H 2 | #define GRAPH_EXTENSIONS_PRIVATE_H 3 | 4 | /* 5 | Copyright (c) 1997-2025, John M. Boyer 6 | All rights reserved. 7 | See the LICENSE.TXT file for licensing information. 8 | */ 9 | 10 | #include "graphFunctionTable.h" 11 | 12 | #ifdef __cplusplus 13 | extern "C" 14 | { 15 | #endif 16 | 17 | typedef struct 18 | { 19 | int moduleID; 20 | void *context; 21 | void *(*dupContext)(void *, void *); 22 | void (*freeContext)(void *); 23 | 24 | graphFunctionTableP functions; 25 | 26 | struct graphExtension *next; 27 | } graphExtension; 28 | 29 | typedef graphExtension *graphExtensionP; 30 | 31 | #ifdef __cplusplus 32 | } 33 | #endif 34 | 35 | #endif 36 | -------------------------------------------------------------------------------- /c/graphLib/extensionSystem/graphFunctionTable.h: -------------------------------------------------------------------------------- 1 | #ifndef GRAPHFUNCTIONTABLE_H 2 | #define GRAPHFUNCTIONTABLE_H 3 | 4 | /* 5 | Copyright (c) 1997-2025, John M. Boyer 6 | All rights reserved. 7 | See the LICENSE.TXT file for licensing information. 8 | */ 9 | 10 | #ifdef __cplusplus 11 | extern "C" 12 | { 13 | #endif 14 | 15 | /* 16 | NOTE: If you add any FUNCTION POINTERS to this function table, then you must 17 | also initialize them in _InitFunctionTable() in graphUtils.c. 18 | */ 19 | typedef struct baseGraphStructure baseGraphStructure; 20 | typedef baseGraphStructure *graphP; 21 | 22 | typedef struct 23 | { 24 | // These function pointers allow extension modules to overload some of 25 | // the behaviors of protected functions. Only advanced applications 26 | // will overload these functions 27 | int (*fpEmbeddingInitialize)(graphP); 28 | void (*fpEmbedBackEdgeToDescendant)(graphP, int, int, int, int); 29 | void (*fpWalkUp)(graphP, int, int); 30 | int (*fpWalkDown)(graphP, int, int); 31 | int (*fpMergeBicomps)(graphP, int, int, int, int); 32 | void (*fpMergeVertex)(graphP, int, int, int); 33 | int (*fpHandleInactiveVertex)(graphP, int, int *, int *); 34 | int (*fpHandleBlockedBicomp)(graphP, int, int, int); 35 | int (*fpEmbedPostprocess)(graphP, int, int); 36 | int (*fpMarkDFSPath)(graphP, int, int); 37 | 38 | int (*fpCheckEmbeddingIntegrity)(graphP, graphP); 39 | int (*fpCheckObstructionIntegrity)(graphP, graphP); 40 | 41 | // These function pointers allow extension modules to overload some 42 | // of the behaviors of gp_* function in the public API 43 | int (*fpInitGraph)(graphP, int); 44 | void (*fpReinitializeGraph)(graphP); 45 | int (*fpEnsureArcCapacity)(graphP, int); 46 | int (*fpSortVertices)(graphP); 47 | 48 | int (*fpReadPostprocess)(graphP, char *); 49 | int (*fpWritePostprocess)(graphP, char **); 50 | 51 | void (*fpHideEdge)(graphP, int); 52 | void (*fpRestoreEdge)(graphP, int); 53 | int (*fpHideVertex)(graphP, int); 54 | int (*fpRestoreVertex)(graphP); 55 | int (*fpContractEdge)(graphP, int); 56 | int (*fpIdentifyVertices)(graphP, int, int, int); 57 | 58 | } graphFunctionTable; 59 | 60 | typedef graphFunctionTable *graphFunctionTableP; 61 | 62 | #ifdef __cplusplus 63 | } 64 | #endif 65 | 66 | #endif 67 | -------------------------------------------------------------------------------- /c/graphLib/graph.h: -------------------------------------------------------------------------------- 1 | #ifndef GRAPH_H 2 | #define GRAPH_H 3 | 4 | /* 5 | Copyright (c) 1997-2025, John M. Boyer 6 | All rights reserved. 7 | See the LICENSE.TXT file for licensing information. 8 | */ 9 | 10 | #ifdef __cplusplus 11 | extern "C" 12 | { 13 | #endif 14 | 15 | #include "graphStructures.h" 16 | 17 | #include "io/g6-read-iterator.h" 18 | #include "io/g6-write-iterator.h" 19 | #include "io/strbuf.h" 20 | #include "io/strOrFile.h" 21 | 22 | #include "extensionSystem/graphExtensions.h" 23 | 24 | /////////////////////////////////////////////////////////////////////////////// 25 | // Definitions for higher-order operations at the vertex, edge and graph levels 26 | /////////////////////////////////////////////////////////////////////////////// 27 | 28 | graphP gp_New(void); 29 | 30 | int gp_InitGraph(graphP theGraph, int N); 31 | void gp_ReinitializeGraph(graphP theGraph); 32 | int gp_CopyAdjacencyLists(graphP dstGraph, graphP srcGraph); 33 | int gp_CopyGraph(graphP dstGraph, graphP srcGraph); 34 | graphP gp_DupGraph(graphP theGraph); 35 | 36 | int gp_CreateRandomGraph(graphP theGraph); 37 | int gp_CreateRandomGraphEx(graphP theGraph, int numEdges); 38 | 39 | void gp_Free(graphP *pGraph); 40 | 41 | int gp_Read(graphP theGraph, char const*FileName); 42 | int gp_ReadFromString(graphP theGraph, char *inputStr); 43 | 44 | #define WRITE_ADJLIST 1 45 | #define WRITE_ADJMATRIX 2 46 | #define WRITE_DEBUGINFO 3 47 | #define WRITE_G6 4 48 | 49 | int gp_Write(graphP theGraph, char const*FileName, int Mode); 50 | int gp_WriteToString(graphP theGraph, char **pOutputStr, int Mode); 51 | 52 | int gp_IsNeighbor(graphP theGraph, int u, int v); 53 | int gp_GetNeighborEdgeRecord(graphP theGraph, int u, int v); 54 | int gp_GetVertexDegree(graphP theGraph, int v); 55 | int gp_GetVertexInDegree(graphP theGraph, int v); 56 | int gp_GetVertexOutDegree(graphP theGraph, int v); 57 | 58 | int gp_GetArcCapacity(graphP theGraph); 59 | int gp_EnsureArcCapacity(graphP theGraph, int requiredArcCapacity); 60 | 61 | int gp_AddEdge(graphP theGraph, int u, int ulink, int v, int vlink); 62 | int gp_DynamicAddEdge(graphP theGraph, int u, int ulink, int v, int vlink); 63 | int gp_InsertEdge(graphP theGraph, int u, int e_u, int e_ulink, 64 | int v, int e_v, int e_vlink); 65 | 66 | void gp_HideEdge(graphP theGraph, int e); 67 | void gp_RestoreEdge(graphP theGraph, int e); 68 | int gp_HideVertex(graphP theGraph, int vertex); 69 | int gp_DeleteEdge(graphP theGraph, int e, int nextLink); 70 | 71 | int gp_ContractEdge(graphP theGraph, int e); 72 | int gp_IdentifyVertices(graphP theGraph, int u, int v, int eBefore); 73 | int gp_RestoreVertices(graphP theGraph); 74 | 75 | int gp_CreateDFSTree(graphP theGraph); 76 | int gp_SortVertices(graphP theGraph); 77 | int gp_LowpointAndLeastAncestor(graphP theGraph); 78 | int gp_PreprocessForEmbedding(graphP theGraph); 79 | 80 | int gp_Embed(graphP theGraph, int embedFlags); 81 | int gp_TestEmbedResultIntegrity(graphP theGraph, graphP origGraph, int embedResult); 82 | 83 | /* Possible Flags for gp_Embed. The planar and outerplanar settings are supported 84 | natively. The rest require extension modules. */ 85 | 86 | #define EMBEDFLAGS_PLANAR 1 87 | #define EMBEDFLAGS_OUTERPLANAR 2 88 | 89 | #define EMBEDFLAGS_DRAWPLANAR (4 | EMBEDFLAGS_PLANAR) 90 | 91 | #define EMBEDFLAGS_SEARCHFORK23 (16 | EMBEDFLAGS_OUTERPLANAR) 92 | #define EMBEDFLAGS_SEARCHFORK4 (32 | EMBEDFLAGS_OUTERPLANAR) 93 | #define EMBEDFLAGS_SEARCHFORK33 (64 | EMBEDFLAGS_PLANAR) 94 | 95 | #define EMBEDFLAGS_SEARCHFORK5 (128 | EMBEDFLAGS_PLANAR) 96 | 97 | #define EMBEDFLAGS_MAXIMALPLANARSUBGRAPH 256 98 | #define EMBEDFLAGS_PROJECTIVEPLANAR 512 99 | #define EMBEDFLAGS_TOROIDAL 1024 100 | 101 | /* If LOGGING is defined, then write to the log, otherwise no-op 102 | By default, neither release nor DEBUG builds including LOGGING. 103 | Logging is useful for seeing details of how various algorithms 104 | handle a particular graph. */ 105 | 106 | // #define LOGGING 107 | #ifdef LOGGING 108 | 109 | #define gp_LogLine _LogLine 110 | #define gp_Log _Log 111 | 112 | void _LogLine(char *Line); 113 | void _Log(char *Line); 114 | 115 | #define gp_MakeLogStr1 _MakeLogStr1 116 | #define gp_MakeLogStr2 _MakeLogStr2 117 | #define gp_MakeLogStr3 _MakeLogStr3 118 | #define gp_MakeLogStr4 _MakeLogStr4 119 | #define gp_MakeLogStr5 _MakeLogStr5 120 | 121 | char *_MakeLogStr1(char *format, int); 122 | char *_MakeLogStr2(char *format, int, int); 123 | char *_MakeLogStr3(char *format, int, int, int); 124 | char *_MakeLogStr4(char *format, int, int, int, int); 125 | char *_MakeLogStr5(char *format, int, int, int, int, int); 126 | 127 | #else 128 | #define gp_LogLine(Line) 129 | #define gp_Log(Line) 130 | #define gp_MakeLogStr1(format, one) 131 | #define gp_MakeLogStr2(format, one, two) 132 | #define gp_MakeLogStr3(format, one, two, three) 133 | #define gp_MakeLogStr4(format, one, two, three, four) 134 | #define gp_MakeLogStr5(format, one, two, three, four, five) 135 | #endif 136 | 137 | #ifdef __cplusplus 138 | } 139 | #endif 140 | 141 | #endif 142 | -------------------------------------------------------------------------------- /c/graphLib/graphLib.h: -------------------------------------------------------------------------------- 1 | #ifndef GRAPHLIB_H 2 | #define GRAPHLIB_H 3 | 4 | /* 5 | Copyright (c) 1997-2025, John M. Boyer 6 | All rights reserved. 7 | See the LICENSE.TXT file for licensing information. 8 | */ 9 | 10 | #ifdef __cplusplus 11 | extern "C" 12 | { 13 | #endif 14 | 15 | #include 16 | #include 17 | #include 18 | #include 19 | 20 | #include "graph.h" 21 | 22 | #include "lowLevelUtils/platformTime.h" 23 | 24 | #include "homeomorphSearch/graphK23Search.h" 25 | #include "homeomorphSearch/graphK33Search.h" 26 | #include "homeomorphSearch/graphK4Search.h" 27 | #include "planarityRelated/graphDrawPlanar.h" 28 | 29 | // This is the main location for the project and shared library version numbering. 30 | // Changes here must be mirrored in configure.ac 31 | // 32 | // The overall project version numbering format is major.minor.maintenance.tweak 33 | // Major is for an overhaul (e.g. many features, data structure change, change of backward compatibility) 34 | // Minor is for feature addition (e.g. a new algorithm implementation added, new interface) 35 | // Maintenance is for functional revision (e.g. bug fix to existing algorithm implementation) 36 | // Tweak is for a non-functional revision (e.g. change of build scripts or testing code, user-facing string changes) 37 | 38 | #define GP_PROJECTVERSION_MAJOR 4 39 | #define GP_PROJECTVERSION_MINOR 0 40 | #define GP_PROJECTVERSION_MAINT 0 41 | #define GP_PROJECTVERSION_TWEAK 0 42 | 43 | char *gp_GetProjectVersionFull(void); 44 | 45 | // Any change to the project version numbers should also affect the 46 | // shared library version numbers below. 47 | // 48 | // See configure.ac for how to update these version numbers 49 | #define GP_LIBPLANARITYVERSION_CURRENT 2 50 | #define GP_LIBPLANARITYVERSION_REVISION 0 51 | #define GP_LIBPLANARITYVERSION_AGE 0 52 | 53 | char *gp_GetLibPlanarityVersionFull(void); 54 | 55 | #ifdef __cplusplus 56 | } 57 | #endif 58 | 59 | #endif 60 | -------------------------------------------------------------------------------- /c/graphLib/homeomorphSearch/graphK23Search.h: -------------------------------------------------------------------------------- 1 | #ifndef GRAPH_K23SEARCH_H 2 | #define GRAPH_K23SEARCH_H 3 | 4 | /* 5 | Copyright (c) 1997-2025, John M. Boyer 6 | All rights reserved. 7 | See the LICENSE.TXT file for licensing information. 8 | */ 9 | 10 | #include "../graphStructures.h" 11 | 12 | #ifdef __cplusplus 13 | extern "C" 14 | { 15 | #endif 16 | 17 | #define K23SEARCH_NAME "K23Search" 18 | 19 | int gp_AttachK23Search(graphP theGraph); 20 | int gp_DetachK23Search(graphP theGraph); 21 | 22 | #ifdef __cplusplus 23 | } 24 | #endif 25 | 26 | #endif 27 | -------------------------------------------------------------------------------- /c/graphLib/homeomorphSearch/graphK23Search.private.h: -------------------------------------------------------------------------------- 1 | #ifndef GRAPH_K23SEARCH_PRIVATE_H 2 | #define GRAPH_K23SEARCH_PRIVATE_H 3 | 4 | /* 5 | Copyright (c) 1997-2025, John M. Boyer 6 | All rights reserved. 7 | See the LICENSE.TXT file for licensing information. 8 | */ 9 | 10 | #include "../graph.h" 11 | 12 | #ifdef __cplusplus 13 | extern "C" 14 | { 15 | #endif 16 | 17 | typedef struct 18 | { 19 | // Overloaded function pointers 20 | graphFunctionTable functions; 21 | 22 | } K23SearchContext; 23 | 24 | #ifdef __cplusplus 25 | } 26 | #endif 27 | 28 | #endif 29 | -------------------------------------------------------------------------------- /c/graphLib/homeomorphSearch/graphK33Search.h: -------------------------------------------------------------------------------- 1 | #ifndef GRAPH_K33SEARCH_H 2 | #define GRAPH_K33SEARCH_H 3 | 4 | /* 5 | Copyright (c) 1997-2025, John M. Boyer 6 | All rights reserved. 7 | See the LICENSE.TXT file for licensing information. 8 | */ 9 | 10 | #include "../graphStructures.h" 11 | 12 | #ifdef __cplusplus 13 | extern "C" 14 | { 15 | #endif 16 | 17 | #define K33SEARCH_NAME "K33Search" 18 | 19 | int gp_AttachK33Search(graphP theGraph); 20 | int gp_DetachK33Search(graphP theGraph); 21 | 22 | #ifdef __cplusplus 23 | } 24 | #endif 25 | 26 | #endif 27 | -------------------------------------------------------------------------------- /c/graphLib/homeomorphSearch/graphK33Search.private.h: -------------------------------------------------------------------------------- 1 | #ifndef GRAPH_K33SEARCH_PRIVATE_H 2 | #define GRAPH_K33SEARCH_PRIVATE_H 3 | 4 | /* 5 | Copyright (c) 1997-2025, John M. Boyer 6 | All rights reserved. 7 | See the LICENSE.TXT file for licensing information. 8 | */ 9 | 10 | #include "../graph.h" 11 | 12 | #ifdef __cplusplus 13 | extern "C" 14 | { 15 | #endif 16 | 17 | // Additional equipment for each EdgeRec 18 | typedef struct 19 | { 20 | int noStraddle, pathConnector; 21 | } K33Search_EdgeRec; 22 | 23 | typedef K33Search_EdgeRec *K33Search_EdgeRecP; 24 | 25 | // Additional equipment for each primary vertex 26 | typedef struct 27 | { 28 | int separatedDFSChildList, backArcList, mergeBlocker; 29 | } K33Search_VertexInfo; 30 | 31 | typedef K33Search_VertexInfo *K33Search_VertexInfoP; 32 | 33 | typedef struct 34 | { 35 | // Helps distinguish initialize from re-initialize 36 | int initialized; 37 | 38 | // The graph that this context augments 39 | graphP theGraph; 40 | 41 | // Parallel array for additional edge level equipment 42 | K33Search_EdgeRecP E; 43 | 44 | // Parallel array for additional vertex info level equipment 45 | K33Search_VertexInfoP VI; 46 | 47 | // Storage for the separatedDFSChildLists, and 48 | // to help with linear time sorting of same by lowpoints 49 | listCollectionP separatedDFSChildLists; 50 | int *buckets; 51 | listCollectionP bin; 52 | 53 | // Overloaded function pointers 54 | graphFunctionTable functions; 55 | 56 | } K33SearchContext; 57 | 58 | #ifdef __cplusplus 59 | } 60 | #endif 61 | 62 | #endif 63 | -------------------------------------------------------------------------------- /c/graphLib/homeomorphSearch/graphK4Search.h: -------------------------------------------------------------------------------- 1 | #ifndef GRAPH_K4SEARCH_H 2 | #define GRAPH_K4SEARCH_H 3 | 4 | /* 5 | Copyright (c) 1997-2025, John M. Boyer 6 | All rights reserved. 7 | See the LICENSE.TXT file for licensing information. 8 | */ 9 | 10 | #include "../graphStructures.h" 11 | 12 | #ifdef __cplusplus 13 | extern "C" 14 | { 15 | #endif 16 | 17 | #define K4SEARCH_NAME "K4Search" 18 | 19 | int gp_AttachK4Search(graphP theGraph); 20 | int gp_DetachK4Search(graphP theGraph); 21 | 22 | #ifdef __cplusplus 23 | } 24 | #endif 25 | 26 | #endif 27 | -------------------------------------------------------------------------------- /c/graphLib/homeomorphSearch/graphK4Search.private.h: -------------------------------------------------------------------------------- 1 | #ifndef GRAPH_K4SEARCH_PRIVATE_H 2 | #define GRAPH_K4SEARCH_PRIVATE_H 3 | 4 | /* 5 | Copyright (c) 1997-2025, John M. Boyer 6 | All rights reserved. 7 | See the LICENSE.TXT file for licensing information. 8 | */ 9 | 10 | #include "../graph.h" 11 | 12 | #ifdef __cplusplus 13 | extern "C" 14 | { 15 | #endif 16 | 17 | /* Additional equipment for each EdgeRec 18 | 19 | pathConnector: 20 | Used in the edge records (arcs) of a reduction edge to indicate the 21 | endpoints of a path that has been reduced from (removed from) the 22 | embedding so that the search for a K4 can continue. 23 | We only need a pathConnector because we reduce subgraphs that are 24 | separable by a 2-cut, so they can contribute at most one path to a 25 | subgraph homeomorphic to K4, if one is indeed found. Thus, we first 26 | delete all edges except for the desired path(s), then we reduce any 27 | retained path to an edge. 28 | */ 29 | typedef struct 30 | { 31 | int pathConnector; 32 | } K4Search_EdgeRec; 33 | 34 | typedef K4Search_EdgeRec *K4Search_EdgeRecP; 35 | 36 | /* Additional equipment for each vertex: None */ 37 | 38 | typedef struct 39 | { 40 | // Helps distinguish initialize from re-initialize 41 | int initialized; 42 | 43 | // The graph that this context augments 44 | graphP theGraph; 45 | 46 | // Parallel array for additional edge level equipment 47 | K4Search_EdgeRecP E; 48 | 49 | // Overloaded function pointers 50 | graphFunctionTable functions; 51 | 52 | // Internal variable for converting a tail recursion into a simple loop 53 | int handlingBlockedBicomp; 54 | 55 | } K4SearchContext; 56 | 57 | #ifdef __cplusplus 58 | } 59 | #endif 60 | 61 | #endif 62 | -------------------------------------------------------------------------------- /c/graphLib/io/g6-api-utilities.c: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 1997-2025, John M. Boyer 3 | All rights reserved. 4 | See the LICENSE.TXT file for licensing information. 5 | */ 6 | 7 | #include "g6-api-utilities.h" 8 | 9 | int _getMaxEdgeCount(int graphOrder) 10 | { 11 | return (graphOrder * (graphOrder - 1)) / 2; 12 | } 13 | 14 | int _getNumCharsForGraphEncoding(int graphOrder) 15 | { 16 | int maxNumEdges = _getMaxEdgeCount(graphOrder); 17 | 18 | return (maxNumEdges / 6) + (maxNumEdges % 6 ? 1 : 0); 19 | } 20 | 21 | int _getNumCharsForGraphOrder(int graphOrder) 22 | { 23 | if (graphOrder > 0 && graphOrder < 63) 24 | { 25 | return 1; 26 | } 27 | else if (graphOrder >= 63 && graphOrder <= 100000) 28 | { 29 | return 4; 30 | } 31 | 32 | return -1; 33 | } 34 | 35 | int _getExpectedNumPaddingZeroes(const int graphOrder, const int numChars) 36 | { 37 | int maxNumEdges = _getMaxEdgeCount(graphOrder); 38 | int expectedNumPaddingZeroes = numChars * 6 - maxNumEdges; 39 | 40 | return expectedNumPaddingZeroes; 41 | } 42 | -------------------------------------------------------------------------------- /c/graphLib/io/g6-api-utilities.h: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 1997-2025, John M. Boyer 3 | All rights reserved. 4 | See the LICENSE.TXT file for licensing information. 5 | */ 6 | 7 | #ifndef G6_API_UTILITIES 8 | #define G6_API_UTILITIES 9 | 10 | #ifdef __cplusplus 11 | extern "C" 12 | { 13 | #endif 14 | 15 | int _getMaxEdgeCount(int); 16 | int _getNumCharsForGraphEncoding(int); 17 | int _getNumCharsForGraphOrder(int); 18 | int _getExpectedNumPaddingZeroes(const int, const int); 19 | 20 | #ifdef __cplusplus 21 | } 22 | #endif 23 | 24 | #endif /* G6_API_UTILITIES */ 25 | -------------------------------------------------------------------------------- /c/graphLib/io/g6-read-iterator.h: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 1997-2025, John M. Boyer 3 | All rights reserved. 4 | See the LICENSE.TXT file for licensing information. 5 | */ 6 | 7 | #ifndef G6_READ_ITERATOR 8 | #define G6_READ_ITERATOR 9 | 10 | #ifdef __cplusplus 11 | extern "C" 12 | { 13 | #endif 14 | 15 | #include 16 | #include 17 | 18 | #include "../graph.h" 19 | #include "strOrFile.h" 20 | 21 | typedef struct 22 | { 23 | strOrFileP g6Input; 24 | int numGraphsRead; 25 | 26 | int graphOrder; 27 | int numCharsForGraphOrder; 28 | int numCharsForGraphEncoding; 29 | int currGraphBuffSize; 30 | char *currGraphBuff; 31 | 32 | graphP currGraph; 33 | } G6ReadIterator; 34 | 35 | int allocateG6ReadIterator(G6ReadIterator **, graphP); 36 | bool _isG6ReadIteratorAllocated(G6ReadIterator *); 37 | 38 | int getNumGraphsRead(G6ReadIterator *, int *); 39 | int getOrderOfGraphToRead(G6ReadIterator *, int *); 40 | int getPointerToGraphReadIn(G6ReadIterator *, graphP *); 41 | 42 | int beginG6ReadIterationFromG6StrOrFile(G6ReadIterator *, strOrFileP); 43 | int _beginG6ReadIteration(G6ReadIterator *); 44 | int _processAndCheckHeader(strOrFileP); 45 | bool _firstCharIsValid(char, const int); 46 | int _getGraphOrder(strOrFileP, int *); 47 | 48 | int readGraphUsingG6ReadIterator(G6ReadIterator *); 49 | int _checkGraphOrder(char *, int); 50 | int _validateGraphEncoding(char *, const int, const int); 51 | int _decodeGraph(char *, const int, const int, graphP); 52 | 53 | int endG6ReadIteration(G6ReadIterator *); 54 | 55 | int freeG6ReadIterator(G6ReadIterator **); 56 | 57 | int _ReadGraphFromG6FilePath(graphP, char *); 58 | int _ReadGraphFromG6String(graphP, char *); 59 | int _ReadGraphFromG6StrOrFile(graphP, strOrFileP); 60 | 61 | #ifdef __cplusplus 62 | } 63 | #endif 64 | 65 | #endif /* G6_READ_ITERATOR */ 66 | -------------------------------------------------------------------------------- /c/graphLib/io/g6-write-iterator.h: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 1997-2025, John M. Boyer 3 | All rights reserved. 4 | See the LICENSE.TXT file for licensing information. 5 | */ 6 | 7 | #ifndef G6_WRITE_ITERATOR 8 | #define G6_WRITE_ITERATOR 9 | 10 | #ifdef __cplusplus 11 | extern "C" 12 | { 13 | #endif 14 | 15 | #include 16 | #include 17 | 18 | #include "../graph.h" 19 | #include "strOrFile.h" 20 | 21 | typedef struct 22 | { 23 | strOrFileP g6Output; 24 | int numGraphsWritten; 25 | 26 | int graphOrder; 27 | int numCharsForGraphOrder; 28 | int numCharsForGraphEncoding; 29 | int currGraphBuffSize; 30 | char *currGraphBuff; 31 | 32 | int *columnOffsets; 33 | 34 | graphP currGraph; 35 | } G6WriteIterator; 36 | 37 | int allocateG6WriteIterator(G6WriteIterator **, graphP); 38 | bool _isG6WriteIteratorAllocated(G6WriteIterator *); 39 | 40 | int getNumGraphsWritten(G6WriteIterator *, int *); 41 | int getOrderOfGraphToWrite(G6WriteIterator *, int *); 42 | int getPointerToGraphToWrite(G6WriteIterator *, graphP *); 43 | 44 | int beginG6WriteIterationToG6StrOrFile(G6WriteIterator *pG6WriteIterator, strOrFileP outputContainer); 45 | int _beginG6WriteIteration(G6WriteIterator *pG6WriteIterator); 46 | void _precomputeColumnOffsets(int *, int); 47 | 48 | int writeGraphUsingG6WriteIterator(G6WriteIterator *); 49 | 50 | int _encodeAdjMatAsG6(G6WriteIterator *); 51 | int _getFirstEdge(graphP, int *, int *, int *); 52 | int _getNextEdge(graphP, int *, int *, int *); 53 | int _getNextInUseEdge(graphP theGraph, int *e, int *u, int *v); 54 | 55 | int _printEncodedGraph(G6WriteIterator *); 56 | 57 | int endG6WriteIteration(G6WriteIterator *); 58 | 59 | int freeG6WriteIterator(G6WriteIterator **); 60 | 61 | int _WriteGraphToG6FilePath(graphP pGraph, char *g6OutputFilename); 62 | int _WriteGraphToG6String(graphP pGraph, char **g6OutputStr); 63 | int _WriteGraphToG6StrOrFile(graphP pGraph, strOrFileP outputContainer, char **outputStr); 64 | 65 | #ifdef __cplusplus 66 | } 67 | #endif 68 | 69 | #endif /* G6_WRITE_ITERATOR */ 70 | -------------------------------------------------------------------------------- /c/graphLib/io/strOrFile.h: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 1997-2025, John M. Boyer 3 | All rights reserved. 4 | See the LICENSE.TXT file for licensing information. 5 | */ 6 | 7 | #ifndef STR_OR_FILE_H 8 | #define STR_OR_FILE_H 9 | 10 | #ifdef __cplusplus 11 | extern "C" 12 | { 13 | #endif 14 | 15 | #include 16 | 17 | #include "../lowLevelUtils/stack.h" 18 | #include "strbuf.h" 19 | 20 | #define INPUT_CONTAINER 1 21 | #define OUTPUT_CONTAINER 2 22 | typedef struct 23 | { 24 | strBufP theStr; 25 | FILE *pFile; 26 | int containerType; 27 | stackP ungetBuf; 28 | 29 | } strOrFile; 30 | 31 | typedef strOrFile *strOrFileP; 32 | 33 | strOrFileP sf_New(char const*theStr, char const*fileName, char const*ioMode); 34 | int sf_ValidateStrOrFile(strOrFileP theStrOrFile); 35 | 36 | char sf_getc(strOrFileP theStrOrFile); 37 | int sf_ReadSkipChar(strOrFileP theStrOrFile); 38 | int sf_ReadSkipWhitespace(strOrFileP theStrOrFile); 39 | int sf_ReadSingleDigit(int *digitToRead, strOrFileP theStrOrFile); 40 | int sf_ReadInteger(int *intToRead, strOrFileP theStrOrFile); 41 | int sf_ReadSkipInteger(strOrFileP theStrOrFile); 42 | int sf_ReadSkipLineRemainder(strOrFileP theStrOrFile); 43 | 44 | char sf_ungetc(char theChar, strOrFileP theStrOrFile); 45 | int sf_ungets(char *contentsToUnget, strOrFileP theStrOrFile); 46 | 47 | char *sf_fgets(char *str, int count, strOrFileP theStrOrFile); 48 | 49 | int sf_fputs(char const*strToWrite, strOrFileP theStrOrFile); 50 | 51 | char *sf_takeTheStr(strOrFileP theStrOrFile); 52 | 53 | int sf_closeFile(strOrFileP theStrOrFile); 54 | 55 | void sf_Free(strOrFileP *pStrOrFile); 56 | 57 | #ifdef __cplusplus 58 | } 59 | #endif 60 | 61 | #endif /* STR_OR_FILE_H */ 62 | -------------------------------------------------------------------------------- /c/graphLib/io/strbuf.h: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 1997-2025, John M. Boyer 3 | All rights reserved. 4 | See the LICENSE.TXT file for licensing information. 5 | */ 6 | 7 | #ifndef STRBUF_H 8 | #define STRBUF_H 9 | 10 | #ifdef __cplusplus 11 | extern "C" 12 | { 13 | #endif 14 | 15 | // includes mem functions like memcpy 16 | #include 17 | 18 | typedef struct 19 | { 20 | char *buf; 21 | int size, capacity, readPos; 22 | } strBuf; 23 | 24 | typedef strBuf *strBufP; 25 | 26 | strBufP sb_New(int); 27 | void sb_Free(strBufP *); 28 | 29 | void sb_ClearBuf(strBufP); 30 | int sb_Copy(strBufP, strBufP); 31 | strBufP sb_Duplicate(strBufP); 32 | 33 | #define sb_GetFullString(theStrBuf) (theStrBuf->buf) 34 | #define sb_GetSize(theStrBuf) (theStrBuf->size) 35 | #define sb_GetCapacity(theStrBuf) (theStrBuf->capacity) 36 | #define sb_GetUnreadCharCount(theStrBuf) (theStrBuf->size - theStrBuf->readPos) 37 | #define sb_GetReadString(theStrBuf) ((theStrBuf != NULL && theStrBuf->buf != NULL) ? (theStrBuf->buf + theStrBuf->readPos) : NULL) 38 | 39 | #define sb_GetReadPos(theStrBuf) (theStrBuf->readPos) 40 | #define sb_SetReadPos(theStrBuf, theReadPos) \ 41 | { \ 42 | theStrBuf->readPos = theReadPos; \ 43 | } 44 | 45 | void sb_ReadSkipWhitespace(strBufP); 46 | void sb_ReadSkipInteger(strBufP); 47 | #define sb_ReadSkipChar(theStrBuf) \ 48 | { \ 49 | theStrBuf->readPos++; \ 50 | } 51 | 52 | int sb_ConcatString(strBufP, char const*); 53 | int sb_ConcatChar(strBufP, char); 54 | 55 | char *sb_TakeString(strBufP); 56 | 57 | #ifndef SPEED_MACROS 58 | // Optimized SPEED_MACROS versions of larger methods are not used in this module 59 | #else 60 | // Optimized SPEED_MACROS versions of larger methods are not used in this module 61 | #endif 62 | 63 | #ifdef __cplusplus 64 | } 65 | #endif 66 | 67 | #endif /* STRBUF_H */ 68 | -------------------------------------------------------------------------------- /c/graphLib/lowLevelUtils/apiutils.c: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 1997-2025, John M. Boyer 3 | All rights reserved. 4 | See the LICENSE.TXT file for licensing information. 5 | */ 6 | 7 | #include 8 | #include 9 | #include 10 | #include 11 | 12 | #include "apiutils.h" 13 | #include "appconst.h" 14 | 15 | int quietMode = FALSE; 16 | 17 | int getQuietModeSetting(void) 18 | { 19 | return quietMode; 20 | } 21 | 22 | void setQuietModeSetting(int newQuietModeSetting) 23 | { 24 | quietMode = newQuietModeSetting; 25 | } 26 | 27 | void Message(char const*message) 28 | { 29 | if (!getQuietModeSetting()) 30 | { 31 | fprintf(stdout, "%s", message); 32 | fflush(stdout); 33 | } 34 | } 35 | 36 | void ErrorMessage(char const*message) 37 | { 38 | if (!getQuietModeSetting()) 39 | { 40 | fprintf(stderr, "%s", message); 41 | fflush(stderr); 42 | } 43 | } 44 | 45 | int GetNumCharsToReprInt(int theNum, int *numCharsRequired) 46 | { 47 | if (numCharsRequired == NULL) 48 | return NOTOK; 49 | 50 | int charCount = 0; 51 | 52 | if (theNum < 0) 53 | { 54 | charCount++; 55 | // N.B. since 32-bit signed integers are represented using twos-complement, 56 | // the absolute value of INT_MIN is not defined; however, adding 1 to this 57 | // min value before taking the absolute value will still require the same 58 | // number of digits. 59 | if ((theNum == INT_MIN) || (theNum == INT8_MAX) || (theNum == INT16_MIN) || (theNum == INT32_MIN)) 60 | theNum++; 61 | theNum = abs(theNum); 62 | } 63 | 64 | while (theNum > 0) 65 | { 66 | theNum /= 10; 67 | charCount++; 68 | } 69 | 70 | (*numCharsRequired) = charCount; 71 | 72 | return OK; 73 | } 74 | -------------------------------------------------------------------------------- /c/graphLib/lowLevelUtils/apiutils.h: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 1997-2025, John M. Boyer 3 | All rights reserved. 4 | See the LICENSE.TXT file for licensing information. 5 | */ 6 | #ifndef APIUTILS_H 7 | #define APIUTILS_H 8 | 9 | #ifdef __cplusplus 10 | extern "C" 11 | { 12 | #endif 13 | 14 | #include "stdio.h" 15 | 16 | // N.B. Every time this is used to create a string for a message or 17 | // error message, the developer must check that there will not be a 18 | // memory overwrite error. 19 | #define MAXLINE 1024 20 | 21 | // N.B. Every time you're trying to read a 32-bit int from a string, 22 | // you should only need to read this many characters: an optional '-', 23 | // followed by 10 digits (max signed 32-bit int value is 2,147,483,647). 24 | // One must always allocate an additional byte for the null-terminator! 25 | #define MAXCHARSFOR32BITINT 11 26 | 27 | extern int quietMode; 28 | 29 | extern int getQuietModeSetting(void); 30 | extern void setQuietModeSetting(int); 31 | 32 | extern void Message(char const*message); 33 | extern void ErrorMessage(char const*message); 34 | 35 | int GetNumCharsToReprInt(int theNum, int *numCharsRequired); 36 | #ifdef __cplusplus 37 | } 38 | #endif 39 | 40 | #endif 41 | -------------------------------------------------------------------------------- /c/graphLib/lowLevelUtils/appconst.h: -------------------------------------------------------------------------------- 1 | #ifndef APPCONST_H 2 | #define APPCONST_H 3 | 4 | /* 5 | Copyright (c) 1997-2025, John M. Boyer 6 | All rights reserved. 7 | See the LICENSE.TXT file for licensing information. 8 | */ 9 | 10 | #include "apiutils.h" 11 | 12 | // NOTE: This is defined on 32- and 64-bit Windows systems; see 13 | // https://sourceforge.net/p/predef/wiki/OperatingSystems 14 | #if defined(WIN32) || defined(_WIN32) 15 | #define WINDOWS 16 | #endif 17 | 18 | /* Defines fopen strings for reading and writing text files on PC and UNIX */ 19 | 20 | #ifdef WINDOWS 21 | #define READTEXT "rt" 22 | #define WRITETEXT "wt" 23 | #define FILE_DELIMITER '\\' 24 | #else 25 | #define READTEXT "r" 26 | #define WRITETEXT "w" 27 | #define FILE_DELIMITER '/' 28 | #endif 29 | 30 | // When PROFILE is defined, prints out run-time stats on a number of subordinate 31 | // routines in the embedder 32 | 33 | // #define PROFILE 34 | #ifdef PROFILE 35 | #include "platformTime.h" 36 | #endif 37 | 38 | /* Define DEBUG to get additional debugging. The default is to define it when MSC does */ 39 | 40 | #ifdef _DEBUG 41 | #define DEBUG 42 | #endif 43 | 44 | /* Some low-level functions are replaced by faster macros, except when debugging */ 45 | 46 | #define SPEED_MACROS 47 | #ifdef DEBUG 48 | #undef SPEED_MACROS 49 | #endif 50 | 51 | /* Return status values; OK/NOTOK behave like Boolean true/false, 52 | not like program exit codes. */ 53 | 54 | #define OK 1 55 | #define NOTOK 0 56 | 57 | #ifdef DEBUG 58 | #undef NOTOK 59 | extern int debugNOTOK(void); 60 | #include 61 | #define NOTOK (printf("NOTOK on Line %d of %s\n", __LINE__, __FILE__), debugNOTOK()) 62 | #endif 63 | 64 | #ifndef TRUE 65 | #define TRUE 1 66 | #endif 67 | 68 | #ifndef FALSE 69 | #define FALSE 0 70 | #endif 71 | 72 | #ifndef NULL 73 | #define NULL 0L 74 | #endif 75 | 76 | /* Array indices are used as pointers, and NIL means bad pointer */ 77 | #define USE_FASTER_1BASEDARRAYS 78 | 79 | #ifdef USE_0BASEDARRAYS 80 | #undef USE_FASTER_1BASEDARRAYS 81 | #endif 82 | 83 | #ifdef USE_FASTER_1BASEDARRAYS 84 | // This definition is used with 1-based array indexing 85 | #define NIL 0 86 | #define NIL_CHAR 0x00 87 | #else 88 | // This definition is used with 0-based array indexing 89 | #define NIL -1 90 | #define NIL_CHAR 0xFF 91 | #endif 92 | 93 | /******************************************************************** 94 | A few simple integer selection macros 95 | ********************************************************************/ 96 | 97 | #define MIN(x, y) ((x) < (y) ? (x) : (y)) 98 | #define MAX(x, y) ((x) > (y) ? (x) : (y)) 99 | 100 | #define MIN3(x, y, z) MIN(MIN((x), (y)), MIN((y), (z))) 101 | #define MAX3(x, y, z) MAX(MAX((x), (y)), MAX((y), (z))) 102 | 103 | #endif 104 | -------------------------------------------------------------------------------- /c/graphLib/lowLevelUtils/platformTime.h: -------------------------------------------------------------------------------- 1 | #ifndef PLATFORM_TIME 2 | #define PLATFORM_TIME 3 | 4 | /* 5 | Copyright (c) 1997-2025, John M. Boyer 6 | All rights reserved. 7 | See the LICENSE.TXT file for licensing information. 8 | */ 9 | 10 | // NOTE: Since platformTime.h is only #include'd by appconst.h, and since appconst.h 11 | // #define's WINDOWS before including platformTime.h, we condition on WINDOWS being defined. 12 | #ifdef WINDOWS 13 | 14 | #include 15 | #include 16 | 17 | #define platform_time DWORD 18 | #define platform_GetTime(timeVar) (timeVar = GetTickCount()) 19 | #define platform_GetDuration(startTime, endTime) ((double)(endTime - startTime) / 1000.0) 20 | 21 | #else 22 | 23 | #include 24 | 25 | typedef struct 26 | { 27 | clock_t hiresTime; 28 | time_t lowresTime; 29 | } platform_time; 30 | 31 | #define platform_GetTime(timeVar) (timeVar.hiresTime = clock(), timeVar.lowresTime = time(NULL)) 32 | 33 | // Many flavors of Unix have CLOCKS_PER_SEC at 1 million, and clock_t as a 4 byte long integer 34 | // which means that the clock() construct has a resolution of only about 2000 seconds 35 | // If we're getting a duration longer than that, then we fall back to the coarser time() measure 36 | 37 | #define platform_GetDuration(startTime, endTime) ( \ 38 | ((double)(endTime.lowresTime - startTime.lowresTime)) > 2000 ? ((double)(endTime.lowresTime - startTime.lowresTime)) : ((double)(endTime.hiresTime - startTime.hiresTime)) / CLOCKS_PER_SEC) 39 | 40 | /* 41 | #define platform_time clock_t 42 | #define platform_GetTime() clock() 43 | #define platform_GetDuration(startTime, endTime) (((double) (endTime - startTime)) / CLOCKS_PER_SEC) 44 | */ 45 | 46 | /* 47 | #define platform_time time_t 48 | #define platform_GetTime() time((time_t *)NULL) 49 | #define platform_GetDuration(startTime, endTime) ((double) (endTime - startTime)) 50 | */ 51 | 52 | #endif 53 | 54 | #endif 55 | -------------------------------------------------------------------------------- /c/graphLib/lowLevelUtils/stack.c: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 1997-2025, John M. Boyer 3 | All rights reserved. 4 | See the LICENSE.TXT file for licensing information. 5 | */ 6 | 7 | #include "appconst.h" 8 | #include "stack.h" 9 | #include 10 | 11 | stackP sp_New(int capacity) 12 | { 13 | stackP theStack; 14 | 15 | theStack = (stackP)malloc(sizeof(stack)); 16 | 17 | if (theStack != NULL) 18 | { 19 | theStack->S = (int *)malloc(capacity * sizeof(int)); 20 | if (theStack->S == NULL) 21 | { 22 | free(theStack); 23 | theStack = NULL; 24 | } 25 | } 26 | 27 | if (theStack != NULL) 28 | { 29 | theStack->capacity = capacity; 30 | sp_ClearStack(theStack); 31 | } 32 | 33 | return theStack; 34 | } 35 | 36 | void sp_Free(stackP *pStack) 37 | { 38 | if (pStack == NULL || *pStack == NULL) 39 | return; 40 | 41 | (*pStack)->capacity = (*pStack)->size = 0; 42 | 43 | if ((*pStack)->S != NULL) 44 | free((*pStack)->S); 45 | (*pStack)->S = NULL; 46 | free(*pStack); 47 | 48 | *pStack = NULL; 49 | } 50 | 51 | int sp_CopyContent(stackP stackDst, stackP stackSrc) 52 | { 53 | if (stackDst->capacity < stackSrc->size) 54 | return NOTOK; 55 | 56 | if (stackSrc->size > 0) 57 | memcpy(stackDst->S, stackSrc->S, stackSrc->size * sizeof(int)); 58 | 59 | stackDst->size = stackSrc->size; 60 | return OK; 61 | } 62 | 63 | stackP sp_Duplicate(stackP theStack) 64 | { 65 | stackP newStack = sp_New(theStack->capacity); 66 | 67 | if (newStack == NULL) 68 | return NULL; 69 | 70 | if (theStack->size > 0) 71 | { 72 | memcpy(newStack->S, theStack->S, theStack->size * sizeof(int)); 73 | newStack->size = theStack->size; 74 | } 75 | 76 | return newStack; 77 | } 78 | 79 | int sp_Copy(stackP stackDst, stackP stackSrc) 80 | { 81 | if (sp_CopyContent(stackDst, stackSrc) != OK) 82 | { 83 | stackP newStack = sp_Duplicate(stackSrc); 84 | int *p; 85 | 86 | if (newStack == NULL) 87 | return NOTOK; 88 | 89 | p = stackDst->S; 90 | stackDst->S = newStack->S; 91 | newStack->S = p; 92 | newStack->capacity = stackDst->capacity; 93 | sp_Free(&newStack); 94 | 95 | stackDst->size = stackSrc->size; 96 | stackDst->capacity = stackSrc->capacity; 97 | } 98 | 99 | return OK; 100 | } 101 | 102 | #ifndef SPEED_MACROS 103 | 104 | int sp_ClearStack(stackP theStack) 105 | { 106 | theStack->size = 0; 107 | return OK; 108 | } 109 | 110 | int sp_GetCurrentSize(stackP theStack) 111 | { 112 | return theStack->size; 113 | } 114 | 115 | int sp_SetCurrentSize(stackP theStack, int size) 116 | { 117 | return size > theStack->capacity ? NOTOK : (theStack->size = size, OK); 118 | } 119 | 120 | int sp_IsEmpty(stackP theStack) 121 | { 122 | return !theStack->size; 123 | } 124 | 125 | int sp_NonEmpty(stackP theStack) 126 | { 127 | return theStack->size; 128 | } 129 | 130 | int sp__Push(stackP theStack, int a) 131 | { 132 | if (theStack->size >= theStack->capacity) 133 | return NOTOK; 134 | 135 | theStack->S[theStack->size++] = a; 136 | return OK; 137 | } 138 | 139 | int sp__Push2(stackP theStack, int a, int b) 140 | { 141 | if (theStack->size + 1 >= theStack->capacity) 142 | return NOTOK; 143 | 144 | theStack->S[theStack->size++] = a; 145 | theStack->S[theStack->size++] = b; 146 | return OK; 147 | } 148 | 149 | int sp__Pop(stackP theStack, int *pA) 150 | { 151 | if (theStack->size <= 0) 152 | return NOTOK; 153 | 154 | *pA = theStack->S[--theStack->size]; 155 | return OK; 156 | } 157 | 158 | int sp__Pop_Discard(stackP theStack) 159 | { 160 | if (theStack->size <= 0) 161 | return NOTOK; 162 | 163 | --theStack->size; 164 | return OK; 165 | } 166 | 167 | int sp__Pop2(stackP theStack, int *pA, int *pB) 168 | { 169 | if (theStack->size <= 1) 170 | return NOTOK; 171 | 172 | *pB = theStack->S[--theStack->size]; 173 | *pA = theStack->S[--theStack->size]; 174 | 175 | return OK; 176 | } 177 | 178 | int sp__Pop2_Discard1(stackP theStack, int *pA) 179 | { 180 | if (theStack->size <= 1) 181 | return NOTOK; 182 | 183 | // When a pair of the form (main, secondary) are pushed in order, 184 | // it is sometimes necessary to pop the secondary and discard, 185 | // then pop and store the main datum. 186 | --theStack->size; 187 | *pA = theStack->S[--theStack->size]; 188 | 189 | return OK; 190 | } 191 | 192 | int sp__Pop2_Discard(stackP theStack) 193 | { 194 | if (theStack->size <= 1) 195 | return NOTOK; 196 | 197 | --theStack->size; 198 | --theStack->size; 199 | 200 | return OK; 201 | } 202 | 203 | int sp_Top(stackP theStack) 204 | { 205 | return theStack->size ? theStack->S[theStack->size - 1] : NIL; 206 | } 207 | 208 | int sp_Get(stackP theStack, int pos) 209 | { 210 | if (theStack == NULL || pos < 0 || pos >= theStack->size) 211 | return NOTOK; 212 | 213 | return (theStack->S[pos]); 214 | } 215 | 216 | int sp_Set(stackP theStack, int pos, int val) 217 | { 218 | if (theStack == NULL || pos < 0 || pos >= theStack->size) 219 | return NOTOK; 220 | 221 | return (theStack->S[pos] = val); 222 | } 223 | 224 | #endif // not defined SPEED_MACROS 225 | -------------------------------------------------------------------------------- /c/graphLib/lowLevelUtils/stack.h: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 1997-2025, John M. Boyer 3 | All rights reserved. 4 | See the LICENSE.TXT file for licensing information. 5 | */ 6 | 7 | #ifndef STACK_H 8 | #define STACK_H 9 | 10 | #ifdef __cplusplus 11 | extern "C" 12 | { 13 | #endif 14 | 15 | // includes mem functions like memcpy 16 | #include 17 | 18 | typedef struct 19 | { 20 | int *S; 21 | int size, capacity; 22 | } stack; 23 | 24 | typedef stack *stackP; 25 | 26 | stackP sp_New(int); 27 | void sp_Free(stackP *); 28 | 29 | int sp_Copy(stackP, stackP); 30 | 31 | int sp_CopyContent(stackP stackDst, stackP stackSrc); 32 | stackP sp_Duplicate(stackP theStack); 33 | 34 | #define sp_GetCapacity(theStack) (theStack->capacity) 35 | 36 | #ifndef SPEED_MACROS 37 | 38 | int sp_ClearStack(stackP); 39 | int sp_GetCurrentSize(stackP theStack); 40 | int sp_SetCurrentSize(stackP theStack, int top); 41 | 42 | int sp_IsEmpty(stackP); 43 | int sp_NonEmpty(stackP); 44 | 45 | #define sp_Push(theStack, a) \ 46 | { \ 47 | if (sp__Push(theStack, (a)) != OK) \ 48 | return NOTOK; \ 49 | } 50 | #define sp_Push2(theStack, a, b) \ 51 | { \ 52 | if (sp__Push2(theStack, (a), (b)) != OK) \ 53 | return NOTOK; \ 54 | } 55 | 56 | int sp__Push(stackP, int); 57 | int sp__Push2(stackP, int, int); 58 | 59 | #define sp_Pop(theStack, a) \ 60 | { \ 61 | if (sp__Pop(theStack, &(a)) != OK) \ 62 | return NOTOK; \ 63 | } 64 | #define sp_Pop_Discard(theStack) \ 65 | { \ 66 | if (sp__Pop_Discard(theStack) != OK) \ 67 | return NOTOK; \ 68 | } 69 | 70 | #define sp_Pop2(theStack, a, b) \ 71 | { \ 72 | if (sp__Pop2(theStack, &(a), &(b)) != OK) \ 73 | return NOTOK; \ 74 | } 75 | #define sp_Pop2_Discard1(theStack, a) \ 76 | { \ 77 | if (sp__Pop2_Discard1(theStack, &(a)) != OK) \ 78 | return NOTOK; \ 79 | } 80 | #define sp_Pop2_Discard(theStack) \ 81 | { \ 82 | if (sp__Pop2_Discard(theStack) != OK) \ 83 | return NOTOK; \ 84 | } 85 | 86 | int sp__Pop(stackP, int *); 87 | int sp__Pop_Discard(stackP theStack); 88 | 89 | int sp__Pop2(stackP, int *, int *); 90 | int sp__Pop2_Discard1(stackP theStack, int *pA); 91 | int sp__Pop2_Discard(stackP theStack); 92 | 93 | int sp_Top(stackP); 94 | int sp_Get(stackP, int); 95 | int sp_Set(stackP, int, int); 96 | 97 | #else 98 | 99 | #define sp_ClearStack(theStack) theStack->size = 0 100 | #define sp_GetCurrentSize(theStack) (theStack->size) 101 | #define sp_SetCurrentSize(theStack, Size) ((Size) > theStack->capacity ? NOTOK : (theStack->size = (Size), OK)) 102 | 103 | #define sp_IsEmpty(theStack) !theStack->size 104 | #define sp_NonEmpty(theStack) theStack->size 105 | 106 | #define sp_Push(theStack, a) theStack->S[theStack->size++] = a 107 | #define sp_Push2(theStack, a, b) \ 108 | { \ 109 | sp_Push(theStack, a); \ 110 | sp_Push(theStack, b); \ 111 | } 112 | 113 | #define sp_Pop(theStack, a) a = theStack->S[--theStack->size] 114 | #define sp_Pop_Discard(theStack) --theStack->size 115 | 116 | #define sp_Pop2(theStack, a, b) \ 117 | { \ 118 | sp_Pop(theStack, b); \ 119 | sp_Pop(theStack, a); \ 120 | } 121 | #define sp_Pop2_Discard1(theStack, a) \ 122 | { \ 123 | sp_Pop_Discard(theStack); \ 124 | sp_Pop(theStack, a); \ 125 | } 126 | #define sp_Pop2_Discard(theStack) \ 127 | { \ 128 | sp_Pop_Discard(theStack); \ 129 | sp_Pop_Discard(theStack); \ 130 | } 131 | 132 | #define sp_Top(theStack) (theStack->size ? theStack->S[theStack->size - 1] : NIL) 133 | #define sp_Get(theStack, pos) (theStack->S[pos]) 134 | #define sp_Set(theStack, pos, val) (theStack->S[pos] = val) 135 | 136 | #endif 137 | 138 | #ifdef __cplusplus 139 | } 140 | #endif 141 | 142 | #endif 143 | -------------------------------------------------------------------------------- /c/graphLib/planarityRelated/graphDrawPlanar.h: -------------------------------------------------------------------------------- 1 | #ifndef GRAPH_DRAWPLANAR_H 2 | #define GRAPH_DRAWPLANAR_H 3 | 4 | /* 5 | Copyright (c) 1997-2025, John M. Boyer 6 | All rights reserved. 7 | See the LICENSE.TXT file for licensing information. 8 | */ 9 | 10 | #include "../graphStructures.h" 11 | 12 | #ifdef __cplusplus 13 | extern "C" 14 | { 15 | #endif 16 | 17 | #define DRAWPLANAR_NAME "DrawPlanar" 18 | 19 | int gp_AttachDrawPlanar(graphP theGraph); 20 | int gp_DetachDrawPlanar(graphP theGraph); 21 | 22 | int gp_DrawPlanar_RenderToFile(graphP theEmbedding, char *theFileName); 23 | int gp_DrawPlanar_RenderToString(graphP theEmbedding, char **pRenditionString); 24 | 25 | #ifdef __cplusplus 26 | } 27 | #endif 28 | 29 | #endif 30 | -------------------------------------------------------------------------------- /c/graphLib/planarityRelated/graphDrawPlanar.private.h: -------------------------------------------------------------------------------- 1 | #ifndef GRAPH_DRAWPLANAR_PRIVATE_H 2 | #define GRAPH_DRAWPLANAR_PRIVATE_H 3 | 4 | /* 5 | Copyright (c) 1997-2025, John M. Boyer 6 | All rights reserved. 7 | See the LICENSE.TXT file for licensing information. 8 | */ 9 | 10 | #include "../graph.h" 11 | 12 | #ifdef __cplusplus 13 | extern "C" 14 | { 15 | #endif 16 | 17 | // Additional equipment for each edge 18 | /* 19 | pos, start, end: used to store a visibility representation, or 20 | horvert diagram of a planar graph. 21 | For edges, horizontal position, vertical range 22 | */ 23 | typedef struct 24 | { 25 | int pos, start, end; 26 | } DrawPlanar_EdgeRec; 27 | 28 | typedef DrawPlanar_EdgeRec *DrawPlanar_EdgeRecP; 29 | 30 | // Additional equipment for each vertex 31 | /* 32 | pos, start, end: used to store a visibility representation, or 33 | horvert diagram, of a planar graph. 34 | For vertices, vertical position, horizontal range 35 | drawingFlag, ancestor, ancestorChild: used to collect information needed 36 | to help 'draw' a visibility representation. During planar 37 | embedding, a vertex is determined to be between its DFS parent and 38 | a given ancestor (the vertex being processed) or beyond the parent 39 | relative to the ancestor. In post processing, the relative 40 | orientation of the parent and ancestor are determined, 41 | then the notion of between/beyond resolves to above/below or 42 | below/above depending on whether the ancestor is above or below, 43 | respectively, the parent. The ancestorChild are used to help r 44 | esolve this latter question. 45 | tie[2] stores information along the external face during embedding 46 | that is pertinent to helping break ties in the decisions about 47 | vertical vertex positioning. When vertices are first merged 48 | together into a bicomp, we cannot always decide right away which 49 | vertices will be above or below others. But as we traverse the 50 | external face removing inactive vertices, these positional ties 51 | can be resolved. 52 | */ 53 | typedef struct 54 | { 55 | int pos, start, end; 56 | int drawingFlag, ancestor, ancestorChild; 57 | int tie[2]; 58 | } DrawPlanar_VertexInfo; 59 | 60 | typedef DrawPlanar_VertexInfo *DrawPlanar_VertexInfoP; 61 | 62 | #define DRAWINGFLAG_BEYOND 0 63 | #define DRAWINGFLAG_TIE 1 64 | #define DRAWINGFLAG_BETWEEN 2 65 | #define DRAWINGFLAG_BELOW 3 66 | #define DRAWINGFLAG_ABOVE 4 67 | 68 | typedef struct 69 | { 70 | // Helps distinguish initialize from re-initialize 71 | int initialized; 72 | 73 | // The graph that this context augments 74 | graphP theGraph; 75 | 76 | // Parallel array for additional edge level equipment 77 | DrawPlanar_EdgeRecP E; 78 | 79 | // Parallel array for additional vertex level equipment 80 | DrawPlanar_VertexInfoP VI; 81 | 82 | // Overloaded function pointers 83 | graphFunctionTable functions; 84 | 85 | } DrawPlanarContext; 86 | 87 | #ifdef __cplusplus 88 | } 89 | #endif 90 | 91 | #endif 92 | -------------------------------------------------------------------------------- /c/planarityApp/planarity.1: -------------------------------------------------------------------------------- 1 | .TH planarity 1 2 | 3 | .SH NAME 4 | planarity - The Edge Addition Planarity Suite 5 | 6 | .SH SYNOPSIS 7 | 8 | .SS Getting help 9 | .B planarity -h|-help [-menu] 10 | 11 | .B planarity -i|-info 12 | 13 | .SS Menu-driven mode 14 | .B planarity 15 | 16 | .SS Batch modes 17 | 18 | .B planarity -s [-q] \fICOMMAND\fR \fIINPUT\fR \fIOUTPUT\fR [\fICOMPLEMENT\fR] 19 | 20 | .B planarity -r [-q] \fICOMMAND\fR \fIK\fR \fIN\fR [\fIOUTPUT\fR] 21 | 22 | .B planarity -rm [-q] \fIN\fR \fIOUTPUT\fR [\fICOMPLEMENT\fR] 23 | 24 | .B planarity -rn [-q] \fIN\fR \fIOUTPUT\fR [\fICOMPLEMENT\fR] 25 | 26 | .B planarity -x [-q] \fB-(gam)\fR \fIINPUT\fR \fIOUTPUT\fR 27 | 28 | .B planarity -t [-q] \fICOMMAND\fR \fIINPUT\fR \fIOUTPUT\fR 29 | 30 | .SH DESCRIPTION 31 | Invokes the Edge Addition Planarity Suite command-line tool, either in 32 | interactive mode or in batch mode. 33 | 34 | Without a parameter, the tool presents a menu-driven interactive 35 | interface. 36 | 37 | When a parameter is given, it runs in batch mode and returns 0 or 1 38 | for a successful result and -1 on error. 39 | 40 | .SH OPTIONS 41 | 42 | .TP 43 | .B -h, -help [-menu] 44 | Display some help, with \fB-menu\fR triggering even more detailed output. 45 | 46 | .TP 47 | .B -i, -info 48 | Display version, copyright, license, and reference articles information. 49 | 50 | .TP 51 | .B -q 52 | Quiet mode optional modifier, see below which options accept it. 53 | 54 | .TP 55 | .B -s [-q] \fICOMMAND\fR \fIINPUT\fR \fIOUTPUT\fR [\fICOMPLEMENT\fR] 56 | Run the \fICOMMAND\fR (see below) on a specific graph given in the 57 | \fIINPUT\fR file, with output in the primary \fIOUTPUT\fR file and 58 | complementary information, if any, in the secondary \fICOMPLEMENT\fR file 59 | (e.g. an ASCII art rendition for the planar graph drawing command). The 60 | return value is 0 if the specific graph is embeddable (e.g. it is 61 | planar or doesn't contain a homeomorphic subgraph) and 1 if it isn't 62 | embeddable (e.g. non planar or does contain a homeomorphic subgraph). 63 | 64 | .TP 65 | .B -r [-q] \fICOMMAND\fR \fIK\fR \fIN\fR [\fIOUTPUT\fR] 66 | Run the \fICOMMAND\fR (see below) on \fIK\fR random graphs with 67 | \fIN\fR vertices. Optionally, write all generated graphs to .g6 \fIOUTPUT\fR. 68 | 69 | .TP 70 | .B -rm [-q] \fIN\fR \fIOUTPUT\fR [\fICOMPLEMENT\fR] 71 | Generate a random maximal planar graph with \fIN\fR vertices, then output 72 | its planar embedding in the primary \fIOUTPUT\fR file and optionally the 73 | generated graph in the \fICOMPLEMENT\fR file. 74 | 75 | .TP 76 | .B -rn [-q] \fIN\fR \fIOUTPUT\fR [\fICOMPLEMENT\fR] 77 | Generate a random nonplanar graph (maximal planar plus one edge) with 78 | \fIN\fR vertices, then output a Kuratowski subgraph of the generated graph 79 | in the primary \fIOUTPUT\fR file and optionally the generated graph in 80 | the \fICOMPLEMENT\fR file. 81 | 82 | .TP 83 | .B [-q] \fB-(gam)\fR \fIINPUT\fR \fIOUTPUT\fR 84 | Transform single graph in \fIINPUT\fR file (any supported format) to .g6 (\fBg\fR), 85 | adjacency list (\fBa\fR), or adjacency matrix (\fBm\fR) format and output 86 | to \fIOUTPUT\fR file. 87 | 88 | .TP 89 | .B [-q] \fICOMMAND\fR \fIINPUT\fR \fIOUTPUT\fR 90 | Run the \fICOMMAND\fR (see below) on graphs in .g6 encoded \fIINPUT\fR 91 | file, then output summary statistics to \fIOUTPUT\fR file. 92 | 93 | .SH COMMANDS 94 | Determine which algorithm implementation to run: 95 | .TP 96 | .B -p 97 | Planar embedding and Kuratowski subgraph isolation 98 | .TP 99 | .B -d 100 | Planar graph drawing by visibility representation (and optional ASCII art rendition) 101 | .TP 102 | .B -o 103 | Outerplanar embedding and obstruction isolation 104 | .TP 105 | .B -2 106 | Search for subgraph homeomorphic to K_{2,3} 107 | .TP 108 | .B -3 109 | Search for subgraph homeomorphic to K_{3,3} 110 | .TP 111 | .B -4 112 | Search for subgraph homeomorphic to K_4 113 | 114 | .SH EXAMPLES 115 | .TP 116 | .B planarity -s -q -p infile.txt embedding.out [obstruction.out] 117 | Process infile.txt in quiet mode (-q), putting planar embedding in 118 | embedding.out or (optionally) a Kuratowski subgraph in obstruction.out. 119 | Process returns 0=planar, 1=nonplanar, -1=error 120 | .TP 121 | .B planarity -s -q -d infile.txt embedding.out [drawing.out] 122 | If graph in infile.txt is planar, then put embedding in embedding.out 123 | and (optionally) an ASCII art drawing in drawing.out. 124 | Process returns 0=planar, 1=nonplanar, -1=error 125 | 126 | .SH SEE ALSO 127 | 128 | The full inline help: \fBplanarity -h -menu\fR 129 | 130 | The project homepage: \fBhttps://github.com/graph-algorithms/edge-addition-planarity-suite\fR 131 | -------------------------------------------------------------------------------- /c/planarityApp/planarity.c: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 1997-2025, John M. Boyer 3 | All rights reserved. 4 | See the LICENSE.TXT file for licensing information. 5 | */ 6 | 7 | #include "planarity.h" 8 | 9 | /**************************************************************************** 10 | MAIN 11 | ****************************************************************************/ 12 | 13 | int main(int argc, char *argv[]) 14 | { 15 | int retVal = 0; 16 | 17 | if (argc <= 1) 18 | retVal = menu(); 19 | 20 | else if (argv[1][0] == '-') 21 | retVal = commandLine(argc, argv); 22 | 23 | else 24 | retVal = legacyCommandLine(argc, argv); 25 | 26 | // Close the log file if logging 27 | gp_Log(NULL); 28 | 29 | return retVal; 30 | } 31 | -------------------------------------------------------------------------------- /c/planarityApp/planarity.h: -------------------------------------------------------------------------------- 1 | #ifndef PLANARITY_H 2 | #define PLANARITY_H 3 | 4 | /* 5 | Copyright (c) 1997-2025, John M. Boyer 6 | All rights reserved. 7 | See the LICENSE.TXT file for licensing information. 8 | */ 9 | 10 | #ifdef __cplusplus 11 | extern "C" 12 | { 13 | #endif 14 | 15 | #include "../graphLib/graphLib.h" 16 | 17 | char const*GetProjectTitle(void); 18 | char const*GetAlgorithmFlags(void); 19 | char const*GetAlgorithmSpecifiers(void); 20 | char const*GetAlgorithmChoices(void); 21 | char const*GetSupportedOutputChoices(void); 22 | char const*GetSupportedOutputFormats(void); 23 | 24 | int helpMessage(char *param); 25 | 26 | /* Functions that call the Graph Library */ 27 | int SpecificGraph( 28 | char command, 29 | char const*infileName, char*outfileName, char*outfile2Name, 30 | char *inputStr, char **pOutputStr, char **pOutput2Str); 31 | int RandomGraph(char command, int extraEdges, int numVertices, char *outfileName, char *outfile2Name); 32 | int RandomGraphs(char command, int NumGraphs, int SizeOfGraphs, char *outfileName); 33 | int TransformGraph(char const*commandString, char const*infileName, char *inputStr, int *outputBase, char const*outfileName, char **outputStr); 34 | int TestAllGraphs(char *commandString, char *infileName, char *outfileName, char **outputStr); 35 | 36 | /* Command line, Menu, and Configuration */ 37 | int menu(void); 38 | int commandLine(int argc, char *argv[]); 39 | int legacyCommandLine(int argc, char *argv[]); 40 | 41 | extern char Mode, 42 | OrigOut, 43 | OrigOutFormat, 44 | EmbeddableOut, 45 | ObstructedOut, 46 | AdjListsForEmbeddingsOut; 47 | 48 | void Reconfigure(void); 49 | 50 | /* Low-level Utilities */ 51 | void FlushConsole(FILE *f); 52 | void Prompt(char const*message); 53 | 54 | void SaveAsciiGraph(graphP theGraph, char *filename); 55 | 56 | char *ReadTextFileIntoString(char const*infileName); 57 | int TextFileMatchesString(char const*theFilename, char const*theString); 58 | int TextFilesEqual(char *file1Name, char *file2Name); 59 | int BinaryFilesEqual(char *file1Name, char *file2Name); 60 | 61 | int GetEmbedFlags(char command); 62 | char const*GetAlgorithmName(char command); 63 | char const*GetTransformationName(char command); 64 | char const*GetBaseName(int baseFlag); 65 | void AttachAlgorithm(graphP theGraph, char command); 66 | 67 | char *ConstructInputFilename(char const*infileName); 68 | char *ConstructPrimaryOutputFilename(char const*infileName, char const*outfileName, char command); 69 | int ConstructTransformationExpectedResultFilename(char const*infileName, char **outfileName, char command, int actualOrExpectedFlag); 70 | void WriteAlgorithmResults(graphP theGraph, int Result, char command, platform_time start, platform_time end, char const*infileName); 71 | 72 | #ifdef __cplusplus 73 | } 74 | #endif 75 | 76 | #endif 77 | -------------------------------------------------------------------------------- /c/planarityApp/planarityTransformGraph.c: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 1997-2025, John M. Boyer 3 | All rights reserved. 4 | See the LICENSE.TXT file for licensing information. 5 | */ 6 | 7 | #include "planarity.h" 8 | 9 | int transformFile(graphP theGraph, char const*infileName); 10 | int transformString(graphP theGraph, char *inputStr); 11 | 12 | /**************************************************************************** 13 | TransformGraph() 14 | commandString - command to run; i.e. `-(gam)` to transform graph to .g6, adjacency list, or 15 | adjacency matrix format 16 | infileName - name of file to read, or NULL to cause the program to prompt the user for a filename 17 | inputStr - string containing input graph, or NULL to cause the program to fall back on reading from file 18 | outputBase - pointer to the flag set for whether output is 0- or 1-based 19 | outputFormat - output format 20 | outfileName - name of primary output file, or NULL to construct an output filename based on the input 21 | outputStr - pointer to string which we wish to use to store the transformation output 22 | ****************************************************************************/ 23 | int TransformGraph(char const*commandString, char const*infileName, char *inputStr, int *outputBase, char const*outfileName, char **outputStr) 24 | { 25 | int Result = OK; 26 | 27 | graphP theGraph; 28 | 29 | theGraph = gp_New(); 30 | 31 | int outputFormat = -1; 32 | 33 | if (commandString[0] == '-') 34 | { 35 | if (commandString[1] == 'g') 36 | outputFormat = WRITE_G6; 37 | else if (commandString[1] == 'a') 38 | outputFormat = WRITE_ADJLIST; 39 | else if (commandString[1] == 'm') 40 | outputFormat = WRITE_ADJMATRIX; 41 | else 42 | { 43 | ErrorMessage("Invalid argument; only -(gam) is allowed.\n"); 44 | return NOTOK; 45 | } 46 | 47 | if (inputStr) 48 | Result = transformString(theGraph, inputStr); 49 | else 50 | Result = transformFile(theGraph, infileName); 51 | 52 | if (Result != OK) 53 | { 54 | ErrorMessage("Unable to transform input graph.\n"); 55 | } 56 | else 57 | { 58 | // Want to know whether the output is 0- or 1-based; will always be 59 | // 0-based for transformations of .g6 input 60 | if (outputBase != NULL) 61 | (*outputBase) = (theGraph->internalFlags & FLAGS_ZEROBASEDIO) ? 1 : 0; 62 | 63 | if (outputStr != NULL) 64 | Result = gp_WriteToString(theGraph, outputStr, outputFormat); 65 | else 66 | Result = gp_Write(theGraph, outfileName, outputFormat); 67 | 68 | if (Result != OK) 69 | ErrorMessage("Unable to write graph.\n"); 70 | } 71 | } 72 | else 73 | { 74 | ErrorMessage("Invalid argument; must start with '-'.\n"); 75 | Result = NOTOK; 76 | } 77 | 78 | gp_Free(&theGraph); 79 | return Result; 80 | } 81 | 82 | int transformFile(graphP theGraph, char const*infileName) 83 | { 84 | if (infileName == NULL) 85 | { 86 | if ((infileName = ConstructInputFilename(infileName)) == NULL) 87 | return NOTOK; 88 | } 89 | 90 | return gp_Read(theGraph, infileName); 91 | } 92 | 93 | int transformString(graphP theGraph, char *inputStr) 94 | { 95 | if (inputStr == NULL || strlen(inputStr) == 0) 96 | { 97 | ErrorMessage("Input string is null or empty.\n"); 98 | return NOTOK; 99 | } 100 | 101 | return gp_ReadFromString(theGraph, inputStr); 102 | } 103 | -------------------------------------------------------------------------------- /c/samples/K10.g6: -------------------------------------------------------------------------------- 1 | >>graph6<>graph6<>graph6< 13 | 0: 0 14 | 1: 2 15 | 2: 0 16 | 3: 1 17 | 4: 2 18 | 5: 2 19 | 6: 1 20 | 7: 1 21 | 8: 0 22 | 9: 0 23 | 24 | -------------------------------------------------------------------------------- /c/samples/Petersen.0-based.txt.K23Search.out.txt: -------------------------------------------------------------------------------- 1 | N=10 2 | 0: -1 3 | 1: -1 4 | 2: -1 5 | 3: 4 8 -1 6 | 4: 3 9 -1 7 | 5: 7 8 -1 8 | 6: 8 9 -1 9 | 7: 9 5 -1 10 | 8: 5 6 3 -1 11 | 9: 4 6 7 -1 12 | -------------------------------------------------------------------------------- /c/samples/Petersen.0-based.txt.K33Search.out.txt: -------------------------------------------------------------------------------- 1 | N=10 2 | 0: -1 3 | 1: 2 6 -1 4 | 2: 1 3 7 -1 5 | 3: 2 4 8 -1 6 | 4: 3 9 -1 7 | 5: 7 8 -1 8 | 6: 8 9 1 -1 9 | 7: 9 5 2 -1 10 | 8: 5 6 3 -1 11 | 9: 4 6 7 -1 12 | -------------------------------------------------------------------------------- /c/samples/Petersen.0-based.txt.K4Search.out.txt: -------------------------------------------------------------------------------- 1 | N=10 2 | 0: -1 3 | 1: -1 4 | 2: 3 7 -1 5 | 3: 2 4 8 -1 6 | 4: 3 9 -1 7 | 5: 7 8 -1 8 | 6: 8 9 -1 9 | 7: 9 5 2 -1 10 | 8: 5 6 3 -1 11 | 9: 4 6 7 -1 12 | -------------------------------------------------------------------------------- /c/samples/Petersen.0-based.txt.OuterplanarEmbed.out.txt: -------------------------------------------------------------------------------- 1 | N=10 2 | 0: -1 3 | 1: -1 4 | 2: -1 5 | 3: 4 8 -1 6 | 4: 3 9 -1 7 | 5: 7 8 -1 8 | 6: 8 9 -1 9 | 7: 9 5 -1 10 | 8: 5 6 3 -1 11 | 9: 4 6 7 -1 12 | -------------------------------------------------------------------------------- /c/samples/Petersen.0-based.txt.PlanarEmbed.out.txt: -------------------------------------------------------------------------------- 1 | N=10 2 | 0: -1 3 | 1: 2 6 -1 4 | 2: 1 3 7 -1 5 | 3: 2 4 8 -1 6 | 4: 3 9 -1 7 | 5: 7 8 -1 8 | 6: 8 9 1 -1 9 | 7: 9 5 2 -1 10 | 8: 5 6 3 -1 11 | 9: 4 6 7 -1 12 | -------------------------------------------------------------------------------- /c/samples/Petersen.txt: -------------------------------------------------------------------------------- 1 | N=10 2 | 1: 2 6 5 0 3 | 2: 3 7 1 0 4 | 3: 4 8 2 0 5 | 4: 5 9 3 0 6 | 5: 1 10 4 0 7 | 6: 1 8 9 0 8 | 7: 2 9 10 0 9 | 8: 3 10 6 0 10 | 9: 4 6 7 0 11 | 10: 5 7 8 0 12 | -------------------------------------------------------------------------------- /c/samples/Petersen.txt.ColorVertices.out.txt: -------------------------------------------------------------------------------- 1 | N=10 2 | 1: 2 6 5 0 3 | 2: 3 7 1 0 4 | 3: 4 8 2 0 5 | 4: 5 9 3 0 6 | 5: 1 10 4 0 7 | 6: 1 8 9 0 8 | 7: 2 9 10 0 9 | 8: 3 10 6 0 10 | 9: 4 6 7 0 11 | 10: 5 7 8 0 12 | 13 | 1: 0 14 | 2: 2 15 | 3: 0 16 | 4: 1 17 | 5: 2 18 | 6: 2 19 | 7: 1 20 | 8: 1 21 | 9: 0 22 | 10: 0 23 | 24 | -------------------------------------------------------------------------------- /c/samples/Petersen.txt.K23Search.out.txt: -------------------------------------------------------------------------------- 1 | N=10 2 | 1: 0 3 | 2: 0 4 | 3: 0 5 | 4: 5 9 0 6 | 5: 4 10 0 7 | 6: 8 9 0 8 | 7: 9 10 0 9 | 8: 10 6 0 10 | 9: 6 7 4 0 11 | 10: 5 7 8 0 12 | -------------------------------------------------------------------------------- /c/samples/Petersen.txt.K33Search.out.txt: -------------------------------------------------------------------------------- 1 | N=10 2 | 1: 0 3 | 2: 3 7 0 4 | 3: 2 4 8 0 5 | 4: 3 5 9 0 6 | 5: 4 10 0 7 | 6: 8 9 0 8 | 7: 9 10 2 0 9 | 8: 10 6 3 0 10 | 9: 6 7 4 0 11 | 10: 5 7 8 0 12 | -------------------------------------------------------------------------------- /c/samples/Petersen.txt.K4Search.out.txt: -------------------------------------------------------------------------------- 1 | N=10 2 | 1: 0 3 | 2: 0 4 | 3: 4 8 0 5 | 4: 3 5 9 0 6 | 5: 4 10 0 7 | 6: 8 9 0 8 | 7: 9 10 0 9 | 8: 10 6 3 0 10 | 9: 6 7 4 0 11 | 10: 5 7 8 0 12 | -------------------------------------------------------------------------------- /c/samples/Petersen.txt.OuterplanarEmbed.out.txt: -------------------------------------------------------------------------------- 1 | N=10 2 | 1: 0 3 | 2: 0 4 | 3: 0 5 | 4: 5 9 0 6 | 5: 4 10 0 7 | 6: 8 9 0 8 | 7: 9 10 0 9 | 8: 10 6 0 10 | 9: 6 7 4 0 11 | 10: 5 7 8 0 12 | -------------------------------------------------------------------------------- /c/samples/Petersen.txt.PlanarEmbed.out.txt: -------------------------------------------------------------------------------- 1 | N=10 2 | 1: 0 3 | 2: 3 7 0 4 | 3: 2 4 8 0 5 | 4: 3 5 9 0 6 | 5: 4 10 0 7 | 6: 8 9 0 8 | 7: 9 10 2 0 9 | 8: 10 6 3 0 10 | 9: 6 7 4 0 11 | 10: 5 7 8 0 12 | -------------------------------------------------------------------------------- /c/samples/drawExample.0-based.txt: -------------------------------------------------------------------------------- 1 | N=15 2 | 0: 1 3 14 -4 3 | 1: 0 2 5 8 11 -4 4 | 2: 1 11 5 -4 5 | 3: 0 4 7 -4 6 | 4: 3 6 10 12 -4 7 | 5: 1 9 2 -4 8 | 6: 4 13 -4 9 | 7: 3 10 14 -4 10 | 8: 1 13 -4 11 | 9: 5 14 -4 12 | 10: 4 12 7 -4 13 | 11: 1 2 -4 14 | 12: 4 10 13 -4 15 | 13: 8 12 6 -4 16 | 14: 0 9 7 -4 17 | -------------------------------------------------------------------------------- /c/samples/drawExample.0-based.txt.ColorVertices.out.txt: -------------------------------------------------------------------------------- 1 | N=15 2 | 0: 1 3 14 -1 3 | 1: 0 2 5 8 11 -1 4 | 2: 1 11 5 -1 5 | 3: 0 4 7 -1 6 | 4: 3 6 10 12 -1 7 | 5: 1 9 2 -1 8 | 6: 4 13 -1 9 | 7: 3 10 14 -1 10 | 8: 1 13 -1 11 | 9: 5 14 -1 12 | 10: 4 12 7 -1 13 | 11: 1 2 -1 14 | 12: 4 10 13 -1 15 | 13: 8 12 6 -1 16 | 14: 0 9 7 -1 17 | 18 | 0: 1 19 | 1: 0 20 | 2: 1 21 | 3: 0 22 | 4: 1 23 | 5: 2 24 | 6: 2 25 | 7: 1 26 | 8: 1 27 | 9: 1 28 | 10: 0 29 | 11: 2 30 | 12: 2 31 | 13: 0 32 | 14: 0 33 | 34 | -------------------------------------------------------------------------------- /c/samples/drawExample.0-based.txt.DrawPlanar.out.txt: -------------------------------------------------------------------------------- 1 | N=15 2 | 0: 1 3 14 -1 3 | 1: 2 11 5 8 0 -1 4 | 2: 5 11 1 -1 5 | 3: 0 4 7 -1 6 | 4: 6 12 10 3 -1 7 | 5: 9 1 2 -1 8 | 6: 13 4 -1 9 | 7: 3 10 14 -1 10 | 8: 1 13 -1 11 | 9: 14 5 -1 12 | 10: 7 4 12 -1 13 | 11: 1 2 -1 14 | 12: 10 4 13 -1 15 | 13: 8 12 6 -1 16 | 14: 0 7 9 -1 17 | 18 | 0: 0 0 21 19 | 1: 14 4 21 20 | 2: 12 3 5 21 | 3: 1 8 11 22 | 4: 2 11 16 23 | 5: 11 2 7 24 | 6: 3 16 17 25 | 7: 8 9 13 26 | 8: 7 19 20 27 | 9: 10 1 2 28 | 10: 6 12 15 29 | 11: 13 5 6 30 | 12: 5 14 18 31 | 13: 4 17 19 32 | 14: 9 0 10 33 | 0: 21 0 14 34 | 1: 21 0 14 35 | 2: 8 0 1 36 | 3: 8 0 1 37 | 4: 0 0 9 38 | 5: 0 0 9 39 | 6: 4 12 14 40 | 7: 4 12 14 41 | 8: 7 11 14 42 | 9: 7 11 14 43 | 10: 20 7 14 44 | 11: 20 7 14 45 | 12: 6 13 14 46 | 13: 6 13 14 47 | 14: 5 12 13 48 | 15: 5 12 13 49 | 16: 3 11 12 50 | 17: 3 11 12 51 | 18: 11 1 2 52 | 19: 11 1 2 53 | 20: 9 1 8 54 | 21: 9 1 8 55 | 22: 16 2 3 56 | 23: 16 2 3 57 | 24: 12 2 6 58 | 25: 12 2 6 59 | 26: 14 2 5 60 | 27: 14 2 5 61 | 28: 2 10 11 62 | 29: 2 10 11 63 | 30: 17 3 4 64 | 31: 17 3 4 65 | 32: 13 6 8 66 | 33: 13 6 8 67 | 34: 10 8 9 68 | 35: 10 8 9 69 | 36: 19 4 7 70 | 37: 19 4 7 71 | 38: 1 9 10 72 | 39: 1 9 10 73 | 40: 15 5 6 74 | 41: 15 5 6 75 | 42: 18 4 5 76 | 43: 18 4 5 77 | 78 | -------------------------------------------------------------------------------- /c/samples/drawExample.0-based.txt.DrawPlanar.out.txt.render.txt: -------------------------------------------------------------------------------- 1 | ----------0----------- 2 | | | | 3 | | -3-- | 4 | | | | | 5 | | | --4--- | 6 | | | | | | | 7 | | | | | 6- | 8 | | | | | | | 9 | | | | | -13 | 10 | | | | | || | 11 | | | | --12-| | 12 | | | | | | | 13 | | | -10- | | 14 | | | | | | 15 | | | | 8-| 16 | | | | || 17 | | --7-- || 18 | | | || 19 | -----14---- || 20 | | || 21 | 9- || 22 | | || 23 | --5--- || 24 | | | || 25 | -2- | || 26 | || | || 27 | |11| || 28 | | || || 29 | --------1--------- 30 | 31 | -------------------------------------------------------------------------------- /c/samples/drawExample.txt: -------------------------------------------------------------------------------- 1 | N=15 2 | 1: 2 4 15 0 3 | 2: 1 3 6 9 12 0 4 | 3: 2 12 6 0 5 | 4: 1 5 8 0 6 | 5: 4 7 11 13 0 7 | 6: 2 10 3 0 8 | 7: 5 14 0 9 | 8: 4 11 15 0 10 | 9: 2 14 0 11 | 10: 6 15 0 12 | 11: 5 13 8 0 13 | 12: 2 3 0 14 | 13: 5 11 14 0 15 | 14: 9 13 7 0 16 | 15: 1 10 8 0 17 | -------------------------------------------------------------------------------- /c/samples/drawExample.txt.ColorVertices.out.txt: -------------------------------------------------------------------------------- 1 | N=15 2 | 1: 2 4 15 0 3 | 2: 1 3 6 9 12 0 4 | 3: 2 12 6 0 5 | 4: 1 5 8 0 6 | 5: 4 7 11 13 0 7 | 6: 2 10 3 0 8 | 7: 5 14 0 9 | 8: 4 11 15 0 10 | 9: 2 14 0 11 | 10: 6 15 0 12 | 11: 5 13 8 0 13 | 12: 2 3 0 14 | 13: 5 11 14 0 15 | 14: 9 13 7 0 16 | 15: 1 10 8 0 17 | 18 | 1: 1 19 | 2: 0 20 | 3: 1 21 | 4: 0 22 | 5: 1 23 | 6: 2 24 | 7: 2 25 | 8: 1 26 | 9: 1 27 | 10: 1 28 | 11: 0 29 | 12: 2 30 | 13: 2 31 | 14: 0 32 | 15: 0 33 | 34 | -------------------------------------------------------------------------------- /c/samples/drawExample.txt.DrawPlanar.out.txt: -------------------------------------------------------------------------------- 1 | N=15 2 | 1: 2 4 15 0 3 | 2: 3 12 6 9 1 0 4 | 3: 6 12 2 0 5 | 4: 1 5 8 0 6 | 5: 7 13 11 4 0 7 | 6: 10 2 3 0 8 | 7: 14 5 0 9 | 8: 4 11 15 0 10 | 9: 2 14 0 11 | 10: 15 6 0 12 | 11: 8 5 13 0 13 | 12: 2 3 0 14 | 13: 11 5 14 0 15 | 14: 9 13 7 0 16 | 15: 1 8 10 0 17 | 18 | 1: 0 0 21 19 | 2: 14 4 21 20 | 3: 12 3 5 21 | 4: 1 8 11 22 | 5: 2 11 16 23 | 6: 11 2 7 24 | 7: 3 16 17 25 | 8: 8 9 13 26 | 9: 7 19 20 27 | 10: 10 1 2 28 | 11: 6 12 15 29 | 12: 13 5 6 30 | 13: 5 14 18 31 | 14: 4 17 19 32 | 15: 9 0 10 33 | 2: 21 0 14 34 | 3: 21 0 14 35 | 4: 8 0 1 36 | 5: 8 0 1 37 | 6: 0 0 9 38 | 7: 0 0 9 39 | 8: 4 12 14 40 | 9: 4 12 14 41 | 10: 7 11 14 42 | 11: 7 11 14 43 | 12: 20 7 14 44 | 13: 20 7 14 45 | 14: 6 13 14 46 | 15: 6 13 14 47 | 16: 5 12 13 48 | 17: 5 12 13 49 | 18: 3 11 12 50 | 19: 3 11 12 51 | 20: 11 1 2 52 | 21: 11 1 2 53 | 22: 9 1 8 54 | 23: 9 1 8 55 | 24: 16 2 3 56 | 25: 16 2 3 57 | 26: 12 2 6 58 | 27: 12 2 6 59 | 28: 14 2 5 60 | 29: 14 2 5 61 | 30: 2 10 11 62 | 31: 2 10 11 63 | 32: 17 3 4 64 | 33: 17 3 4 65 | 34: 13 6 8 66 | 35: 13 6 8 67 | 36: 10 8 9 68 | 37: 10 8 9 69 | 38: 19 4 7 70 | 39: 19 4 7 71 | 40: 1 9 10 72 | 41: 1 9 10 73 | 42: 15 5 6 74 | 43: 15 5 6 75 | 44: 18 4 5 76 | 45: 18 4 5 77 | 78 | -------------------------------------------------------------------------------- /c/samples/drawExample.txt.DrawPlanar.out.txt.render.txt: -------------------------------------------------------------------------------- 1 | ----------1----------- 2 | | | | 3 | | -4-- | 4 | | | | | 5 | | | --5--- | 6 | | | | | | | 7 | | | | | 7- | 8 | | | | | | | 9 | | | | | -14 | 10 | | | | | || | 11 | | | | --13-| | 12 | | | | | | | 13 | | | -11- | | 14 | | | | | | 15 | | | | 9-| 16 | | | | || 17 | | --8-- || 18 | | | || 19 | -----15---- || 20 | | || 21 | 10 || 22 | | || 23 | --6--- || 24 | | | || 25 | -3- | || 26 | || | || 27 | |12| || 28 | | || || 29 | --------2--------- 30 | 31 | -------------------------------------------------------------------------------- /c/samples/maxPlanar5.0-based.txt: -------------------------------------------------------------------------------- 1 | N=5 2 | 0: 2 1 4 3 -1 3 | 1: 2 4 0 3 -1 4 | 2: 0 1 4 -1 5 | 3: 4 0 1 -1 6 | 4: 1 0 3 2 -1 7 | -------------------------------------------------------------------------------- /c/samples/maxPlanar5.0-based.txt.ColorVertices.out.txt: -------------------------------------------------------------------------------- 1 | N=5 2 | 0: 2 1 4 3 -1 3 | 1: 2 4 0 3 -1 4 | 2: 0 1 4 -1 5 | 3: 4 0 1 -1 6 | 4: 1 0 3 2 -1 7 | 8 | 0: 1 9 | 1: 2 10 | 2: 3 11 | 3: 3 12 | 4: 0 13 | 14 | -------------------------------------------------------------------------------- /c/samples/maxPlanar5.0-based.txt.DrawPlanar.out.txt: -------------------------------------------------------------------------------- 1 | N=5 2 | 0: 2 4 3 1 -1 3 | 1: 0 3 4 2 -1 4 | 2: 1 4 0 -1 5 | 3: 0 4 1 -1 6 | 4: 0 2 1 3 -1 7 | 8 | 0: 0 0 8 9 | 1: 3 0 6 10 | 2: 4 1 8 11 | 3: 2 2 5 12 | 4: 1 4 7 13 | 0: 8 0 4 14 | 1: 8 0 4 15 | 2: 0 0 3 16 | 3: 0 0 3 17 | 4: 4 0 1 18 | 5: 4 0 1 19 | 6: 2 0 2 20 | 7: 2 0 2 21 | 8: 1 3 4 22 | 9: 1 3 4 23 | 10: 6 1 3 24 | 11: 6 1 3 25 | 12: 3 2 3 26 | 13: 3 2 3 27 | 14: 7 1 4 28 | 15: 7 1 4 29 | 16: 5 1 2 30 | 17: 5 1 2 31 | 32 | -------------------------------------------------------------------------------- /c/samples/maxPlanar5.0-based.txt.DrawPlanar.out.txt.render.txt: -------------------------------------------------------------------------------- 1 | ----0---- 2 | | | | | 3 | | | -4--| 4 | | | |||| 5 | | -3--||| 6 | | | ||| 7 | ---1---|| 8 | | || 9 | ---2---- 10 | 11 | -------------------------------------------------------------------------------- /c/samples/maxPlanar5.0-based.txt.PlanarEmbed.out.txt: -------------------------------------------------------------------------------- 1 | N=5 2 | 0: 2 4 3 1 -1 3 | 1: 0 3 4 2 -1 4 | 2: 1 4 0 -1 5 | 3: 0 4 1 -1 6 | 4: 0 2 1 3 -1 7 | -------------------------------------------------------------------------------- /c/samples/maxPlanar5.txt: -------------------------------------------------------------------------------- 1 | N=5 2 | 1: 3 2 5 4 0 3 | 2: 3 5 1 4 0 4 | 3: 1 2 5 0 5 | 4: 5 1 2 0 6 | 5: 2 1 4 3 0 7 | -------------------------------------------------------------------------------- /c/samples/maxPlanar5.txt.ColorVertices.out.txt: -------------------------------------------------------------------------------- 1 | N=5 2 | 1: 3 2 5 4 0 3 | 2: 3 5 1 4 0 4 | 3: 1 2 5 0 5 | 4: 5 1 2 0 6 | 5: 2 1 4 3 0 7 | 8 | 1: 1 9 | 2: 2 10 | 3: 3 11 | 4: 3 12 | 5: 0 13 | 14 | -------------------------------------------------------------------------------- /c/samples/maxPlanar5.txt.DrawPlanar.out.txt: -------------------------------------------------------------------------------- 1 | N=5 2 | 1: 3 5 4 2 0 3 | 2: 1 4 5 3 0 4 | 3: 2 5 1 0 5 | 4: 1 5 2 0 6 | 5: 1 3 2 4 0 7 | 8 | 1: 0 0 8 9 | 2: 3 0 6 10 | 3: 4 1 8 11 | 4: 2 2 5 12 | 5: 1 4 7 13 | 2: 8 0 4 14 | 3: 8 0 4 15 | 4: 0 0 3 16 | 5: 0 0 3 17 | 6: 4 0 1 18 | 7: 4 0 1 19 | 8: 2 0 2 20 | 9: 2 0 2 21 | 10: 1 3 4 22 | 11: 1 3 4 23 | 12: 6 1 3 24 | 13: 6 1 3 25 | 14: 3 2 3 26 | 15: 3 2 3 27 | 16: 7 1 4 28 | 17: 7 1 4 29 | 18: 5 1 2 30 | 19: 5 1 2 31 | 32 | -------------------------------------------------------------------------------- /c/samples/maxPlanar5.txt.DrawPlanar.out.txt.render.txt: -------------------------------------------------------------------------------- 1 | ----1---- 2 | | | | | 3 | | | -5--| 4 | | | |||| 5 | | -4--||| 6 | | | ||| 7 | ---2---|| 8 | | || 9 | ---3---- 10 | 11 | -------------------------------------------------------------------------------- /c/samples/maxPlanar5.txt.PlanarEmbed.out.txt: -------------------------------------------------------------------------------- 1 | N=5 2 | 1: 3 5 4 2 0 3 | 2: 1 4 5 3 0 4 | 3: 2 5 1 0 5 | 4: 1 5 2 0 6 | 5: 1 3 2 4 0 7 | -------------------------------------------------------------------------------- /c/samples/nauty_example.LEDA: -------------------------------------------------------------------------------- 1 | LEDA.GRAPH 2 | void 3 | void 4 | -2 5 | 6 | 5 7 | |{v1}| 8 | |{v2}| 9 | |{v3}| 10 | |{v4}| 11 | |{v5}| 12 | 13 | 4 14 | 1 3 0 |{}| 15 | 1 5 0 |{}| 16 | 2 4 0 |{}| 17 | 4 5 0 |{}| 18 | -------------------------------------------------------------------------------- /c/samples/nauty_example.g6: -------------------------------------------------------------------------------- 1 | >>graph6<>graph6<>CHANGEME<< 17 | commands_to_run = 18 | 19 | [RandomNonplanarGraphGenerator] 20 | enabled = False 21 | perform_full_analysis = True 22 | order = 1000 23 | 24 | [TransformGraph] 25 | enabled = False 26 | perform_full_analysis = True 27 | infile_path = >>CHANGEME<< 28 | output_formats_to_test = 29 | 30 | [TestAllGraphs] 31 | enabled = False 32 | perform_full_analysis = True 33 | infile_path = >>CHANGEME<< 34 | commands_to_run = 35 | 36 | -------------------------------------------------------------------------------- /devEnvSetupAndDefaults/devEnvSetup.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | echo -e "Copying VSCode configuration files.\n" 4 | cp -R .vscode ../ 5 | 6 | echo -e "Copying Python TestSupport pylint configuration file.\n" 7 | cp TestSupport/planaritytesting/.pylintrc ../TestSupport/planaritytesting/ 8 | 9 | echo -e "Copying planarity leaks orchestrator default configuration file.\n" 10 | cp TestSupport/planaritytesting/leaksorchestrator/planarity_leaks_config.ini ../TestSupport/planaritytesting/leaksorchestrator/ 11 | 12 | echo -e "Making directories for Random Graphs output.\n" 13 | mkdir -p ../random 14 | mkdir -p ../embedded 15 | mkdir -p ../adjlist 16 | mkdir -p ../obstructed 17 | mkdir -p ../error 18 | 19 | echo -e "Making m4 directory for autotools build process.\n" 20 | mkdir -p ../m4 21 | -------------------------------------------------------------------------------- /libplanarity.pc.in: -------------------------------------------------------------------------------- 1 | prefix=@prefix@ 2 | exec_prefix=@exec_prefix@ 3 | libdir=@libdir@ 4 | includedir=@includedir@ 5 | 6 | Name: @PACKAGE_NAME@ 7 | URL: https://github.com/graph-algorithms/edge-addition-planarity-suite 8 | Description: Edge Addition Planarity Suite Graph Library 9 | Version: @PACKAGE_VERSION@ 10 | Libs: -L${libdir} -lplanarity 11 | Cflags: -I${includedir} 12 | -------------------------------------------------------------------------------- /m4/ax_append_compile_flags.m4: -------------------------------------------------------------------------------- 1 | # ============================================================================ 2 | # https://www.gnu.org/software/autoconf-archive/ax_append_compile_flags.html 3 | # ============================================================================ 4 | # 5 | # SYNOPSIS 6 | # 7 | # AX_APPEND_COMPILE_FLAGS([FLAG1 FLAG2 ...], [FLAGS-VARIABLE], [EXTRA-FLAGS], [INPUT]) 8 | # 9 | # DESCRIPTION 10 | # 11 | # For every FLAG1, FLAG2 it is checked whether the compiler works with the 12 | # flag. If it does, the flag is added FLAGS-VARIABLE 13 | # 14 | # If FLAGS-VARIABLE is not specified, the current language's flags (e.g. 15 | # CFLAGS) is used. During the check the flag is always added to the 16 | # current language's flags. 17 | # 18 | # If EXTRA-FLAGS is defined, it is added to the current language's default 19 | # flags (e.g. CFLAGS) when the check is done. The check is thus made with 20 | # the flags: "CFLAGS EXTRA-FLAGS FLAG". This can for example be used to 21 | # force the compiler to issue an error when a bad flag is given. 22 | # 23 | # INPUT gives an alternative input source to AC_COMPILE_IFELSE. 24 | # 25 | # NOTE: This macro depends on the AX_APPEND_FLAG and 26 | # AX_CHECK_COMPILE_FLAG. Please keep this macro in sync with 27 | # AX_APPEND_LINK_FLAGS. 28 | # 29 | # LICENSE 30 | # 31 | # Copyright (c) 2011 Maarten Bosmans 32 | # 33 | # Copying and distribution of this file, with or without modification, are 34 | # permitted in any medium without royalty provided the copyright notice 35 | # and this notice are preserved. This file is offered as-is, without any 36 | # warranty. 37 | 38 | #serial 7 39 | 40 | AC_DEFUN([AX_APPEND_COMPILE_FLAGS], 41 | [AX_REQUIRE_DEFINED([AX_CHECK_COMPILE_FLAG]) 42 | AX_REQUIRE_DEFINED([AX_APPEND_FLAG]) 43 | for flag in $1; do 44 | AX_CHECK_COMPILE_FLAG([$flag], [AX_APPEND_FLAG([$flag], [$2])], [], [$3], [$4]) 45 | done 46 | ])dnl AX_APPEND_COMPILE_FLAGS 47 | -------------------------------------------------------------------------------- /m4/ax_append_flag.m4: -------------------------------------------------------------------------------- 1 | # =========================================================================== 2 | # https://www.gnu.org/software/autoconf-archive/ax_append_flag.html 3 | # =========================================================================== 4 | # 5 | # SYNOPSIS 6 | # 7 | # AX_APPEND_FLAG(FLAG, [FLAGS-VARIABLE]) 8 | # 9 | # DESCRIPTION 10 | # 11 | # FLAG is appended to the FLAGS-VARIABLE shell variable, with a space 12 | # added in between. 13 | # 14 | # If FLAGS-VARIABLE is not specified, the current language's flags (e.g. 15 | # CFLAGS) is used. FLAGS-VARIABLE is not changed if it already contains 16 | # FLAG. If FLAGS-VARIABLE is unset in the shell, it is set to exactly 17 | # FLAG. 18 | # 19 | # NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. 20 | # 21 | # LICENSE 22 | # 23 | # Copyright (c) 2008 Guido U. Draheim 24 | # Copyright (c) 2011 Maarten Bosmans 25 | # 26 | # Copying and distribution of this file, with or without modification, are 27 | # permitted in any medium without royalty provided the copyright notice 28 | # and this notice are preserved. This file is offered as-is, without any 29 | # warranty. 30 | 31 | #serial 8 32 | 33 | AC_DEFUN([AX_APPEND_FLAG], 34 | [dnl 35 | AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_SET_IF 36 | AS_VAR_PUSHDEF([FLAGS], [m4_default($2,_AC_LANG_PREFIX[FLAGS])]) 37 | AS_VAR_SET_IF(FLAGS,[ 38 | AS_CASE([" AS_VAR_GET(FLAGS) "], 39 | [*" $1 "*], [AC_RUN_LOG([: FLAGS already contains $1])], 40 | [ 41 | AS_VAR_APPEND(FLAGS,[" $1"]) 42 | AC_RUN_LOG([: FLAGS="$FLAGS"]) 43 | ]) 44 | ], 45 | [ 46 | AS_VAR_SET(FLAGS,[$1]) 47 | AC_RUN_LOG([: FLAGS="$FLAGS"]) 48 | ]) 49 | AS_VAR_POPDEF([FLAGS])dnl 50 | ])dnl AX_APPEND_FLAG 51 | -------------------------------------------------------------------------------- /m4/ax_check_compile_flag.m4: -------------------------------------------------------------------------------- 1 | # =========================================================================== 2 | # https://www.gnu.org/software/autoconf-archive/ax_check_compile_flag.html 3 | # =========================================================================== 4 | # 5 | # SYNOPSIS 6 | # 7 | # AX_CHECK_COMPILE_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT]) 8 | # 9 | # DESCRIPTION 10 | # 11 | # Check whether the given FLAG works with the current language's compiler 12 | # or gives an error. (Warnings, however, are ignored) 13 | # 14 | # ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on 15 | # success/failure. 16 | # 17 | # If EXTRA-FLAGS is defined, it is added to the current language's default 18 | # flags (e.g. CFLAGS) when the check is done. The check is thus made with 19 | # the flags: "CFLAGS EXTRA-FLAGS FLAG". This can for example be used to 20 | # force the compiler to issue an error when a bad flag is given. 21 | # 22 | # INPUT gives an alternative input source to AC_COMPILE_IFELSE. 23 | # 24 | # NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this 25 | # macro in sync with AX_CHECK_{PREPROC,LINK}_FLAG. 26 | # 27 | # LICENSE 28 | # 29 | # Copyright (c) 2008 Guido U. Draheim 30 | # Copyright (c) 2011 Maarten Bosmans 31 | # 32 | # Copying and distribution of this file, with or without modification, are 33 | # permitted in any medium without royalty provided the copyright notice 34 | # and this notice are preserved. This file is offered as-is, without any 35 | # warranty. 36 | 37 | #serial 11 38 | 39 | AC_DEFUN([AX_CHECK_COMPILE_FLAG], 40 | [AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_IF 41 | AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1])dnl 42 | AC_CACHE_CHECK([whether the _AC_LANG compiler accepts $1], CACHEVAR, [ 43 | ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS 44 | if test x"m4_case(_AC_LANG, 45 | [C], [$GCC], 46 | [C++], [$GXX], 47 | [Fortran], [$GFC], 48 | [Fortran 77], [$G77], 49 | [Objective C], [$GOBJC], 50 | [Objective C++], [$GOBJCXX], 51 | [no])" = xyes ; then 52 | add_gnu_werror="-Werror" 53 | fi 54 | _AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1 $add_gnu_werror" 55 | AC_COMPILE_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])], 56 | [AS_VAR_SET(CACHEVAR,[yes])], 57 | [AS_VAR_SET(CACHEVAR,[no])]) 58 | _AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags]) 59 | AS_VAR_IF(CACHEVAR,yes, 60 | [m4_default([$2], :)], 61 | [m4_default([$3], :)]) 62 | AS_VAR_POPDEF([CACHEVAR])dnl 63 | ])dnl AX_CHECK_COMPILE_FLAGS 64 | -------------------------------------------------------------------------------- /m4/ax_require_defined.m4: -------------------------------------------------------------------------------- 1 | # =========================================================================== 2 | # https://www.gnu.org/software/autoconf-archive/ax_require_defined.html 3 | # =========================================================================== 4 | # 5 | # SYNOPSIS 6 | # 7 | # AX_REQUIRE_DEFINED(MACRO) 8 | # 9 | # DESCRIPTION 10 | # 11 | # AX_REQUIRE_DEFINED is a simple helper for making sure other macros have 12 | # been defined and thus are available for use. This avoids random issues 13 | # where a macro isn't expanded. Instead the configure script emits a 14 | # non-fatal: 15 | # 16 | # ./configure: line 1673: AX_CFLAGS_WARN_ALL: command not found 17 | # 18 | # It's like AC_REQUIRE except it doesn't expand the required macro. 19 | # 20 | # Here's an example: 21 | # 22 | # AX_REQUIRE_DEFINED([AX_CHECK_LINK_FLAG]) 23 | # 24 | # LICENSE 25 | # 26 | # Copyright (c) 2014 Mike Frysinger 27 | # 28 | # Copying and distribution of this file, with or without modification, are 29 | # permitted in any medium without royalty provided the copyright notice 30 | # and this notice are preserved. This file is offered as-is, without any 31 | # warranty. 32 | 33 | #serial 2 34 | 35 | AC_DEFUN([AX_REQUIRE_DEFINED], [dnl 36 | m4_ifndef([$1], [m4_fatal([macro ]$1[ is not defined; is a m4 file missing?])]) 37 | ])dnl AX_REQUIRE_DEFINED 38 | -------------------------------------------------------------------------------- /test-samples.sh.in: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # 3 | # Run "planarity -test" using planarity from the build tree and the 4 | # samples from the source tree. 5 | # 6 | 7 | samplesdir="@abs_top_srcdir@/c/samples" 8 | planaritydir="@abs_top_builddir@" 9 | 10 | cd "${planaritydir}" || exit 1 11 | ./planarity -test "${samplesdir}" || exit 2 12 | --------------------------------------------------------------------------------