summaryrefslogtreecommitdiff
path: root/source/random.cc
diff options
context:
space:
mode:
Diffstat (limited to 'source/random.cc')
-rw-r--r--source/random.cc87
1 files changed, 87 insertions, 0 deletions
diff --git a/source/random.cc b/source/random.cc
new file mode 100644
index 0000000..d237b9f
--- /dev/null
+++ b/source/random.cc
@@ -0,0 +1,87 @@
+#include <cstddef>
+#include <random>
+#include <string>
+#include <vector>
+
+#include <book_store/book.hh>
+#include <book_store/person.hh>
+#include <book_store/random.hh>
+
+namespace book_store::utility::random {
+auto book_random_engine::title() -> std::string {
+ static std::uniform_int_distribution<> distrubtion{0, 49};
+ std::string book_name;
+
+ for (int i = 0; i < 3; ++i) {
+ book_name += book_title_parts[static_cast<std::size_t>(
+ distrubtion(this->_random_number_generator))];
+ book_name += ' ';
+ }
+
+ book_name.pop_back();
+
+ return book_name;
+}
+
+auto book_random_engine::name() -> std::string {
+ static std::uniform_int_distribution<> distrubtion{0, 49};
+
+ return std::string(names[static_cast<std::size_t>(
+ distrubtion(this->_random_number_generator))]);
+}
+
+auto book_random_engine::author() -> consumer::person {
+ return consumer::person{this->name(), this->name(), this->id()};
+}
+
+auto book_random_engine::authors() -> std::vector<consumer::person> {
+ std::vector<consumer::person> authors;
+ static std::uniform_int_distribution<> distrubtion{1, 4};
+ auto author_count = distrubtion(this->_random_number_generator);
+
+ authors.reserve(static_cast<std::size_t>(author_count));
+
+ for (int i = 0; i < author_count; ++i) {
+ authors.push_back(this->author());
+ }
+
+ return authors;
+}
+
+auto book_random_engine::publisher() -> std::string {
+ static std::uniform_int_distribution<> distrubtion{0, 9};
+
+ return std::string(publishers[static_cast<std::size_t>(
+ distrubtion(this->_random_number_generator))]);
+}
+
+auto book_random_engine::isbn() -> std::string {
+ static std::uniform_int_distribution<> distrubtion{0, 9};
+ std::string isbn;
+
+ for (int i = 0; i < 13; ++i) {
+ isbn += std::to_string(distrubtion(this->_random_number_generator));
+ }
+
+ return isbn;
+}
+
+auto book_random_engine::price_usd() -> double {
+ static std::uniform_real_distribution<> distrubtion{0.0, 100.0};
+
+ return distrubtion(this->_random_number_generator);
+}
+
+auto book_random_engine::copy_count() -> product::book::size_type {
+ static std::uniform_int_distribution<> distrubtion{0, 10000};
+
+ return static_cast<product::book::size_type::book_count_type>(
+ distrubtion(this->_random_number_generator));
+}
+
+auto book_random_engine::id() -> std::size_t {
+ static std::uniform_int_distribution<> distrubtion{0, 1000000};
+
+ return static_cast<std::size_t>(distrubtion(this->_random_number_generator));
+}
+} // namespace book_store::utility::random