LuaBinder.cpp 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. // Copyright (C) 2009-present, Panagiotis Christopoulos Charitos and contributors.
  2. // All rights reserved.
  3. // Code licensed under the BSD License.
  4. // http://www.anki3d.org/LICENSE
  5. #include <Tests/Framework/Framework.h>
  6. #include <AnKi/Script.h>
  7. #include <AnKi/Math.h>
  8. ANKI_TEST(Script, LuaBinder)
  9. {
  10. ScriptManager& sm = ScriptManager::allocateSingleton(allocAligned, nullptr);
  11. Vec4 v4(2.0, 3.0, 4.0, 5.0);
  12. Vec3 v3(1.1f, 2.2f, 3.3f);
  13. sm.exposeVariable("v4", &v4);
  14. sm.exposeVariable("v3", &v3);
  15. static const char* script = R"(
  16. b = Vec4.new(0, 0, 0, 1.1)
  17. if math.abs(b:getW() - 1.1) > 0.00001 then
  18. print(b:getW())
  19. error("oh no!!")
  20. end
  21. b:setX(3.0)
  22. b:setY(4.0)
  23. v4:copy(v4 * b)
  24. v3:setZ(0.1)
  25. )";
  26. ANKI_TEST_EXPECT_NO_ERR(sm.evalString(script));
  27. ANKI_TEST_EXPECT_EQ(v4, Vec4(6, 12, 0, 5.5));
  28. ANKI_TEST_EXPECT_EQ(v3, Vec3(1.1f, 2.2f, 0.1f));
  29. ScriptManager::freeSingleton();
  30. }
  31. ANKI_TEST(Script, LuaBinderThreads)
  32. {
  33. ScriptEnvironment env;
  34. static const char* script = R"(
  35. vec = Vec4.new(0, 0, 0, 0)
  36. function myFunc()
  37. vec:setX(vec:getX() + 1)
  38. logi(string.format("The number is %f", vec:getX()))
  39. end
  40. )";
  41. ANKI_TEST_EXPECT_NO_ERR(env.evalString(script));
  42. static const char* script1 = R"(
  43. myFunc()
  44. )";
  45. ANKI_TEST_EXPECT_NO_ERR(env.evalString(script1));
  46. ANKI_TEST_EXPECT_NO_ERR(env.evalString(script1));
  47. ScriptManager::freeSingleton();
  48. }
  49. ANKI_TEST(Script, LuaBinderSerialize)
  50. {
  51. ScriptEnvironment env;
  52. static const char* script = R"(
  53. num = 123.4
  54. str = "lala"
  55. vec = Vec3.new(1, 2, 3)
  56. )";
  57. ANKI_TEST_EXPECT_NO_ERR(env.evalString(script));
  58. class Callback : public LuaBinderSerializeGlobalsCallback
  59. {
  60. public:
  61. Array<U8, 1024> m_buff;
  62. U32 m_offset = 0;
  63. void write(const void* data, PtrSize dataSize)
  64. {
  65. memcpy(&m_buff[m_offset], data, dataSize);
  66. m_offset += U32(dataSize);
  67. }
  68. } callback;
  69. env.serializeGlobals(callback);
  70. ScriptEnvironment env2;
  71. env2.deserializeGlobals(&callback.m_buff[0], callback.m_offset);
  72. static const char* script2 = R"(
  73. print(num)
  74. print(str)
  75. print(vec:getX(), vec:getY(), vec:getZ())
  76. )";
  77. ANKI_TEST_EXPECT_NO_ERR(env2.evalString(script2));
  78. ScriptManager::freeSingleton();
  79. }