|
|
|
|
|
|
|
|
import json |
|
|
|
|
|
from pathlib import Path |
|
|
|
|
|
from typing import NamedTuple, Sequence, List |
|
|
|
|
|
|
|
|
|
|
|
import pytest |
|
|
|
|
|
|
|
|
|
|
|
from tests import DDS, fileutil |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class DepsCase(NamedTuple): |
|
|
|
|
|
dep: str |
|
|
|
|
|
usage: str |
|
|
|
|
|
source: str |
|
|
|
|
|
|
|
|
|
|
|
def setup_root(self, dds: DDS) -> None: |
|
|
|
|
|
dds.scope.enter_context( |
|
|
|
|
|
fileutil.set_contents( |
|
|
|
|
|
dds.source_root / 'package.json', |
|
|
|
|
|
json.dumps({ |
|
|
|
|
|
'name': 'test-project', |
|
|
|
|
|
'namespace': 'test', |
|
|
|
|
|
'version': '0.0.0', |
|
|
|
|
|
'depends': [self.dep], |
|
|
|
|
|
}).encode())) |
|
|
|
|
|
dds.scope.enter_context( |
|
|
|
|
|
fileutil.set_contents(dds.source_root / 'library.json', |
|
|
|
|
|
json.dumps({ |
|
|
|
|
|
'name': 'test', |
|
|
|
|
|
'uses': [self.usage], |
|
|
|
|
|
}).encode())) |
|
|
|
|
|
dds.scope.enter_context(fileutil.set_contents(dds.source_root / 'src/test.test.cpp', self.source.encode())) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CASES: List[DepsCase] = [] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_default_pkg_versions(pkg: str) -> Sequence[str]: |
|
|
|
|
|
catalog_json = Path(__file__).resolve().parent.parent.parent / 'old-catalog.json' |
|
|
|
|
|
catalog_dict = json.loads(catalog_json.read_text()) |
|
|
|
|
|
return list(catalog_dict['packages'][pkg].keys()) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def add_cases(pkg: str, uses: str, versions: Sequence[str], source: str) -> None: |
|
|
|
|
|
if versions == ['auto']: |
|
|
|
|
|
versions = get_default_pkg_versions(pkg) |
|
|
|
|
|
for ver in versions: |
|
|
|
|
|
CASES.append(DepsCase(f'{pkg}@{ver}', uses, source)) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# pylint: disable=pointless-string-statement |
|
|
|
|
|
|
|
|
|
|
|
# magic_enum tests |
|
|
|
|
|
""" |
|
|
|
|
|
## ## ### ###### #### ###### ######## ## ## ## ## ## ## |
|
|
|
|
|
### ### ## ## ## ## ## ## ## ## ### ## ## ## ### ### |
|
|
|
|
|
#### #### ## ## ## ## ## ## #### ## ## ## #### #### |
|
|
|
|
|
## ### ## ## ## ## #### ## ## ###### ## ## ## ## ## ## ### ## |
|
|
|
|
|
## ## ######### ## ## ## ## ## ## #### ## ## ## ## |
|
|
|
|
|
## ## ## ## ## ## ## ## ## ## ## ### ## ## ## ## |
|
|
|
|
|
## ## ## ## ###### #### ###### ####### ######## ## ## ####### ## ## |
|
|
|
|
|
""" |
|
|
|
|
|
add_cases( |
|
|
|
|
|
'magic_enum', 'neargye/magic_enum', ['auto'], r''' |
|
|
|
|
|
#include <magic_enum.hpp> |
|
|
|
|
|
#include <string_view> |
|
|
|
|
|
|
|
|
|
|
|
enum my_enum { |
|
|
|
|
|
foo, |
|
|
|
|
|
bar, |
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
int main() { |
|
|
|
|
|
if (magic_enum::enum_name(my_enum::foo) != "foo") { |
|
|
|
|
|
return 1; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
''') |
|
|
|
|
|
|
|
|
|
|
|
# Range-v3 tests |
|
|
|
|
|
""" |
|
|
|
|
|
######## ### ## ## ###### ######## ## ## ####### |
|
|
|
|
|
## ## ## ## ### ## ## ## ## ## ## ## ## |
|
|
|
|
|
## ## ## ## #### ## ## ## ## ## ## |
|
|
|
|
|
######## ## ## ## ## ## ## #### ###### ####### ## ## ####### |
|
|
|
|
|
## ## ######### ## #### ## ## ## ## ## ## |
|
|
|
|
|
## ## ## ## ## ### ## ## ## ## ## ## ## |
|
|
|
|
|
## ## ## ## ## ## ###### ######## ### ####### |
|
|
|
|
|
""" |
|
|
|
|
|
|
|
|
|
|
|
add_cases( |
|
|
|
|
|
'range-v3', 'range-v3/range-v3', ['auto'], r''' |
|
|
|
|
|
#include <range/v3/algorithm/remove_if.hpp> |
|
|
|
|
|
|
|
|
|
|
|
#include <vector> |
|
|
|
|
|
#include <algorithm> |
|
|
|
|
|
|
|
|
|
|
|
int main() { |
|
|
|
|
|
std::vector<int> nums = {1, 2, 3, 5, 1, 4, 2, 7, 8, 0, 9}; |
|
|
|
|
|
auto end = ranges::remove_if(nums, [](auto i) { return i % 2; }); |
|
|
|
|
|
return std::distance(nums.begin(), end) != 5; |
|
|
|
|
|
} |
|
|
|
|
|
''') |
|
|
|
|
|
|
|
|
|
|
|
# nlohmann-json |
|
|
|
|
|
""" |
|
|
|
|
|
## ## ## ####### ## ## ## ## ### ## ## ## ## ## ###### ####### ## ## |
|
|
|
|
|
### ## ## ## ## ## ## ### ### ## ## ### ## ### ## ## ## ## ## ## ### ## |
|
|
|
|
|
#### ## ## ## ## ## ## #### #### ## ## #### ## #### ## ## ## ## ## #### ## |
|
|
|
|
|
## ## ## ## ## ## ######### ## ### ## ## ## ## ## ## ## ## ## ####### ## ###### ## ## ## ## ## |
|
|
|
|
|
## #### ## ## ## ## ## ## ## ######### ## #### ## #### ## ## ## ## ## ## #### |
|
|
|
|
|
## ### ## ## ## ## ## ## ## ## ## ## ### ## ### ## ## ## ## ## ## ## ### |
|
|
|
|
|
## ## ######## ####### ## ## ## ## ## ## ## ## ## ## ###### ###### ####### ## ## |
|
|
|
|
|
""" |
|
|
|
|
|
add_cases('nlohmann-json', 'nlohmann/json', ['auto'], r''' |
|
|
|
|
|
#include <nlohmann/json.hpp> |
|
|
|
|
|
|
|
|
|
|
|
int main() {} |
|
|
|
|
|
''') |
|
|
|
|
|
|
|
|
|
|
|
# ctre |
|
|
|
|
|
""" |
|
|
|
|
|
###### ######## ######## ######## |
|
|
|
|
|
## ## ## ## ## ## |
|
|
|
|
|
## ## ## ## ## |
|
|
|
|
|
## ## ######## ###### |
|
|
|
|
|
## ## ## ## ## |
|
|
|
|
|
## ## ## ## ## ## |
|
|
|
|
|
###### ## ## ## ######## |
|
|
|
|
|
""" |
|
|
|
|
|
add_cases( |
|
|
|
|
|
'ctre', 'hanickadot/ctre', ['auto'], r''' |
|
|
|
|
|
#include <ctre.hpp> |
|
|
|
|
|
|
|
|
|
|
|
constexpr ctll::fixed_string MY_REGEX{"\\w+-[0-9]+"}; |
|
|
|
|
|
|
|
|
|
|
|
int main() { |
|
|
|
|
|
auto [did_match] = ctre::match<MY_REGEX>("foo-44"); |
|
|
|
|
|
if (!did_match) { |
|
|
|
|
|
return 1; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
auto [did_match_2] = ctre::match<MY_REGEX>("bar-1ff"); |
|
|
|
|
|
if (did_match_2) { |
|
|
|
|
|
return 2; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
''') |
|
|
|
|
|
|
|
|
|
|
|
# fmt |
|
|
|
|
|
""" |
|
|
|
|
|
######## ## ## ######## |
|
|
|
|
|
## ### ### ## |
|
|
|
|
|
## #### #### ## |
|
|
|
|
|
###### ## ### ## ## |
|
|
|
|
|
## ## ## ## |
|
|
|
|
|
## ## ## ## |
|
|
|
|
|
## ## ## ## |
|
|
|
|
|
""" |
|
|
|
|
|
add_cases('fmt', 'fmt/fmt', ['auto'], r''' |
|
|
|
|
|
#include <fmt/core.h> |
|
|
|
|
|
|
|
|
|
|
|
int main() { |
|
|
|
|
|
fmt::print("Hello!"); |
|
|
|
|
|
} |
|
|
|
|
|
''') |
|
|
|
|
|
|
|
|
|
|
|
# Catch2 |
|
|
|
|
|
""" |
|
|
|
|
|
###### ### ######## ###### ## ## ####### |
|
|
|
|
|
## ## ## ## ## ## ## ## ## ## ## |
|
|
|
|
|
## ## ## ## ## ## ## ## |
|
|
|
|
|
## ## ## ## ## ######### ####### |
|
|
|
|
|
## ######### ## ## ## ## ## |
|
|
|
|
|
## ## ## ## ## ## ## ## ## ## |
|
|
|
|
|
###### ## ## ## ###### ## ## ######### |
|
|
|
|
|
""" |
|
|
|
|
|
add_cases( |
|
|
|
|
|
'catch2', 'catch2/catch2', ['auto'], r''' |
|
|
|
|
|
#include <catch2/catch_with_main.hpp> |
|
|
|
|
|
|
|
|
|
|
|
TEST_CASE("I am a test case") { |
|
|
|
|
|
CHECK((2 + 2) == 4); |
|
|
|
|
|
CHECK_FALSE((2 + 2) == 5); |
|
|
|
|
|
} |
|
|
|
|
|
''') |
|
|
|
|
|
|
|
|
|
|
|
# Asio |
|
|
|
|
|
""" |
|
|
|
|
|
### ###### #### ####### |
|
|
|
|
|
## ## ## ## ## ## ## |
|
|
|
|
|
## ## ## ## ## ## |
|
|
|
|
|
## ## ###### ## ## ## |
|
|
|
|
|
######### ## ## ## ## |
|
|
|
|
|
## ## ## ## ## ## ## |
|
|
|
|
|
## ## ###### #### ####### |
|
|
|
|
|
""" |
|
|
|
|
|
add_cases( |
|
|
|
|
|
'asio', 'asio/asio', ['auto'], r''' |
|
|
|
|
|
#include <asio.hpp> |
|
|
|
|
|
|
|
|
|
|
|
int main() { |
|
|
|
|
|
asio::io_context ioc; |
|
|
|
|
|
|
|
|
|
|
|
int retcode = 12; |
|
|
|
|
|
ioc.post([&] { |
|
|
|
|
|
retcode = 0; |
|
|
|
|
|
}); |
|
|
|
|
|
ioc.run(); |
|
|
|
|
|
return retcode; |
|
|
|
|
|
} |
|
|
|
|
|
''') |
|
|
|
|
|
|
|
|
|
|
|
# Abseil |
|
|
|
|
|
""" |
|
|
|
|
|
### ######## ###### ######## #### ## |
|
|
|
|
|
## ## ## ## ## ## ## ## ## |
|
|
|
|
|
## ## ## ## ## ## ## ## |
|
|
|
|
|
## ## ######## ###### ###### ## ## |
|
|
|
|
|
######### ## ## ## ## ## ## |
|
|
|
|
|
## ## ## ## ## ## ## ## ## |
|
|
|
|
|
## ## ######## ###### ######## #### ######## |
|
|
|
|
|
""" |
|
|
|
|
|
add_cases( |
|
|
|
|
|
'abseil', 'abseil/abseil', ['auto'], r''' |
|
|
|
|
|
#include <absl/strings/str_cat.h> |
|
|
|
|
|
|
|
|
|
|
|
int main() { |
|
|
|
|
|
std::string_view foo = "foo"; |
|
|
|
|
|
std::string_view bar = "bar"; |
|
|
|
|
|
auto cat = absl::StrCat(foo, bar); |
|
|
|
|
|
return cat != "foobar"; |
|
|
|
|
|
} |
|
|
|
|
|
''') |
|
|
|
|
|
|
|
|
|
|
|
# Zlib |
|
|
|
|
|
""" |
|
|
|
|
|
######## ## #### ######## |
|
|
|
|
|
## ## ## ## ## |
|
|
|
|
|
## ## ## ## ## |
|
|
|
|
|
## ## ## ######## |
|
|
|
|
|
## ## ## ## ## |
|
|
|
|
|
## ## ## ## ## |
|
|
|
|
|
######## ######## #### ######## |
|
|
|
|
|
""" |
|
|
|
|
|
add_cases( |
|
|
|
|
|
'zlib', 'zlib/zlib', ['auto'], r''' |
|
|
|
|
|
#include <zlib.h> |
|
|
|
|
|
#include <cassert> |
|
|
|
|
|
|
|
|
|
|
|
int main() { |
|
|
|
|
|
::z_stream strm = {}; |
|
|
|
|
|
deflateInit(&strm, 6); |
|
|
|
|
|
|
|
|
|
|
|
const char buffer[] = "foo bar baz"; |
|
|
|
|
|
strm.next_in = (Bytef*)buffer; |
|
|
|
|
|
strm.avail_in = sizeof buffer; |
|
|
|
|
|
|
|
|
|
|
|
char dest[256] = {}; |
|
|
|
|
|
strm.next_out = (Bytef*)dest; |
|
|
|
|
|
strm.avail_out = sizeof dest; |
|
|
|
|
|
auto ret = deflate(&strm, Z_FINISH); |
|
|
|
|
|
deflateEnd(&strm); |
|
|
|
|
|
assert(ret == Z_STREAM_END); |
|
|
|
|
|
assert(strm.avail_in == 0); |
|
|
|
|
|
assert(strm.avail_out != sizeof dest); |
|
|
|
|
|
} |
|
|
|
|
|
''') |
|
|
|
|
|
|
|
|
|
|
|
# sol2 |
|
|
|
|
|
""" |
|
|
|
|
|
###### ####### ## ####### |
|
|
|
|
|
## ## ## ## ## ## ## |
|
|
|
|
|
## ## ## ## ## |
|
|
|
|
|
###### ## ## ## ####### |
|
|
|
|
|
## ## ## ## ## |
|
|
|
|
|
## ## ## ## ## ## |
|
|
|
|
|
###### ####### ######## ######### |
|
|
|
|
|
""" |
|
|
|
|
|
add_cases( |
|
|
|
|
|
'sol2', 'sol2/sol2', ['3.2.1', '3.2.0', '3.0.3', '3.0.2'], r''' |
|
|
|
|
|
#include <sol/sol.hpp> |
|
|
|
|
|
|
|
|
|
|
|
int main() { |
|
|
|
|
|
sol::state lua; |
|
|
|
|
|
int x = 0; |
|
|
|
|
|
lua.set_function("beepboop", [&]{ ++x; }); |
|
|
|
|
|
lua.script("beepboop()"); |
|
|
|
|
|
return x != 1; |
|
|
|
|
|
} |
|
|
|
|
|
''') |
|
|
|
|
|
|
|
|
|
|
|
# pegtl |
|
|
|
|
|
""" |
|
|
|
|
|
######## ######## ###### ######## ## |
|
|
|
|
|
## ## ## ## ## ## ## |
|
|
|
|
|
## ## ## ## ## ## |
|
|
|
|
|
######## ###### ## #### ## ## |
|
|
|
|
|
## ## ## ## ## ## |
|
|
|
|
|
## ## ## ## ## ## |
|
|
|
|
|
## ######## ###### ## ######## |
|
|
|
|
|
""" |
|
|
|
|
|
add_cases( |
|
|
|
|
|
'pegtl', 'tao/pegtl', ['auto'], r''' |
|
|
|
|
|
#include <tao/pegtl.hpp> |
|
|
|
|
|
|
|
|
|
|
|
using namespace tao::pegtl; |
|
|
|
|
|
|
|
|
|
|
|
struct sign : one<'+', '-'> {}; |
|
|
|
|
|
struct integer : seq<opt<sign>, plus<digit>> {}; |
|
|
|
|
|
|
|
|
|
|
|
int main() { |
|
|
|
|
|
tao::pegtl::string_input str{"+44", "[test string]"}; |
|
|
|
|
|
tao::pegtl::parse<integer>(str); |
|
|
|
|
|
} |
|
|
|
|
|
''') |
|
|
|
|
|
|
|
|
|
|
|
# Boost.PFR |
|
|
|
|
|
""" |
|
|
|
|
|
######## ####### ####### ###### ######## ######## ######## ######## |
|
|
|
|
|
## ## ## ## ## ## ## ## ## ## ## ## ## ## |
|
|
|
|
|
## ## ## ## ## ## ## ## ## ## ## ## ## |
|
|
|
|
|
######## ## ## ## ## ###### ## ######## ###### ######## |
|
|
|
|
|
## ## ## ## ## ## ## ## ## ## ## ## |
|
|
|
|
|
## ## ## ## ## ## ## ## ## ### ## ## ## ## |
|
|
|
|
|
######## ####### ####### ###### ## ### ## ## ## ## |
|
|
|
|
|
""" |
|
|
|
|
|
add_cases( |
|
|
|
|
|
'boost.pfr', 'boost/pfr', ['auto'], r''' |
|
|
|
|
|
#include <iostream> |
|
|
|
|
|
#include <string> |
|
|
|
|
|
#include <boost/pfr/precise.hpp> |
|
|
|
|
|
|
|
|
|
|
|
struct some_person { |
|
|
|
|
|
std::string name; |
|
|
|
|
|
unsigned birth_year; |
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
int main() { |
|
|
|
|
|
some_person val{"Edgar Allan Poe", 1809}; |
|
|
|
|
|
|
|
|
|
|
|
std::cout << boost::pfr::get<0>(val) // No macro! |
|
|
|
|
|
<< " was born in " << boost::pfr::get<1>(val); // Works with any aggregate initializables! |
|
|
|
|
|
|
|
|
|
|
|
return boost::pfr::get<0>(val) != "Edgar Allan Poe"; |
|
|
|
|
|
} |
|
|
|
|
|
''') |
|
|
|
|
|
|
|
|
|
|
|
# Boost.LEAF |
|
|
|
|
|
""" |
|
|
|
|
|
## ######## ### ######## |
|
|
|
|
|
## ## ## ## ## |
|
|
|
|
|
## ## ## ## ## |
|
|
|
|
|
## ###### ## ## ###### |
|
|
|
|
|
## ## ######### ## |
|
|
|
|
|
## ## ## ## ## |
|
|
|
|
|
######## ######## ## ## ## |
|
|
|
|
|
""" |
|
|
|
|
|
add_cases( |
|
|
|
|
|
'boost.leaf', 'boost/leaf', ['auto'], r''' |
|
|
|
|
|
#include <boost/leaf/all.hpp> |
|
|
|
|
|
|
|
|
|
|
|
namespace leaf = boost::leaf; |
|
|
|
|
|
|
|
|
|
|
|
int main() { |
|
|
|
|
|
return leaf::try_handle_all( |
|
|
|
|
|
[&]() -> leaf::result<int> { |
|
|
|
|
|
return 0; |
|
|
|
|
|
}, |
|
|
|
|
|
[](leaf::error_info const&) { |
|
|
|
|
|
return 32; |
|
|
|
|
|
} |
|
|
|
|
|
); |
|
|
|
|
|
} |
|
|
|
|
|
''') |
|
|
|
|
|
|
|
|
|
|
|
# Boost.mp11 |
|
|
|
|
|
""" |
|
|
|
|
|
######## ####### ####### ###### ######## ## ## ######## ## ## |
|
|
|
|
|
## ## ## ## ## ## ## ## ## ### ### ## ## #### #### |
|
|
|
|
|
## ## ## ## ## ## ## ## #### #### ## ## ## ## |
|
|
|
|
|
######## ## ## ## ## ###### ## ## ### ## ######## ## ## |
|
|
|
|
|
## ## ## ## ## ## ## ## ## ## ## ## ## |
|
|
|
|
|
## ## ## ## ## ## ## ## ## ### ## ## ## ## ## |
|
|
|
|
|
######## ####### ####### ###### ## ### ## ## ## ###### ###### |
|
|
|
|
|
""" |
|
|
|
|
|
add_cases( |
|
|
|
|
|
'boost.mp11', 'boost/mp11', ['auto'], r''' |
|
|
|
|
|
#include <boost/mp11.hpp> |
|
|
|
|
|
|
|
|
|
|
|
int main() { |
|
|
|
|
|
return boost::mp11::mp_false() == boost::mp11::mp_true(); |
|
|
|
|
|
} |
|
|
|
|
|
''') |
|
|
|
|
|
|
|
|
|
|
|
# libsodium |
|
|
|
|
|
""" |
|
|
|
|
|
## #### ######## ###### ####### ######## #### ## ## ## ## |
|
|
|
|
|
## ## ## ## ## ## ## ## ## ## ## ## ## ### ### |
|
|
|
|
|
## ## ## ## ## ## ## ## ## ## ## ## #### #### |
|
|
|
|
|
## ## ######## ###### ## ## ## ## ## ## ## ## ### ## |
|
|
|
|
|
## ## ## ## ## ## ## ## ## ## ## ## ## ## |
|
|
|
|
|
## ## ## ## ## ## ## ## ## ## ## ## ## ## ## |
|
|
|
|
|
######## #### ######## ###### ####### ######## #### ####### ## ## |
|
|
|
|
|
""" |
|
|
|
|
|
add_cases( |
|
|
|
|
|
'libsodium', 'sodium/sodium', ['auto'], r''' |
|
|
|
|
|
#include <sodium.h> |
|
|
|
|
|
|
|
|
|
|
|
#include <algorithm> |
|
|
|
|
|
|
|
|
|
|
|
int main() { |
|
|
|
|
|
char arr[256] = {}; |
|
|
|
|
|
::randombytes_buf(arr, sizeof arr); |
|
|
|
|
|
for (auto b : arr) { |
|
|
|
|
|
if (b != '\x00') { |
|
|
|
|
|
return 0; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
return 1; |
|
|
|
|
|
} |
|
|
|
|
|
''') |
|
|
|
|
|
|
|
|
|
|
|
# toml++ |
|
|
|
|
|
""" |
|
|
|
|
|
######## ####### ## ## ## |
|
|
|
|
|
## ## ## ### ### ## ## ## |
|
|
|
|
|
## ## ## #### #### ## ## ## |
|
|
|
|
|
## ## ## ## ### ## ## ###### ###### |
|
|
|
|
|
## ## ## ## ## ## ## ## |
|
|
|
|
|
## ## ## ## ## ## ## ## |
|
|
|
|
|
## ####### ## ## ######## |
|
|
|
|
|
""" |
|
|
|
|
|
add_cases( |
|
|
|
|
|
'tomlpp', 'tomlpp/tomlpp', ['auto'], r''' |
|
|
|
|
|
#include <toml++/toml.h> |
|
|
|
|
|
|
|
|
|
|
|
#include <string_view> |
|
|
|
|
|
|
|
|
|
|
|
int main() { |
|
|
|
|
|
std::string_view sv = R"( |
|
|
|
|
|
[library] |
|
|
|
|
|
something = "cats" |
|
|
|
|
|
person = "Joe" |
|
|
|
|
|
)"; |
|
|
|
|
|
|
|
|
|
|
|
toml::table tbl = toml::parse(sv); |
|
|
|
|
|
return tbl["library"]["person"] != "Joe"; |
|
|
|
|
|
} |
|
|
|
|
|
''') |
|
|
|
|
|
|
|
|
|
|
|
# Inja |
|
|
|
|
|
""" |
|
|
|
|
|
#### ## ## ## ### |
|
|
|
|
|
## ### ## ## ## ## |
|
|
|
|
|
## #### ## ## ## ## |
|
|
|
|
|
## ## ## ## ## ## ## |
|
|
|
|
|
## ## #### ## ## ######### |
|
|
|
|
|
## ## ### ## ## ## ## |
|
|
|
|
|
#### ## ## ###### ## ## |
|
|
|
|
|
""" |
|
|
|
|
|
add_cases( |
|
|
|
|
|
'inja', 'inja/inja', ['2.0.0', '2.0.1', '2.1.0', '2.2.0'], r''' |
|
|
|
|
|
#include <inja/inja.hpp> |
|
|
|
|
|
#include <nlohmann/json.hpp> |
|
|
|
|
|
|
|
|
|
|
|
int main() { |
|
|
|
|
|
nlohmann::json data; |
|
|
|
|
|
data["foo"] = "bar"; |
|
|
|
|
|
|
|
|
|
|
|
auto result = inja::render("foo {{foo}}", data); |
|
|
|
|
|
return result != "foo bar"; |
|
|
|
|
|
} |
|
|
|
|
|
''') |
|
|
|
|
|
|
|
|
|
|
|
# Cereal |
|
|
|
|
|
""" |
|
|
|
|
|
###### ######## ######## ######## ### ## |
|
|
|
|
|
## ## ## ## ## ## ## ## ## |
|
|
|
|
|
## ## ## ## ## ## ## ## |
|
|
|
|
|
## ###### ######## ###### ## ## ## |
|
|
|
|
|
## ## ## ## ## ######### ## |
|
|
|
|
|
## ## ## ## ## ## ## ## ## |
|
|
|
|
|
###### ######## ## ## ######## ## ## ######## |
|
|
|
|
|
""" |
|
|
|
|
|
add_cases( |
|
|
|
|
|
'cereal', 'cereal/cereal', ['auto'], r''' |
|
|
|
|
|
#include <cereal/types/memory.hpp> |
|
|
|
|
|
#include <cereal/types/string.hpp> |
|
|
|
|
|
#include <cereal/archives/binary.hpp> |
|
|
|
|
|
|
|
|
|
|
|
#include <sstream> |
|
|
|
|
|
|
|
|
|
|
|
struct something { |
|
|
|
|
|
int a, b, c; |
|
|
|
|
|
std::string str; |
|
|
|
|
|
|
|
|
|
|
|
template <typename Ar> |
|
|
|
|
|
void serialize(Ar& ar) { |
|
|
|
|
|
ar(a, b, c, str); |
|
|
|
|
|
} |
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
int main() { |
|
|
|
|
|
std::stringstream strm; |
|
|
|
|
|
cereal::BinaryOutputArchive ar{strm}; |
|
|
|
|
|
|
|
|
|
|
|
something s; |
|
|
|
|
|
ar(s); |
|
|
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
|
|
} |
|
|
|
|
|
''') |
|
|
|
|
|
|
|
|
|
|
|
# pcg |
|
|
|
|
|
""" |
|
|
|
|
|
######## ###### ###### |
|
|
|
|
|
## ## ## ## ## ## |
|
|
|
|
|
## ## ## ## |
|
|
|
|
|
######## ## ## #### |
|
|
|
|
|
## ## ## ## |
|
|
|
|
|
## ## ## ## ## |
|
|
|
|
|
## ###### ###### |
|
|
|
|
|
""" |
|
|
|
|
|
add_cases( |
|
|
|
|
|
'pcg-cpp', 'pcg/pcg-cpp', ['auto'], r''' |
|
|
|
|
|
#include <pcg_random.hpp> |
|
|
|
|
|
|
|
|
|
|
|
#include <iostream> |
|
|
|
|
|
|
|
|
|
|
|
int main() { |
|
|
|
|
|
pcg64 rng{1729}; |
|
|
|
|
|
return rng() != 14925250045015479985; |
|
|
|
|
|
} |
|
|
|
|
|
''') |
|
|
|
|
|
|
|
|
|
|
|
# spdlog |
|
|
|
|
|
""" |
|
|
|
|
|
###### ######## ######## ## ####### ###### |
|
|
|
|
|
## ## ## ## ## ## ## ## ## ## ## |
|
|
|
|
|
## ## ## ## ## ## ## ## ## |
|
|
|
|
|
###### ######## ## ## ## ## ## ## #### |
|
|
|
|
|
## ## ## ## ## ## ## ## ## |
|
|
|
|
|
## ## ## ## ## ## ## ## ## ## |
|
|
|
|
|
###### ## ######## ######## ####### ###### |
|
|
|
|
|
""" |
|
|
|
|
|
add_cases('spdlog', 'spdlog/spdlog', ['auto'], r''' |
|
|
|
|
|
#include <spdlog/spdlog.h> |
|
|
|
|
|
|
|
|
|
|
|
int main() { |
|
|
|
|
|
spdlog::info("Howdy!"); |
|
|
|
|
|
} |
|
|
|
|
|
''') |
|
|
|
|
|
|
|
|
|
|
|
# date |
|
|
|
|
|
""" |
|
|
|
|
|
######## ### ######## ######## |
|
|
|
|
|
## ## ## ## ## ## |
|
|
|
|
|
## ## ## ## ## ## |
|
|
|
|
|
## ## ## ## ## ###### |
|
|
|
|
|
## ## ######### ## ## |
|
|
|
|
|
## ## ## ## ## ## |
|
|
|
|
|
######## ## ## ## ######## |
|
|
|
|
|
""" |
|
|
|
|
|
add_cases( |
|
|
|
|
|
'hinnant-date', 'hinnant/date', ['auto'], r''' |
|
|
|
|
|
#include <date/date.h> |
|
|
|
|
|
#include <iostream> |
|
|
|
|
|
|
|
|
|
|
|
int main() { |
|
|
|
|
|
auto now = std::chrono::system_clock::now(); |
|
|
|
|
|
using namespace date::literals; |
|
|
|
|
|
auto year = date::year_month_day{date::floor<date::days>(now)}.year(); |
|
|
|
|
|
std::cout << "The current year is " << year << '\n'; |
|
|
|
|
|
return year < 2020_y; |
|
|
|
|
|
} |
|
|
|
|
|
''') |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@pytest.mark.deps_test |
|
|
|
|
|
@pytest.mark.parametrize('case', CASES, ids=[c.dep for c in CASES]) |
|
|
|
|
|
def test_dep(case: DepsCase, dds_pizza_catalog: Path, dds: DDS) -> None: |
|
|
|
|
|
case.setup_root(dds) |
|
|
|
|
|
dds.build(catalog_path=dds_pizza_catalog) |
|
|
|