Improve tests and behavior of string.indexOf operations.
This commit is contained in:
@@ -501,8 +501,8 @@ public class LuaString extends LuaValue {
|
||||
* @return index of first match found, or -1 if not found.
|
||||
*/
|
||||
public int indexOf( byte b, int start ) {
|
||||
for ( int i=0, j=m_offset+start; i < m_length; ++i ) {
|
||||
if ( m_bytes[j++] == b )
|
||||
for ( int i=start; i < m_length; ++i ) {
|
||||
if ( m_bytes[m_offset+i] == b )
|
||||
return i;
|
||||
}
|
||||
return -1;
|
||||
@@ -517,10 +517,9 @@ public class LuaString extends LuaValue {
|
||||
public int indexOf( LuaString s, int start ) {
|
||||
final int slen = s.length();
|
||||
final int limit = m_length - slen;
|
||||
for ( int i = start; i <= limit; ++i ) {
|
||||
if ( equals( m_bytes, m_offset + i, s.m_bytes, s.m_offset, slen ) ) {
|
||||
for ( int i=start; i <= limit; ++i ) {
|
||||
if ( equals( m_bytes, m_offset+i, s.m_bytes, s.m_offset, slen ) )
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
@@ -532,11 +531,10 @@ public class LuaString extends LuaValue {
|
||||
*/
|
||||
public int lastIndexOf( LuaString s ) {
|
||||
final int slen = s.length();
|
||||
final int limit = m_offset + m_length - slen;
|
||||
for ( int i = limit; i >= m_offset; --i ) {
|
||||
if ( equals( m_bytes, i, s.m_bytes, s.m_offset, slen ) ) {
|
||||
final int limit = m_length - slen;
|
||||
for ( int i=limit; i >= 0; --i ) {
|
||||
if ( equals( m_bytes, m_offset+i, s.m_bytes, s.m_offset, slen ) )
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -222,4 +222,131 @@ public class StringTest extends TestCase {
|
||||
assertFalse(sub1 == sub2);
|
||||
assertFalse(src.m_bytes == sub1.m_bytes);
|
||||
}
|
||||
|
||||
public void testIndexOfByteInSubstring() {
|
||||
LuaString str = LuaString.valueOf("abcdef:ghi");
|
||||
LuaString sub = str.substring(2, 10);
|
||||
assertEquals(10, str.m_length);
|
||||
assertEquals(8, sub.m_length);
|
||||
assertEquals(0, str.m_offset);
|
||||
assertEquals(2, sub.m_offset);
|
||||
|
||||
assertEquals(6, str.indexOf((byte) ':', 0));
|
||||
assertEquals(6, str.indexOf((byte) ':', 2));
|
||||
assertEquals(6, str.indexOf((byte) ':', 6));
|
||||
assertEquals(-1, str.indexOf((byte) ':', 7));
|
||||
assertEquals(-1, str.indexOf((byte) ':', 9));
|
||||
assertEquals(9, str.indexOf((byte) 'i', 0));
|
||||
assertEquals(9, str.indexOf((byte) 'i', 2));
|
||||
assertEquals(9, str.indexOf((byte) 'i', 9));
|
||||
assertEquals(-1, str.indexOf((byte) 'z', 0));
|
||||
assertEquals(-1, str.indexOf((byte) 'z', 2));
|
||||
assertEquals(-1, str.indexOf((byte) 'z', 9));
|
||||
|
||||
assertEquals(4, sub.indexOf((byte) ':', 0));
|
||||
assertEquals(4, sub.indexOf((byte) ':', 2));
|
||||
assertEquals(4, sub.indexOf((byte) ':', 4));
|
||||
assertEquals(-1, sub.indexOf((byte) ':', 5));
|
||||
assertEquals(-1, sub.indexOf((byte) ':', 7));
|
||||
assertEquals(7, sub.indexOf((byte) 'i', 0));
|
||||
assertEquals(7, sub.indexOf((byte) 'i', 2));
|
||||
assertEquals(7, sub.indexOf((byte) 'i', 7));
|
||||
assertEquals(-1, sub.indexOf((byte) 'z', 0));
|
||||
assertEquals(-1, sub.indexOf((byte) 'z', 2));
|
||||
assertEquals(-1, sub.indexOf((byte) 'z', 7));
|
||||
}
|
||||
|
||||
public void testIndexOfPatternInSubstring() {
|
||||
LuaString str = LuaString.valueOf("abcdef:ghi");
|
||||
LuaString sub = str.substring(2, 10);
|
||||
assertEquals(10, str.m_length);
|
||||
assertEquals(8, sub.m_length);
|
||||
assertEquals(0, str.m_offset);
|
||||
assertEquals(2, sub.m_offset);
|
||||
|
||||
LuaString pat = LuaString.valueOf(":");
|
||||
LuaString i = LuaString.valueOf("i");
|
||||
LuaString xyz = LuaString.valueOf("xyz");
|
||||
|
||||
assertEquals(6, str.indexOf(pat, 0));
|
||||
assertEquals(6, str.indexOf(pat, 2));
|
||||
assertEquals(6, str.indexOf(pat, 6));
|
||||
assertEquals(-1, str.indexOf(pat, 7));
|
||||
assertEquals(-1, str.indexOf(pat, 9));
|
||||
assertEquals(9, str.indexOf(i, 0));
|
||||
assertEquals(9, str.indexOf(i, 2));
|
||||
assertEquals(9, str.indexOf(i, 9));
|
||||
assertEquals(-1, str.indexOf(xyz, 0));
|
||||
assertEquals(-1, str.indexOf(xyz, 2));
|
||||
assertEquals(-1, str.indexOf(xyz, 9));
|
||||
|
||||
assertEquals(4, sub.indexOf(pat, 0));
|
||||
assertEquals(4, sub.indexOf(pat, 2));
|
||||
assertEquals(4, sub.indexOf(pat, 4));
|
||||
assertEquals(-1, sub.indexOf(pat, 5));
|
||||
assertEquals(-1, sub.indexOf(pat, 7));
|
||||
assertEquals(7, sub.indexOf(i, 0));
|
||||
assertEquals(7, sub.indexOf(i, 2));
|
||||
assertEquals(7, sub.indexOf(i, 7));
|
||||
assertEquals(-1, sub.indexOf(xyz, 0));
|
||||
assertEquals(-1, sub.indexOf(xyz, 2));
|
||||
assertEquals(-1, sub.indexOf(xyz, 7));
|
||||
}
|
||||
|
||||
public void testLastIndexOfPatternInSubstring() {
|
||||
LuaString str = LuaString.valueOf("abcdef:ghi");
|
||||
LuaString sub = str.substring(2, 10);
|
||||
assertEquals(10, str.m_length);
|
||||
assertEquals(8, sub.m_length);
|
||||
assertEquals(0, str.m_offset);
|
||||
assertEquals(2, sub.m_offset);
|
||||
|
||||
LuaString pat = LuaString.valueOf(":");
|
||||
LuaString i = LuaString.valueOf("i");
|
||||
LuaString xyz = LuaString.valueOf("xyz");
|
||||
|
||||
assertEquals(6, str.lastIndexOf(pat));
|
||||
assertEquals(9, str.lastIndexOf(i));
|
||||
assertEquals(-1, str.lastIndexOf(xyz));
|
||||
|
||||
assertEquals(4, sub.lastIndexOf(pat));
|
||||
assertEquals(7, sub.lastIndexOf(i));
|
||||
assertEquals(-1, sub.lastIndexOf(xyz));
|
||||
}
|
||||
|
||||
public void testIndexOfAnyInSubstring() {
|
||||
LuaString str = LuaString.valueOf("abcdef:ghi");
|
||||
LuaString sub = str.substring(2, 10);
|
||||
assertEquals(10, str.m_length);
|
||||
assertEquals(8, sub.m_length);
|
||||
assertEquals(0, str.m_offset);
|
||||
assertEquals(2, sub.m_offset);
|
||||
|
||||
LuaString ghi = LuaString.valueOf("ghi");
|
||||
LuaString ihg = LuaString.valueOf("ihg");
|
||||
LuaString ijk = LuaString.valueOf("ijk");
|
||||
LuaString kji= LuaString.valueOf("kji");
|
||||
LuaString xyz = LuaString.valueOf("xyz");
|
||||
LuaString ABCdEFGHIJKL = LuaString.valueOf("ABCdEFGHIJKL");
|
||||
LuaString EFGHIJKL = ABCdEFGHIJKL.substring(4, 12);
|
||||
LuaString CdEFGHIJ = ABCdEFGHIJKL.substring(2, 10);
|
||||
assertEquals(4, EFGHIJKL.m_offset);
|
||||
assertEquals(2, CdEFGHIJ.m_offset);
|
||||
|
||||
assertEquals(7, str.indexOfAny(ghi));
|
||||
assertEquals(7, str.indexOfAny(ihg));
|
||||
assertEquals(9, str.indexOfAny(ijk));
|
||||
assertEquals(9, str.indexOfAny(kji));
|
||||
assertEquals(-1, str.indexOfAny(xyz));
|
||||
assertEquals(3, str.indexOfAny(CdEFGHIJ));
|
||||
assertEquals(-1, str.indexOfAny(EFGHIJKL));
|
||||
|
||||
assertEquals(5, sub.indexOfAny(ghi));
|
||||
assertEquals(5, sub.indexOfAny(ihg));
|
||||
assertEquals(7, sub.indexOfAny(ijk));
|
||||
assertEquals(7, sub.indexOfAny(kji));
|
||||
assertEquals(-1, sub.indexOfAny(xyz));
|
||||
assertEquals(1, sub.indexOfAny(CdEFGHIJ));
|
||||
assertEquals(-1, sub.indexOfAny(EFGHIJKL));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user