#include "PrecedenceTest.hpp" void PrecedenceTest::SetUp() { m_globalMemory = projectm_eval_memory_buffer_create(); m_context = projectm_eval_context_create(m_globalMemory, &m_globalRegisters); } void PrecedenceTest::TearDown() { projectm_eval_context_destroy(m_context); projectm_eval_memory_buffer_destroy(m_globalMemory); memset(&m_globalRegisters, 0, sizeof(m_globalRegisters)); } TEST_F(PrecedenceTest, DivisionMultiplication) { auto code1 = projectm_eval_code_compile(m_context, "3.0 * 2.0 / 5.0 * 7.0;"); auto code2 = projectm_eval_code_compile(m_context, "2.0 / 5.0 * 3.0 * 7.0;"); auto code3 = projectm_eval_code_compile(m_context, "3.0 * 7.0 * 2.0 / 5.0;"); auto ret1 = projectm_eval_code_execute(code1); auto ret2 = projectm_eval_code_execute(code2); auto ret3 = projectm_eval_code_execute(code3); projectm_eval_code_destroy(code1); projectm_eval_code_destroy(code2); projectm_eval_code_destroy(code3); ASSERT_FLOAT_EQ(ret1, 8.4); ASSERT_FLOAT_EQ(ret1, ret2); ASSERT_FLOAT_EQ(ret2, ret3); ASSERT_FLOAT_EQ(ret1, ret3); } TEST_F(PrecedenceTest, MultiplicationModulo) { auto code1 = projectm_eval_code_compile(m_context, "3.0 * 2.0 % 5.0 * 7.0;"); auto code2 = projectm_eval_code_compile(m_context, "2.0 % 5.0 * 3.0 * 7.0;"); auto code3 = projectm_eval_code_compile(m_context, "3.0 * 7.0 * 2.0 % 5.0;"); auto ret1 = projectm_eval_code_execute(code1); auto ret2 = projectm_eval_code_execute(code2); auto ret3 = projectm_eval_code_execute(code3); projectm_eval_code_destroy(code1); projectm_eval_code_destroy(code2); projectm_eval_code_destroy(code3); ASSERT_FLOAT_EQ(ret1, 42.0); ASSERT_FLOAT_EQ(ret1, ret2); ASSERT_FLOAT_EQ(ret2, ret3); ASSERT_FLOAT_EQ(ret1, ret3); }