[Lua] GetRootAs can accept strings. Made Luatest Benchmarks optional (#6593)
authorDerek Bailey <derekbailey@google.com>
Tue, 27 Apr 2021 20:02:13 +0000 (13:02 -0700)
committerGitHub <noreply@github.com>
Tue, 27 Apr 2021 20:02:13 +0000 (13:02 -0700)
13 files changed:
src/idl_gen_lua.cpp
tests/MyGame/Example/Monster.lua
tests/MyGame/Example/Referrable.lua
tests/MyGame/Example/Stat.lua
tests/MyGame/Example/TestSimpleTableWithEnum.lua
tests/MyGame/Example/TypeAliases.lua
tests/MyGame/Example2/Monster.lua
tests/MyGame/InParentNamespace.lua
tests/luatest.lua
tests/namespace_test/NamespaceA/NamespaceB/TableInNestedNS.lua
tests/namespace_test/NamespaceA/SecondTableInA.lua
tests/namespace_test/NamespaceA/TableInFirstNS.lua
tests/namespace_test/NamespaceC/TableInC.lua

index 9788485..e7e7834 100644 (file)
@@ -124,6 +124,10 @@ class LuaGenerator : public BaseGenerator {
 
     code += "function " + NormalizedName(struct_def) + ".GetRootAs" +
             NormalizedName(struct_def) + "(buf, offset)\n";
+    code += std::string(Indent) + "if type(buf) == \"string\" then\n";
+    code += std::string(Indent) + Indent +
+            "buf = flatbuffers.binaryArray.New(buf)\n";
+    code += std::string(Indent) + "end\n";
     code += std::string(Indent) +
             "local n = flatbuffers.N.UOffsetT:Unpack(buf, offset)\n";
     code += std::string(Indent) + "local o = " + NormalizedName(struct_def) +
index 6e52002..fbd2c74 100644 (file)
@@ -14,6 +14,9 @@ function Monster.New()
     return o
 end
 function Monster.GetRootAsMonster(buf, offset)
+    if type(buf) == "string" then
+        buf = flatbuffers.binaryArray.New(buf)
+    end
     local n = flatbuffers.N.UOffsetT:Unpack(buf, offset)
     local o = Monster.New()
     o:Init(buf, n + offset)
index 9b0f5a1..bb78f43 100644 (file)
@@ -13,6 +13,9 @@ function Referrable.New()
     return o
 end
 function Referrable.GetRootAsReferrable(buf, offset)
+    if type(buf) == "string" then
+        buf = flatbuffers.binaryArray.New(buf)
+    end
     local n = flatbuffers.N.UOffsetT:Unpack(buf, offset)
     local o = Referrable.New()
     o:Init(buf, n + offset)
index 6999184..d7fd058 100644 (file)
@@ -13,6 +13,9 @@ function Stat.New()
     return o
 end
 function Stat.GetRootAsStat(buf, offset)
+    if type(buf) == "string" then
+        buf = flatbuffers.binaryArray.New(buf)
+    end
     local n = flatbuffers.N.UOffsetT:Unpack(buf, offset)
     local o = Stat.New()
     o:Init(buf, n + offset)
index 32c8251..5c95bf1 100644 (file)
@@ -13,6 +13,9 @@ function TestSimpleTableWithEnum.New()
     return o
 end
 function TestSimpleTableWithEnum.GetRootAsTestSimpleTableWithEnum(buf, offset)
+    if type(buf) == "string" then
+        buf = flatbuffers.binaryArray.New(buf)
+    end
     local n = flatbuffers.N.UOffsetT:Unpack(buf, offset)
     local o = TestSimpleTableWithEnum.New()
     o:Init(buf, n + offset)
index 90f569c..91c62c4 100644 (file)
@@ -13,6 +13,9 @@ function TypeAliases.New()
     return o
 end
 function TypeAliases.GetRootAsTypeAliases(buf, offset)
+    if type(buf) == "string" then
+        buf = flatbuffers.binaryArray.New(buf)
+    end
     local n = flatbuffers.N.UOffsetT:Unpack(buf, offset)
     local o = TypeAliases.New()
     o:Init(buf, n + offset)
index 347b5db..670ca00 100644 (file)
@@ -13,6 +13,9 @@ function Monster.New()
     return o
 end
 function Monster.GetRootAsMonster(buf, offset)
+    if type(buf) == "string" then
+        buf = flatbuffers.binaryArray.New(buf)
+    end
     local n = flatbuffers.N.UOffsetT:Unpack(buf, offset)
     local o = Monster.New()
     o:Init(buf, n + offset)
index b3fa0c8..8a754b9 100644 (file)
@@ -13,6 +13,9 @@ function InParentNamespace.New()
     return o
 end
 function InParentNamespace.GetRootAsInParentNamespace(buf, offset)
+    if type(buf) == "string" then
+        buf = flatbuffers.binaryArray.New(buf)
+    end
     local n = flatbuffers.N.UOffsetT:Unpack(buf, offset)
     local o = InParentNamespace.New()
     o:Init(buf, n + offset)
index a2a9d63..4e70e07 100644 (file)
@@ -1,5 +1,16 @@
 package.path = string.format("../lua/?.lua;./?.lua;%s",package.path)
 
+local performBenchmarkTests = false
+
+if #arg > 1 then
+    print("usage: lua luatests [benchmark]");
+    return
+elseif #arg > 0 then 
+    if(arg[1] == "benchmark") then
+        performBenchmarkTests = true
+    end 
+end
+
 local function checkReadBuffer(buf, offset, sizePrefix)
     offset = offset or 0
     
@@ -248,6 +259,15 @@ local function benchmarkReadBuffer(count)
     print(string.format('traversed %d %d-byte flatbuffers in %.2fsec: %.2f/msec, %.2fMB/sec',
         count, #buf, dur, rate, dataRate))
 end
+
+local function getRootAs_canAcceptString()
+    local f = assert(io.open('monsterdata_test.mon', 'rb'))
+    local wireData = f:read("*a")
+    f:close() 
+    assert(type(wireData) == "string", "Data is not a string");
+    local mon = monster.GetRootAsMonster(wireData, 0)
+    assert(mon:Hp() == 80, "Monster Hp is not 80")
+end
     
 local tests = 
 { 
@@ -265,6 +285,14 @@ local tests =
         d = "Tests Canonical flatbuffer file included in repo"       
     },
     {
+        f = getRootAs_canAcceptString,
+        d = "Tests that GetRootAs<type>() generated methods accept strings"
+    },
+}
+
+local benchmarks = 
+{
+    {
         f = benchmarkMakeMonster,
         d = "Benchmark making monsters",
         args = {
@@ -302,6 +330,12 @@ local result, err = xpcall(function()
         return s:sub(1,-2)
     end
     
+    if performBenchmarkTests then
+        for _,benchmark in ipairs(benchmarks) do
+            table.insert(tests, benchmark)
+        end
+    end
+
     local testsPassed, testsFailed = 0,0
     for _,test in ipairs(tests) do
         local allargs = test.args or {{}}
index dd45e58..af86203 100644 (file)
@@ -13,6 +13,9 @@ function TableInNestedNS.New()
     return o
 end
 function TableInNestedNS.GetRootAsTableInNestedNS(buf, offset)
+    if type(buf) == "string" then
+        buf = flatbuffers.binaryArray.New(buf)
+    end
     local n = flatbuffers.N.UOffsetT:Unpack(buf, offset)
     local o = TableInNestedNS.New()
     o:Init(buf, n + offset)
index 9a60e4b..b953c12 100644 (file)
@@ -13,6 +13,9 @@ function SecondTableInA.New()
     return o
 end
 function SecondTableInA.GetRootAsSecondTableInA(buf, offset)
+    if type(buf) == "string" then
+        buf = flatbuffers.binaryArray.New(buf)
+    end
     local n = flatbuffers.N.UOffsetT:Unpack(buf, offset)
     local o = SecondTableInA.New()
     o:Init(buf, n + offset)
index 172e16f..1b62cc5 100644 (file)
@@ -13,6 +13,9 @@ function TableInFirstNS.New()
     return o
 end
 function TableInFirstNS.GetRootAsTableInFirstNS(buf, offset)
+    if type(buf) == "string" then
+        buf = flatbuffers.binaryArray.New(buf)
+    end
     local n = flatbuffers.N.UOffsetT:Unpack(buf, offset)
     local o = TableInFirstNS.New()
     o:Init(buf, n + offset)
index bb4fef0..71e4842 100644 (file)
@@ -13,6 +13,9 @@ function TableInC.New()
     return o
 end
 function TableInC.GetRootAsTableInC(buf, offset)
+    if type(buf) == "string" then
+        buf = flatbuffers.binaryArray.New(buf)
+    end
     local n = flatbuffers.N.UOffsetT:Unpack(buf, offset)
     local o = TableInC.New()
     o:Init(buf, n + offset)