@Override
    public ShapeTokenizer clone() {
        try {
            ShapeTokenizer copy = (ShapeTokenizer) super.clone();
            copy.tb = new StringBuilder();
            copy.ready = false;
            copy.cs = null;
            return copy;
        } catch (CloneNotSupportedException e) {
            throw new AssertionError("ShapeTokenizer is Cloneable, but clone call failed");
        }
    }
@Test
    public void testClone() {
        ShapeTokenizer tokenizer = new ShapeTokenizer();
        testClones(tokenizer, "");
        testClones(tokenizer, "This is a test.", "This", "is", "a", "test", ".");
        testClones(tokenizer, "CamelCase", "Camel", "Case");
        testClones(tokenizer, "ABCIndustries AB123 A1B2", "ABCIndustries", "AB", "123", "A", "1", "B", "2");
        testClones(tokenizer, "PUNJANA TEABAGS 160S PMP ú2.99", "PUNJANA", "TEABAGS", "160", "S", "PMP", "ú", "2", ".", "99");
        testClones(tokenizer, "$48 million and $41 million for Q1 2010 and Q1 2009.", "$", "48", "million", "and", "$", "41", "million", "for", "Q", "1", "2010", "and", "Q", "1", "2009", ".");
        testClones(tokenizer, "100152968 'M'RED LABEL TEA BAGS 240'S", "100152968", "'", "M", "'", "RED", "LABEL", "TEA", "BAGS", "240", "'", "S");
        testClones(tokenizer, " test TestCase5", "test", "Test", "Case", "5");
        testClones(tokenizer, "1234ABCD#@!%", "1234", "ABCD", "#", "@", "!", "%");
    }