| %% -*- erlang-indent-level: 4;indent-tabs-mode: nil -*- |
| %% ex: ts=4 sw=4 et |
| %% |
| %% This file is part of Triq - Trifork QuickCheck |
| %% |
| %% Copyright (c) 2010 by Trifork |
| %% Copyright 2013-2018 Triq authors |
| %% |
| %% 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. |
| |
| -define(LAZY(X), DELAY(X)). |
| -define(DELAY(X), fun()->X end). |
| -define(FORCE(X), (X)() ). |
| -define(DOMAIN_MODULE, triq_dom). |
| |
| %% properties |
| -define(FORALL(X,Gen,Property), |
| {'prop:forall', Gen, ??X, fun(X)-> begin Property end end, ??Property}). |
| -define(IMPLIES(Pre, Property), |
| {'prop:implies', Pre, ??Pre, ?DELAY( Property ), ??Property}). |
| -define(WHENFAIL(Action, Property), |
| {'prop:whenfail', ?DELAY(Action), ?DELAY(Property), ??Property}). |
| -define(TRAPEXIT(Property), |
| {'prop:trapexit', ?DELAY(Property), ??Property}). |
| -define(TIMEOUT(Limit,Property), |
| {'prop:timeout', Limit, ?DELAY(Property), ??Property}). |
| -define(SETUP(SetupFun,Property), |
| {'prop:setup', SetupFun, ?DELAY(Property), ??Property}). |
| |
| %% |
| %% import property functions |
| %% |
| -import(triq, |
| [fails/1, |
| check/1]). |
| |
| |
| %% value domains |
| |
| %% LET is also defined by eunit; what to do? |
| -ifndef(LET). |
| -define(LET(X,Gen1,Gen2), |
| ?DOMAIN_MODULE:bind(Gen1, fun(X)->Gen2 end)). |
| -endif. |
| -define(LETSHRINK(X,Gen1,Gen2), |
| ?DOMAIN_MODULE:bindshrink(Gen1, fun(X)->Gen2 end)). |
| |
| -define(SIZED(Size,Gen), |
| ?DOMAIN_MODULE:sized(fun(Size) -> Gen end)). |
| |
| -define(SUCHTHAT(X,G,P), |
| ?DOMAIN_MODULE:suchthat(G, fun(X) -> P end)). |
| |
| |
| %% |
| %% import domain functions (a.k.a. generators) |
| %% |
| -import(?DOMAIN_MODULE, |
| [list/1, |
| tuple/1, |
| int/0, |
| int/1, |
| int/2, |
| largeint/0, |
| byte/0, |
| real/0, |
| float/0, |
| sized/1, |
| elements/1, |
| any/0, |
| atom/0, |
| atom/1, |
| choose/2, |
| oneof/1, |
| frequency/1, |
| bool/0, |
| char/0, |
| return/1, |
| vector/2, |
| binary/1, |
| binary/0, |
| bitstring/0, |
| bitstring/1, |
| non_empty/1, |
| resize/2, |
| noshrink/1, |
| non_neg_integer/0, |
| pos_integer/0, |
| |
| %% Unicode |
| unicode_char/0, |
| unicode_string/0, |
| unicode_string/1, |
| unicode_binary/0, |
| unicode_binary/1, |
| unicode_binary/2, |
| unicode_characters/0, |
| unicode_characters/1, |
| |
| %% using a generator |
| bind/2, |
| bindshrink/2, |
| suchthat/2, |
| pick/2, |
| shrink/2, |
| sample/1, |
| sampleshrink/1, |
| seal/1, |
| open/1, |
| peek/1, |
| domain/3, |
| shrink_without_duplicates/1]). |
| |
| %% |
| %% Enabling this (the default) does two things (similar to eunit). |
| %% |
| %% - Make all prop_* function be exported, and |
| %% |
| %% - Define this exported function: |
| %% |
| %% ?MODULE:check() -> triq:module(?MODULE). |
| %% |
| -ifndef(TRIQ_NOAUTO). |
| -compile({parse_transform, triq_autoexport}). |
| -endif. |