Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/cieslarmichal/faker-cxx

C++ Faker library for generating fake (but realistic) data.
https://github.com/cieslarmichal/faker-cxx

cpp cpp20 data-generation development-tools fake fake-data faker faker-cpp faker-generator faker-library test-data-generator

Last synced: 16 days ago
JSON representation

C++ Faker library for generating fake (but realistic) data.

Awesome Lists containing this project

README

        


C++ Faker, a powerful tool for generating realistic and randomized fake data in C++ programming, enhancing data testing and development workflows

Faker C++

[![clang++](https://github.com/cieslarmichal/faker-cxx/actions/workflows/linux-clang-build.yml/badge.svg?branch=main)](https://github.com/cieslarmichal/faker-cxx/actions/workflows/linux-clang-build.yml?query=branch%3Amain)
[![apple clang++](https://github.com/cieslarmichal/faker-cxx/actions/workflows/macos-clang-build.yml/badge.svg?branch=main)](https://github.com/cieslarmichal/faker-cxx/actions/workflows/macos-clang-build.yml?query=branch%3Amain)
[![g++](https://github.com/cieslarmichal/faker-cxx/actions/workflows/linux-gxx-build.yml/badge.svg?branch=main)](https://github.com/cieslarmichal/faker-cxx/actions/workflows/linux-gxx-build.yml?query=branch%3Amain)
[![msvc](https://github.com/cieslarmichal/faker-cxx/actions/workflows/windows-msvc-build.yml/badge.svg?branch=main)](https://github.com/cieslarmichal/faker-cxx/actions/workflows/windows-msvc-build.yml?query=branch%3Amain)
[![bazel](https://github.com/cieslarmichal/faker-cxx/actions/workflows/linux-bazel-build.yml/badge.svg?branch=main)](https://github.com/cieslarmichal/faker-cxx/actions/workflows/linux-bazel-build.yml?query=branch%3Amain)
[![codecov](https://codecov.io/github/cieslarmichal/faker-cxx/branch/main/graph/badge.svg?token=0RTV4JFH2U)](https://codecov.io/github/cieslarmichal/faker-cxx)
[![Conan Center](https://img.shields.io/conan/v/faker-cxx)](https://conan.io/center/recipes/faker-cxx)
[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com)
[![Chat on Discord](https://img.shields.io/badge/chat-discord-blue?style=flat&logo=discord)](https://discord.gg/h2ur8H6mK6)

## Table of Contents

- [Table of Contents](#table-of-contents)
- [Introduction](#introduction)
- [Key Features](#key-features)
- [๐Ÿ“– Usage and Documentation](#-usage-and-documentation)
- [๐Ÿ’Ž Modules](#-modules)
- [Consuming the library with CMake](#consuming-the-library-with-cmake)
- [With Git submodules and add\_library](#with-git-submodules-and-add_library)
- [With FetchContent](#with-fetchcontent)
- [โš’๏ธ Compiler support](#๏ธ-compiler-support)
- [Dependencies](#dependencies)
- [๐Ÿ“ฆ Building the library with Conan](#-building-the-library-with-conan)
- [Installing the library with Conan](#installing-the-library-with-conan)
- [Building the library with Bazel](#building-the-library-with-bazel)
- [โœจ Contributing](#-contributing)
- [๐Ÿ“˜ Credits](#-credits)
- [Examples](#examples)
- [๐Ÿ“ Changelog](#-changelog)
- [๐Ÿ”‘ License](#-license)

## Introduction

Faker C++ is a C++ library inspired by the popular [Faker.js](https://github.com/faker-js/faker),
aimed at providing developers with a robust tool for generating fake (but realistic) data.
Whether you're building test suites, populating databases, or creating demos, Faker C++ has got you covered.

## Key Features

๐Ÿ“š Realistic Data Generation: Generate various types of data including names, addresses, emails, dates, and more.

๐Ÿ›  Modular Design: Choose from a wide range of modules like Internet, Location, String, Date, and more to generate
specific types of data.

๐Ÿš€ Easy Integration: Seamlessly integrate with CMake, and it supports major compilers like MSVC, GCC, Clang, and Apple
Clang.

## ๐Ÿ“– Usage and Documentation

To properly use Faker C++ you must first consume the Faker library (see Consuming Library with CMake).
Once that is done, you need to include the proper [header](https://cieslarmichal.github.io/faker-cxx/files.html) file
depending on the module you wish to generate data from or use general include file `faker-cxx/faker.h`.
All the docs can be found [here](https://cieslarmichal.github.io/faker-cxx/).

Below is an example of how to use Faker C++ in your code.

```cpp
#include

#include "faker-cxx/faker.h" // or include specific module

int main()
{
const auto id = faker::string::uuid();
const auto email = faker::internet::email();
const auto password = faker::internet::password();
const auto city = faker::location::city();
const auto streetAddress = faker::location::streetAddress();
const auto bornDate = faker::date::birthdateByYear(1970, 2000);

std::cout << id << std::endl; // 59990db5-3a5f-40bf-8af0-7834c29ee884
std::cout << email << std::endl; // [email protected]
std::cout << password << std::endl; // Mf+*[(_'lHfM.$v{
std::cout << city << std::endl; // Rochester
std::cout << streetAddress << std::endl; // 643 Ricardo Creek
std::cout << bornDate << std::endl; // 1973-12-03T11:07:02Z

return 0;
}
```

## ๐Ÿ’Ž Modules

- ๐Ÿ›ฉ Airline - aircraft types, airlines, airports, flight numbers
- ๐Ÿผ Animal - animal types and species
- ๐Ÿ“– Book - book title, genre, author, publisher, ISBN
- ๐ŸŽจ Color - color names, rgb, hex, hcl
- ๐Ÿ›’ Commerce - commerce department, product name, sku, price
- ๐Ÿข Company - company name, type, industry, catchphrase, buzz phrase
- ๐Ÿ–ฅ๏ธ Computer - type, manufacturer, model, CPU info, GPU info
- ๐Ÿ” Crypto - sha256, md5
- ๐Ÿ’พ Database - column names, column types, database engines
- โ„น๏ธ Datatype - booleans
- ๐Ÿ“… Date - past, future dates
- ๐Ÿ•น๏ธ Esport - player, team, league, event, game
- ๐Ÿฆ Finance - currency, IBAN, BIC, account name, account number, pin, credit card numbers
- ๐Ÿ Food - food category, vegetables, fruits, meats, dishes
- ๐Ÿ“ Git - branch names, commit messages, commit hash
- ๐Ÿ‘จโ€๐Ÿ’ป Hacker - hacker words
- โœ‹ Helper - random element from container
- ๐ŸŒ Internet - emails, usernames, passwords, IP, HTTP
- ๐Ÿ–ผ๏ธ Image - images urls, github avatar urls, image dimensions
- ๐ŸŒ Location - countries, cities, zip codes, street addresses
- ๐Ÿ“š Lorem - lorem words, sentences, paragraphs
- ๐Ÿฅ Medicine - conditions, medical tests, specialties
- ๐ŸŽฅ Movie - actors, actresses, genres, movie titles
- ๐ŸŽถ Music - artists, song names, genres
- ๐Ÿ”ข Number - random integers, floating point numbers
- ๐Ÿง‘ Person - first, last names, job enUSTitles, hobby, genders, sex, nationality, language
- ๐Ÿ“ž Phone - phone number, IMEI
- ๐Ÿชด Plant - plant type, trees, flowers
- โšฝ Sport - sport names, athletes, events
- ๐Ÿ”ข String - uuids, alphanumeric, numeric, hexadecimal
- ๐Ÿ’ป System - file paths, file extensions, file names, directories, semantic version
- ๐Ÿš— Vehicle - vehicle types, makes, models, fuel types, license plates
- ๐ŸŽฎ Video game - title, genre, platform, studio
- ๐ŸŽž๏ธ Video - format name, file extension, video codec, audio codec, resolution, aspect ratio, video url
- ๐ŸŒค๏ธ Weather - temperature, pressure, humidity, weather description
- ๐Ÿ’ฌ Word - sample words, nouns, verbs

## Consuming the library with CMake

## With Git submodules and add_library

1. Add faker to git submodules (execute in project root):

```
mkdir externals && cd externals
git submodule add https://github.com/cieslarmichal/faker-cxx.git
git submodule update --init --recursive
```

2. Link with library:

```cmake
set(BUILD_TESTING OFF)

add_subdirectory(externals/faker-cxx)

add_executable(main Main.cpp)

target_link_libraries(main faker-cxx)
```

## With FetchContent

```cmake
set(BUILD_TESTING OFF)

FetchContent_Declare(faker
GIT_REPOSITORY https://github.com/cieslarmichal/faker-cxx.git
GIT_TAG main
)

FetchContent_MakeAvailable(faker)

add_executable(main Main.cpp)

target_link_libraries(main faker-cxx)
```

## โš’๏ธ Compiler support

- [MSVCโžš](https://en.wikipedia.org/wiki/Microsoft_Visual_Studio) version 143 or newer.
- [GCCโžš](https://gcc.gnu.org/) version 12 or newer.
- [Clangโžš](https://clang.llvm.org/) version 16 or newer.
- [Apple Clangโžš](https://clang.llvm.org/) version 16 or newer.

## Dependencies

- GTest (set `BUILD_TESTING=OFF` CMake flag to disable this dependency)
- fmt (only for compilers that don't support std::format)

In order to use external dependencies installed in your system, you can set the `USE_SYSTEM_DEPENDENCIES` CMake flag
to `ON`.

## ๐Ÿ“ฆ Building the library with [Conan](https://conan.io/)

The library can be built using Conan package manager to solve external dependencies.
To build the library with Conan, follow the steps below:

1. Install required dependencies:

```bash
conan install conanfile.txt --build=missing
```

2. Build the library:

```bash
cmake --preset=conan-release -DUSE_SYSTEM_DEPENDENCIES:BOOL=ON
cmake --build --preset=conan-release
```

## Installing the library with [Conan](https://conan.io/)

You can install pre-built binaries for faker-cxx or build it from source using Conan. Use the following command:

```bash
conan install --requires="faker-cxx/[*]" --build=missing
```

The faker-cxx Conan recipe is kept up to date by Conan maintainers and community contributors.
If the version is out of date, please [create an issue or pull request](https://github.com/conan-io/conan-center-index)
on the ConanCenterIndex repository.

## Building the library with [Bazel](https://bazel.build/)

As alternative, this project can be built using [Bazel](https://bazel.build/). The dependencies are managed directly by
Bazel modules, downloading and building all external dependencies. Follow the steps below to build the project:

1. **Navigate to the project directory:**

```sh
cd /path/to/faker-cxx
```

2. **Build the project:**

```sh
bazel build //:faker-cxx
```

## โœจ Contributing

We would love it if you contributed to Faker C++! ๐Ÿš€

Check our guides on how to build the project locally:

- [Clang++](./docs/guides/clang-compilation-guide.md)
- [Apple Clang++](./docs/guides/apple-clang-compilation-guide.md)
- [G++](./docs/guides/gcc-compilation-guide.md)
- [MSVC](./docs/guides/msvc-compilation-guide.md)

Please make sure to read the [Contributing Guide](https://github.com/cieslarmichal/faker-cxx/blob/main/CONTRIBUTING.md)
before making a pull request.

Additionally, we encourage you to join our [Discord Channel](https://discord.gg/h2ur8H6mK6) for contributors.

## ๐Ÿ“˜ Credits

Thanks to all the people who already contributed to Faker!

## Examples

This project offers examples to demonstrate how to use the Faker C++ library.
These examples can be found in the [examples](examples/README.md) folder of the project repository.
The examples showcase various modules of the library and provide code snippets that illustrate how to generate fake data
using Faker C++.

## ๐Ÿ“ Changelog

Detailed changes for each release are documented in the [release notes](CHANGELOG.md).

## ๐Ÿ”‘ License

This project is under [MIT](LICENSE) license.