MetatableTests.cs 974 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. using Lua.Standard;
  2. namespace Lua.Tests;
  3. public class MetatableTests
  4. {
  5. LuaState state = default!;
  6. [OneTimeSetUp]
  7. public void SetUp()
  8. {
  9. state = LuaState.Create();
  10. state.OpenBaseLibrary();
  11. }
  12. [Test]
  13. public async Task Test_Metamethod_Add()
  14. {
  15. var source = @"
  16. metatable = {
  17. __add = function(a, b)
  18. local t = { }
  19. for i = 1, #a do
  20. t[i] = a[i] + b[i]
  21. end
  22. return t
  23. end
  24. }
  25. local a = { 1, 2, 3 }
  26. local b = { 4, 5, 6 }
  27. setmetatable(a, metatable)
  28. return a + b
  29. ";
  30. var result = await state.DoStringAsync(source);
  31. Assert.That(result, Has.Length.EqualTo(1));
  32. var table = result[0].Read<LuaTable>();
  33. Assert.Multiple(() =>
  34. {
  35. Assert.That(table[1].Read<double>(), Is.EqualTo(5));
  36. Assert.That(table[2].Read<double>(), Is.EqualTo(7));
  37. Assert.That(table[3].Read<double>(), Is.EqualTo(9));
  38. });
  39. }
  40. }