diff options
-rw-r--r-- | README.md | 2 | ||||
-rw-r--r-- | src/lstrlib.js | 10 | ||||
-rw-r--r-- | tests/lstrlib.js | 31 |
3 files changed, 42 insertions, 1 deletions
@@ -212,6 +212,7 @@ - [x] string.char - [x] string.len - [x] string.lower + - [x] string.rep - [x] string.upper - [ ] string.byte - [ ] string.dump @@ -222,7 +223,6 @@ - [ ] string.match - [ ] string.pack - [ ] string.packsize - - [ ] string.rep - [ ] string.reverse - [ ] string.sub - [ ] string.unpack diff --git a/src/lstrlib.js b/src/lstrlib.js index 96a33f5..11b266a 100644 --- a/src/lstrlib.js +++ b/src/lstrlib.js @@ -35,10 +35,20 @@ const str_upper = function(L) { return 1; }; +const str_rep = function(L) { + let s = lauxlib.luaL_checkstring(L, 1); + let n = lauxlib.luaL_checkinteger(L, 2); + let sep = lauxlib.luaL_optstring(L, 3, ""); + + lapi.lua_pushstring(L, (s + sep).repeat(n - 1) + s); + return 1; +}; + const strlib = { "char": str_char, "len": str_len, "lower": str_lower, + "rep": str_rep, "upper": str_upper }; diff --git a/tests/lstrlib.js b/tests/lstrlib.js index 7120525..56fa2a3 100644 --- a/tests/lstrlib.js +++ b/tests/lstrlib.js @@ -115,4 +115,35 @@ test('string.upper, string.lower', function (t) { "hello", "Correct element(s) on the stack" ); +}); + + +test('string.rep', function (t) { + let luaCode = ` + return string.rep("hello", 3, ", ") + `, L; + + t.plan(3); + + t.doesNotThrow(function () { + + L = lauxlib.luaL_newstate(); + + linit.luaL_openlibs(L); + + lauxlib.luaL_loadstring(L, luaCode); + + }, "Lua program loaded without error"); + + t.doesNotThrow(function () { + + lapi.lua_call(L, 0, -1); + + }, "Lua program ran without error"); + + t.strictEqual( + lapi.lua_tostring(L, -1), + "hello, hello, hello", + "Correct element(s) on the stack" + ); });
\ No newline at end of file |