mirror of
https://github.com/RetroPortingToolKit/psxrecomp
synced 2026-10-28 19:07:47 -04:00
7c40d33db3
Phase 1a (boot slice): 30 instructions at 0xBFC00000, compiles clean. Phase 1b (instruction coverage): 54 opcodes implemented in strict_translator, 44,629 walker-reachable instructions covered, 0 missing. Phase 1c (function discovery): 76 functions from 2 seeds, 2,988 instructions, 199 call edges, 27 indirect jumps. All validated through StrictTranslator. Phase 1d (indirect control flow): 27 sites classified — 21 A0/B0/C0 dispatch stubs, 4 computed calls, 2 computed tail calls. Ghidra cross-referenced with 0 disagreements. Phase 1e (relocation): ROM-to-RAM copy at FUN_bfc00420 proven with both Ghidra (static) and DuckStation (runtime). 69 address aliases, 68/69 function entries match byte-for-byte in RAM. Normalization rule documented. Includes PRINCIPLES.md and DEBUG.md adapted from recomp-template. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
154 lines
3.9 KiB
C++
154 lines
3.9 KiB
C++
#include <toml.hpp>
|
|
|
|
#include "unit_test.hpp"
|
|
|
|
BOOST_AUTO_TEST_CASE(test_basic_string)
|
|
{
|
|
{
|
|
const toml::string str("basic string");
|
|
std::ostringstream oss;
|
|
oss << str;
|
|
BOOST_TEST(oss.str() == "\"basic string\"");
|
|
}
|
|
{
|
|
const std::string s1 ("basic string");
|
|
const toml::string str(s1);
|
|
std::ostringstream oss;
|
|
oss << str;
|
|
BOOST_TEST(oss.str() == "\"basic string\"");
|
|
}
|
|
{
|
|
const toml::string str("basic string", toml::string_t::basic);
|
|
std::ostringstream oss;
|
|
oss << str;
|
|
BOOST_TEST(oss.str() == "\"basic string\"");
|
|
}
|
|
{
|
|
const std::string s1 ("basic string");
|
|
const toml::string str(s1, toml::string_t::basic);
|
|
std::ostringstream oss;
|
|
oss << str;
|
|
BOOST_TEST(oss.str() == "\"basic string\"");
|
|
}
|
|
}
|
|
|
|
BOOST_AUTO_TEST_CASE(test_basic_ml_string)
|
|
{
|
|
{
|
|
const toml::string str("basic\nstring");
|
|
std::ostringstream oss1;
|
|
oss1 << str;
|
|
std::ostringstream oss2;
|
|
oss2 << "\"\"\"\nbasic\nstring\\\n\"\"\"";
|
|
BOOST_TEST(oss1.str() == oss2.str());
|
|
}
|
|
{
|
|
const std::string s1 ("basic\nstring");
|
|
const toml::string str(s1);
|
|
std::ostringstream oss1;
|
|
oss1 << str;
|
|
std::ostringstream oss2;
|
|
oss2 << "\"\"\"\nbasic\nstring\\\n\"\"\"";
|
|
BOOST_TEST(oss1.str() == oss2.str());
|
|
}
|
|
{
|
|
const toml::string str("basic\nstring", toml::string_t::basic);
|
|
std::ostringstream oss1;
|
|
oss1 << str;
|
|
std::ostringstream oss2;
|
|
oss2 << "\"\"\"\nbasic\nstring\\\n\"\"\"";
|
|
BOOST_TEST(oss1.str() == oss2.str());
|
|
|
|
}
|
|
{
|
|
const std::string s1 ("basic\nstring");
|
|
const toml::string str(s1, toml::string_t::basic);
|
|
std::ostringstream oss1;
|
|
oss1 << str;
|
|
std::ostringstream oss2;
|
|
oss2 << "\"\"\"\nbasic\nstring\\\n\"\"\"";
|
|
BOOST_TEST(oss1.str() == oss2.str());
|
|
}
|
|
}
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(test_literal_string)
|
|
{
|
|
{
|
|
const toml::string str("literal string", toml::string_t::literal);
|
|
std::ostringstream oss;
|
|
oss << str;
|
|
BOOST_TEST(oss.str() == "'literal string'");
|
|
}
|
|
{
|
|
const std::string s1 ("literal string");
|
|
const toml::string str(s1, toml::string_t::literal);
|
|
std::ostringstream oss;
|
|
oss << str;
|
|
BOOST_TEST(oss.str() == "'literal string'");
|
|
}
|
|
}
|
|
|
|
BOOST_AUTO_TEST_CASE(test_literal_ml_string)
|
|
{
|
|
{
|
|
const toml::string str("literal\nstring", toml::string_t::literal);
|
|
std::ostringstream oss1;
|
|
oss1 << str;
|
|
std::ostringstream oss2;
|
|
oss2 << "'''\nliteral\nstring'''";
|
|
BOOST_TEST(oss1.str() == oss2.str());
|
|
|
|
}
|
|
{
|
|
const std::string s1 ("literal\nstring");
|
|
const toml::string str(s1, toml::string_t::literal);
|
|
std::ostringstream oss1;
|
|
oss1 << str;
|
|
std::ostringstream oss2;
|
|
oss2 << "'''\nliteral\nstring'''";
|
|
BOOST_TEST(oss1.str() == oss2.str());
|
|
}
|
|
}
|
|
|
|
BOOST_AUTO_TEST_CASE(test_string_add_assign)
|
|
{
|
|
// string literal
|
|
{
|
|
toml::string str("foo");
|
|
str += "bar";
|
|
BOOST_TEST(str.str == "foobar");
|
|
}
|
|
// std::string
|
|
{
|
|
toml::string str("foo");
|
|
std::string str2("bar");
|
|
str += str2;
|
|
BOOST_TEST(str.str == "foobar");
|
|
}
|
|
// toml::string
|
|
{
|
|
toml::string str("foo");
|
|
toml::string str2("bar");
|
|
str += str2;
|
|
BOOST_TEST(str.str == "foobar");
|
|
}
|
|
#if TOML11_CPLUSPLUS_STANDARD_VERSION >= 201703L
|
|
// std::string_view
|
|
{
|
|
toml::string str("foo");
|
|
str += std::string_view("bar");
|
|
BOOST_TEST(str == "foobar");
|
|
}
|
|
#endif
|
|
// std::string += toml::string
|
|
{
|
|
std::string str("foo");
|
|
toml::string str2("bar");
|
|
str += str2;
|
|
BOOST_TEST(str == "foobar");
|
|
}
|
|
|
|
|
|
}
|