/faker-cxx

C++20 Faker library for generating fake (but realistic) data for testing and development.

Primary LanguageC++MIT LicenseMIT

C++ Faker

clang++ apple clang++ g++ msvc codecov PRs Welcome Discord Shield

C++ Faker is a modern C++20 open-source library for generating fake data for testing and development.

The library is heavily inspired by Faker.js.

Dependencies:

  • GTest: building tests (BUILD_FAKER_TESTS=OFF CMake flag to disable)
  • fmt

๐ŸŽฏ Goal

My goal is to provide a library like Faker.js for C++ developers.

Example

Lets see some simple example of generating fake data

#include <format>
#include <iostream>

#include "faker-cxx/Datatype.h"
#include "faker-cxx/Date.h"
#include "faker-cxx/Internet.h"
#include "faker-cxx/String.h"

int main()
{
    const auto id = faker::String::uuid();                   // 6fdb588e-0be9-480e-9eeb-8ff11b8afc00
    const auto email = faker::Internet::email();             // Sergio_Greenfelder@hotmail.com
    const auto password = faker::Internet::password();       // 91gZxLB*TfhAA!G
    const auto nickname = faker::Internet::username();       // Stuart_Boyle
    const auto active = faker::Datatype::boolean();          // true
    const auto emailVerified = faker::Datatype::boolean();   // false
    const auto verificationCode = faker::String::numeric(8); // 56910620
    const auto createdAt = faker::Date::pastDate();          // 2023-03-11T08:33:34Z
    const auto updatedAt = faker::Date::recentDate();        // 2023-07-19T22:59:19Z

    std::cout << std::format("id: {}, email: {}, password: {}, nickname: {}, active: {}, emailVerified: {}. "
                             "verificationCode: {}, createdAt: {}, updatedAt: {}",
                             id, email, password, nickname, active, emailVerified, verificationCode, createdAt,
                             updatedAt);

    return 0;
}

Compiler support

Consuming library with CMake (CMake version 3.22 or newer)

  1. Add faker to git submodules (execute in project root):
mkdir externals
cd externals
git submodule add https://github.com/cieslarmichal/faker-cxx.git
  1. Link with library:
set(BUILD_FAKER_TESTS OFF)

add_subdirectory(externals/faker-cxx)

add_executable(main Main.cpp)

target_link_libraries(main faker-cxx)

๐Ÿ’Ž 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, catch phrase, buzz phrase
  • ๐Ÿ’พ Database - column names, column types, database engines
  • โ„น๏ธ Datatype - booleans
  • ๐Ÿ“… Date - past, future dates
  • ๐Ÿฆ Finance - currency, IBAN, BIC, account name, account number, pin, credit card numbers
  • ๐Ÿ“ 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 titles, hobby, genders, sex, nationalitiy, language
  • ๐Ÿ“ž Phone - phone number, IMEI
  • โšฝ Sport - sport names, athletes, events
  • ๐Ÿ”ข String - uuids, alphanumeric, numeric, hexadecimal
  • ๐Ÿ’ป System - file paths, file extensions, file names, directories, semantic version
  • ๐ŸŽฎ Video game - title, genre, platform, studio
  • ๐ŸŒค๏ธ Weather - temperature, pressure, humidity, weather description
  • ๐Ÿ’ฌ Word - sample words, nouns, verbs

๐Ÿ“– Documentation

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

โœจ Contributing

Feel free to join Faker C++ development! ๐Ÿš€

Please check CONTRIBUTING guide.

Discord Channel for contributors.


๐Ÿ”จ Building from sources with Clang 16

1. Install Clang 16

sudo add-apt-repository ppa:trebelnik-stefina/launchpad-getkeys \
&& sudo apt-get update \
&& sudo apt-get install launchpad-getkeys \
&& sudo add-apt-repository 'deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-16 main' \
&& sudo launchpad-getkeys \
&& sudo apt-get update -y \
&& sudo apt-get install -y lld-16 ninja-build  build-essential libstdc++-13-dev \
 clang-16 clang-tools-16 llvm-16 lcov

2. Prepare build directory

git clone https://github.com/cieslarmichal/faker-cxx.git
cd faker-cxx
git submodule update --init --recursive
mkdir build
cd build

3. CMake setup with Clang 16

cmake .. -DCMAKE_CXX_COMPILER=/usr/bin/clang++-16

4. Build

make