#include <iostream>
#include <cerrno>
#include <j/lang/string.hpp>
#include <j/lang/throwable.hpp>
#include <j/lang/errno.hpp>
#include <j/lang/error.hpp>
using namespace j;
using namespace j::lang;
class X : public Object
{
public:
String toString() const noexcept override
{
String str("This is X");
return str;
}
};
int main(int, char **)
{
/*
String str = "AbcdefAbaBcdefGhI";
bool ret = str.startsWith("Abc");
std::cout << "startsWith:[ok] " << ret << std::endl;
ret = str.startsWith("Abd");
std::cout << "startsWith:[ng] " << ret << std::endl;
ret = str.endsWith("GhI");
std::cout << "endsWith:[ok] " << ret << std::endl;
ret = str.endsWith("xGhi");
std::cout << "endsWith:[ng] " << ret << std::endl;
std::cout << str.toLowerCase() << std::endl;
std::cout << str.toUpperCase() << std::endl;
String str2 = " a a daf\t";
std::cout << str2 << std::endl;
std::cout << str2.trim() << std::endl;
std::cout << str << std::endl;
std::cout << str.replace('A', '-') << std::endl;
std::cout << str.replace("Ab", "--") << std::endl;
std::cout << str.replaceAll("Ab", "--") << std::endl;
*/
String t1 = "Hello";
String t2 = "World";
String t3 = t1 + " " + t2;
for (int i = 0; i < 100; i++)
{
t3 += "!";
}
std::cout << t3 << std::endl;
std::cout << t1.equals(t2) << std::endl;
String t4 = "World";
String t5 = t2;
std::cout << "t2:hash=" << t2.hashCode() << std::endl;
std::cout << "t4:hash=" << t4.hashCode() << std::endl;
std::cout << t2.equals(t4) << std::endl;
std::cout << t5.equals(t2) << std::endl;
Errno::set(EINVAL);
Throwable tt1;
Throwable tt2("MSG");
Throwable tt3 = tt1;
Object *tt4 = &tt1;
std::cout << tt1 << std::endl;
std::cout << tt2 << std::endl;
std::cout << tt1.equals(tt2) << std::endl;
std::cout << tt1.equals(tt3) << std::endl;
std::cout << "tt1 == tt4 : " << tt1.equals(*tt4) << std::endl;
std::cout << "tt4 == tt1 : " << tt4->equals(tt1) << std::endl;
String str4 = tt3.getMessage();
std::cout << str4 << std::endl;
Error err("Error");
Error err2 = err;
std::cout << err2 << std::endl;
return 0;
}