icontract-hypothesis VS clang-contracts

Compare icontract-hypothesis vs clang-contracts and see what are their differences.

icontract-hypothesis

Combine contracts and automatic testing. (by mristin)

clang-contracts

Experimental support for contracts programming in clang++ (by arcosuc3m)
Our great sponsors
  • InfluxDB - Power Real-Time Data Analytics at Scale
  • WorkOS - The modern identity platform for B2B SaaS
  • SaaSHub - Software Alternatives and Reviews
icontract-hypothesis clang-contracts
3 1
74 29
- -
0.0 10.0
almost 2 years ago over 5 years ago
Python C++
MIT License GNU General Public License v3.0 or later
The number of mentions indicates the total number of mentions that we've tracked plus the number of user suggested alternatives.
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.

icontract-hypothesis

Posts with mentions or reviews of icontract-hypothesis. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2024-02-17.
  • Automated Unit Test Improvement Using Large Language Models at Meta
    6 projects | news.ycombinator.com | 17 Feb 2024
    https://github.com/mristin/icontract-hypothesis

    Nagini and deal-solver attempt to Formally Verify Python code with or without unit tests: https://news.ycombinator.com/item?id=39139198

    Additional research:

    "Fuzz target generation using LLMs" (2023)

  • Adding “invariant” clauses to C++ via GCC plugin to enable Design-by-Contract
    5 projects | news.ycombinator.com | 1 Jan 2023
    https://icontract.readthedocs.io/en/latest/usage.html#invari...

    For unit testing, there's icontract-hypothesis; with the Preconditions and Postconditions delineated by e.g. decorators, it's possible to generate many of the fuzz tests from the additional Design by Contract structure of the source.

    From https://github.com/mristin/icontract-hypothesis :

    > icontract-hypothesis combines design-by-contract with automatic testing.

    > It is an integration between icontract library for design-by-contract and Hypothesis library for property-based testing.

    > The result is a powerful combination that allows you to automatically test your code. Instead of writing manually the Hypothesis search strategies for a function, icontract-hypothesis infers them based on the function’s [sic] precondition

  • Pynguin – Allow developers to generate Python unit tests automatically
    4 projects | news.ycombinator.com | 31 May 2021
    Just in case you are looking for an alternative approach: if you write contracts in your code, you might also consider crosshair [1] or icontract-hypothesis [2]. If your function/method does not need any pre-conditions then the the type annotations can be directly used.

    (I'm one of the authors of icontract-hypothesis.)

    [1] https://github.com/pschanely/CrossHair

    [2] https://github.com/mristin/icontract-hypothesis

clang-contracts

Posts with mentions or reviews of clang-contracts. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2023-01-01.
  • Adding “invariant” clauses to C++ via GCC plugin to enable Design-by-Contract
    5 projects | news.ycombinator.com | 1 Jan 2023
    I'm the author, and even I think so. I'm more of an LLVM fan myself (though I can't not mention David Malcom's work on the GCC Static Analyzer).

    Ideally it wouldn't be a plugin at all, it'd be a language feature. We got Contracts and left out the most useful contract of them all, the stateful invariant!

    Originally, I started it as a Clang plugin, thinking that I could also implement support for the Contracts "[[pre]]" and "[[post]]" specification on top (or at least some minimal implementation of it.

    The difficulty seemed a lot greater to support pre/post attributes with expressions inside of them than [[invariant]] marker attributes.

    If people would like to use this from Clang, even without support for regular Contracts, I will publish a compatible Clang plugin.

    I think at some point there was support for Contracts in Clang, maybe longer term I'll try to get them working again? (I've no experience here)

    https://github.com/arcosuc3m/clang-contracts

    This fellow wrote a whole ~200 page thesis on this just as recently as 2018, such a shame for it to go to waste =/

    https://e-archivo.uc3m.es/bitstream/handle/10016/29231/TFG_J...

What are some alternatives?

When comparing icontract-hypothesis and clang-contracts you can also consider the following projects:

pynguin - The PYthoN General UnIt Test geNerator is a test-generation tool for Python

CMake - Mirror of CMake upstream repository

CrossHair - An analysis tool for Python that blurs the line between testing and type systems.

MIRAI - Rust mid-level IR Abstract Interpreter

Polyester.jl - The cheapest threads you can find!

gcc-invariant-plugin

AlphaCodium - Official implementation for the paper: "Code Generation with AlphaCodium: From Prompt Engineering to Flow Engineering""