diff options
author | John Wiegley <johnw@newartisans.com> | 2009-02-27 03:58:43 -0400 |
---|---|---|
committer | John Wiegley <johnw@newartisans.com> | 2009-02-27 03:58:43 -0400 |
commit | 6b62be59fbb8a0b8fd4274fa46ca7295f1be0919 (patch) | |
tree | a14d7a1c3962d901cc26510fbb124380c0181a56 /src/generate.h | |
parent | 645e43ef75b1af78ef6a4013684d76fd7d6e7118 (diff) | |
download | fork-ledger-6b62be59fbb8a0b8fd4274fa46ca7295f1be0919.tar.gz fork-ledger-6b62be59fbb8a0b8fd4274fa46ca7295f1be0919.tar.bz2 fork-ledger-6b62be59fbb8a0b8fd4274fa46ca7295f1be0919.zip |
Added generate command, --seed, and GenerateTests
Diffstat (limited to 'src/generate.h')
-rw-r--r-- | src/generate.h | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/src/generate.h b/src/generate.h new file mode 100644 index 00000000..7a837bfb --- /dev/null +++ b/src/generate.h @@ -0,0 +1,131 @@ +/* + * Copyright (c) 2003-2009, John Wiegley. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of New Artisans LLC nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @addtogroup generate + */ + +/** + * @file generate.h + * @author John Wiegley + * + * @ingroup report + * + * @brief Brief + * + * Long. + */ +#ifndef _GENERATE_H +#define _GENERATE_H + +#include "iterators.h" + +namespace ledger { + +class generate_posts_iterator : public posts_iterator +{ + session_t& session; + unsigned int seed; + std::size_t quantity; + bool allow_invalid; + date_t next_date; + date_t next_eff_date; + + mt19937 rnd_gen; + + typedef variate_generator<mt19937&, uniform_int<> > int_generator_t; + typedef variate_generator<mt19937&, uniform_real<> > real_generator_t; + + uniform_int<> year_range; + int_generator_t year_gen; + uniform_int<> mon_range; + int_generator_t mon_gen; + uniform_int<> day_range; + int_generator_t day_gen; + + uniform_int<> upchar_range; + int_generator_t upchar_gen; + uniform_int<> downchar_range; + int_generator_t downchar_gen; + uniform_int<> numchar_range; + int_generator_t numchar_gen; + + uniform_int<> truth_range; + int_generator_t truth_gen; + uniform_int<> three_range; + int_generator_t three_gen; + uniform_int<> six_range; + int_generator_t six_gen; + uniform_int<> two_six_range; + int_generator_t two_six_gen; + + uniform_int<> strlen_range; + int_generator_t strlen_gen; + + uniform_real<> neg_number_range; + real_generator_t neg_number_gen; + uniform_real<> pos_number_range; + real_generator_t pos_number_gen; + + xact_posts_iterator posts; + +public: + generate_posts_iterator(session_t& _session, + unsigned int _seed = 0, + std::size_t _quantity = 100, + bool _allow_invalid = false); + + virtual ~generate_posts_iterator() throw() { + TRACE_DTOR(generate_posts_iterator); + } + + virtual post_t * operator()(); + +protected: + void generate_string(std::ostream& out, int len, bool only_alpha = false); + bool generate_account(std::ostream& out, bool no_virtual = false); + void generate_commodity(std::ostream& out); + string generate_amount(std::ostream& out, + value_t not_this_amount = NULL_VALUE, + bool no_negative = false); + bool generate_post(std::ostream& out, bool no_amount = false); + void generate_cost(std::ostream& out, value_t amount); + void generate_date(std::ostream& out); + void generate_state(std::ostream& out); + void generate_code(std::ostream& out); + void generate_payee(std::ostream& out); + void generate_note(std::ostream& out); + void generate_xact(std::ostream& out); +}; + +} // namespace ledger + +#endif // _GENERATE_H |