From 79ddb79c4d8a301536be76ec2bd3f7b27cd05d25 Mon Sep 17 00:00:00 2001 From: James Roseborough Date: Sat, 26 Jan 2013 20:00:04 +0000 Subject: [PATCH] Fix bug 3565008 so that short substrings are backed by short arrays. --- test/junit/org/luaj/vm2/StringTest.java | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/test/junit/org/luaj/vm2/StringTest.java b/test/junit/org/luaj/vm2/StringTest.java index ede35adf..9463689b 100644 --- a/test/junit/org/luaj/vm2/StringTest.java +++ b/test/junit/org/luaj/vm2/StringTest.java @@ -191,6 +191,23 @@ public class StringTest extends TestCase { assertNotSame(abc3, abc4); // because of hash collision assertNotSame(lyz3, lyz4); // because of hash collision assertSame(xyz3, xyz4); // because hashes do not collide - + } + + public void testLongSubstringGetsOldBacking() { + LuaString src = LuaString.valueOf("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"); + LuaString sub1 = src.substring(10, 40); + assertSame(src.m_bytes, sub1.m_bytes); + assertEquals(sub1.m_offset, 10); + assertEquals(sub1.m_length, 30); + } + + public void testShortSubstringGetsNewBacking() { + LuaString src = LuaString.valueOf("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"); + LuaString sub1 = src.substring(10, 20); + LuaString sub2 = src.substring(10, 20); + assertEquals(sub1.m_offset, 0); + assertEquals(sub1.m_length, 10); + assertSame(sub1, sub2); + assertFalse(src.m_bytes == sub1.m_bytes); } }