#include "Compiler.hpp" #include "Node.hpp" #include "UTF8Char.h" #include "llvm/IR/Constants.h" #include // TEST(CharTest, SingleChar) // { // auto compiler = std::make_unique("'a';", "main"); // auto result = compiler->compile(); // auto charNode = std::any_cast(result); // ASSERT_EQ(charNode.getNodeType(), NODE_LITERAL); // ASSERT_EQ(charNode.getDataType(), DATATYPE_CHAR); // auto value = charNode.getValue(); // auto expected_value = llvm::ConstantInt::get(llvm::Type::getInt8Ty(*compiler->getContext()), 97); // ASSERT_EQ(value, expected_value); // } // TEST(CharTest, SpecialChar) // { // auto compiler = std::make_unique("'\\n';", "main"); // auto result = compiler->compile(); // auto charNode = std::any_cast(result); // ASSERT_EQ(charNode.getNodeType(), NODE_LITERAL); // ASSERT_EQ(charNode.getDataType(), DATATYPE_CHAR); // auto value = charNode.getValue(); // auto expected_value = llvm::ConstantInt::get(llvm::Type::getInt8Ty(*compiler->getContext()), 10); // ASSERT_EQ(value, expected_value); // } TEST(CharTest, UnicodeChar) { auto compiler = std::make_unique("'\\u00E9';", "main"); auto result = compiler->compile(); auto charNode = std::any_cast(result); ASSERT_EQ(charNode.getNodeType(), NODE_LITERAL); ASSERT_EQ(charNode.getDataType(), DATATYPE_CHAR); auto value = charNode.getValue(); auto value_name = value->getType()->getStructName().str(); ASSERT_EQ(value_name, CHAR_TYPE_NAME); auto structValue = llvm::dyn_cast(value); ASSERT_NE(structValue, nullptr); llvm::Value *length = llvm::dyn_cast(structValue->getAggregateElement((unsigned int)0)); ASSERT_NE(length, nullptr); auto length_value = llvm::dyn_cast(length)->getZExtValue(); ASSERT_EQ(length_value, 2); llvm::ConstantDataArray *array = llvm::dyn_cast(structValue->getAggregateElement((unsigned int)1)); ASSERT_NE(array, nullptr); auto byte1 = array->getElementAsConstant(0); auto byte2 = array->getElementAsConstant(1); auto byte1_value = llvm::dyn_cast(byte1)->getZExtValue(); ASSERT_EQ(byte1_value, 195); auto byte2_value = llvm::dyn_cast(byte2)->getZExtValue(); ASSERT_EQ(byte2_value, 169); }