Git Product home page Git Product logo

gehash's Introduction

GEHash

Author: Adam Freiberg

e-mail: [email protected]

Introduction

GEhash was developed as a part of my bachelor's thesis about Evolutionary Design of Hash Functions Using Grammatical Evolution.

Its main focus is on generating hash function for IPv6 used in network flow monitoring.


Build

Project uses CMake to generate build files.

For basic configuration run following commands:

cmake -S . -B build
cmake --build build

Run

There are two ways to run program.

First is to run program directly:

./build/src/GEHash ... [parameters]

Or use provided shell script:

./eval.sh ... [parameters]

Second option automaticaly handles multiple runs (to avoid statistical error) and output files.

To display all parameters and their usage, run following command:

./build/src/GEHash [-h|--help]

Output

Output files are in JSON format for easier processing. There are two main categories of status parameter. First is progress and second is result, which indicates stage of evoluion run.

Example of output data:

[
    ...,
    {
        "fitness": 24579.0,
        "gen": 4,
        "status": "progress"
    },
    {
        "fitness": 24579.0,
        "gen": 5,
        "phenotype": {
            "code": "hash = ~(hash+(~(key)^key<<3)+hash);"
        },
        "status": "result"
    }
]

CMake options

Documentation

  • ENABLE_DOCS - generate documentation wih Doxygen

Dynamic analyzers

  • ENABLE_SANITIZER_ADDRESS - use address sanitizer
  • ENABLE_SANITIZER_LEAK - use memory leak sanitizer
  • ENABLE_SANITIZER_UNDEFINED_BEHAVIOR - use undefined behaviour sanitizer

Staic analyzers

  • ENABLE_CLANG_TIDY - use Clang-tidy static analyzer tool

Dependecies

Gram library available at GitHub.

ChaiScript library available at GitHub.

Nlohmann JSON used lightweight version available at GitHub due to extensive size of original repository. Full version available here

Catch2 test library for C++ available at GitHub. Currently using v2.13.4.


Testing

Testing will be added in future releases.

Unit testing

Acceptance testing

gehash's People

Contributors

xfreib00 avatar

Watchers

 avatar

gehash's Issues

Add head to output files

In current state of GELogger we can not retrospectively find parameters of evolution run in output files.

Memory leak

Leak was found at first using sanitizers. It is concerning HTable::Insert function.

Output generated by valgrind with flags --leak-check=full --track-origins=yes --show-leak-kinds=all

Output file is here: valgrind-out.txt

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.