diff options
author | Luis Pabón <lpabon@redhat.com> | 2015-02-07 18:18:12 +0100 |
---|---|---|
committer | Andreas Schneider <asn@cryptomilk.org> | 2015-02-09 09:23:01 +0100 |
commit | 236ed5c00ab215eb7382b6d908cd3fe589bffebc (patch) | |
tree | c9f23c5fdd6a1cc8c890b65c43796bbf6faca823 /include | |
parent | 8bfb195065bc9e4d71c663bf874fc8d8c81a4cd0 (diff) | |
download | cmocka-236ed5c00ab215eb7382b6d908cd3fe589bffebc.tar.gz cmocka-236ed5c00ab215eb7382b6d908cd3fe589bffebc.tar.bz2 cmocka-236ed5c00ab215eb7382b6d908cd3fe589bffebc.zip |
include: Add Programming by Contract header.
Signed-off-by: Luis Pabón <lpabon@redhat.com>
Diffstat (limited to 'include')
-rw-r--r-- | include/CMakeLists.txt | 1 | ||||
-rw-r--r-- | include/cmocka_pbc.h | 62 |
2 files changed, 63 insertions, 0 deletions
diff --git a/include/CMakeLists.txt b/include/CMakeLists.txt index 9172633..18de8da 100644 --- a/include/CMakeLists.txt +++ b/include/CMakeLists.txt @@ -2,6 +2,7 @@ project(cmocka-headers C) set(cmocka_HDRS cmocka.h + cmocka_pbc.h ) install( diff --git a/include/cmocka_pbc.h b/include/cmocka_pbc.h new file mode 100644 index 0000000..a2a1bc1 --- /dev/null +++ b/include/cmocka_pbc.h @@ -0,0 +1,62 @@ +/* + * Copyright 2014 Luis Pabon, Jr. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Programming by Contract is a programming methodology + * which binds the caller and the function called to a + * contract. The contract is represented using Hoare Triple: + * {P} C {Q} + * where {P} is the precondition before executing command C, + * and {Q} is the postcondition. + * + * See also: + * http://en.wikipedia.org/wiki/Design_by_contract + * http://en.wikipedia.org/wiki/Hoare_logic + * http://dlang.org/dbc.html + */ +#ifndef CMOCKA_PBC_H_ +#define CMOCKA_PBC_H_ + +#if defined(UNIT_TESTING) || defined (DEBUG) + +#include <assert.h> + +/* + * Checks caller responsibility against contract + */ +#define REQUIRE(cond) assert(cond) + +/* + * Checks function reponsability against contract. + */ +#define ENSURE(cond) assert(cond) + +/* + * While REQUIRE and ENSURE apply to functions, INVARIANT + * applies to classes/structs. It ensures that intances + * of the class/struct are consistent. In other words, + * that the instance has not been corrupted. + */ +#define INVARIANT(invariant_fnc) do{ (invariant_fnc) } while (0); + +#else +#define REQUIRE(cond) do { } while (0); +#define ENSURE(cond) do { } while (0); +#define INVARIANT(invariant_fnc) do{ } while (0); + +#endif /* defined(UNIT_TESTING) || defined (DEBUG) */ +#endif /* CMOCKA_PBC_H_ */ + |