#include #include template constexpr char enc_xor(char value) { return value ^ Key; } template constexpr char add(char c) { return c + Key; } template constexpr char comp(char c) { return f(g(c)); } TEST_CASE("Single encoder, decoder", "[obfs::String]") { REQUIRE( obfs::make_string, enc_xor<0x50>>("Hello World !").decode() == std::string_view("Hello World !")); } TEST_CASE("Multiple encoder, decoder", "[obfs::String]") { using table = obfs::make_table< obfs::encoder_seq, add<10>, comp, add<10>>>, obfs::decoder_seq, add<-10>, comp, enc_xor<0x50>>>>; MAKE_STRING(str, "Hello World !", table); REQUIRE(str.decode() == std::string_view("Hello World !")); } TEST_CASE("Multiple encoder, decoder pair", "[obfs::String]") { using table = obfs::make_pair_table< obfs::encoder_pair, enc_xor<0x50>>, obfs::encoder_pair, add<-10>>, obfs::encoder_pair, add<10>>, comp, enc_xor<0x50>>> >; MAKE_STRING(str, "Hello World !", table); REQUIRE(str.decode() == std::string_view("Hello World !")); }