finalcut/test/fterm_functions-test.cpp

2586 lines
206 KiB
C++
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/***********************************************************************
* fterm_functions-test.cpp - FTerm function unit tests *
* *
* This file is part of the FINAL CUT widget toolkit *
* *
* Copyright 2021 Markus Gans *
* *
* FINAL CUT is free software; you can redistribute it and/or modify *
* it under the terms of the GNU Lesser General Public License as *
* published by the Free Software Foundation; either version 3 of *
* the License, or (at your option) any later version. *
* *
* FINAL CUT is distributed in the hope that it will be useful, but *
* WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public *
* License along with this program. If not, see *
* <http://www.gnu.org/licenses/>. *
***********************************************************************/
#include <wchar.h>
#include <limits>
#include <cppunit/BriefTestProgressListener.h>
#include <cppunit/CompilerOutputter.h>
#include <cppunit/extensions/HelperMacros.h>
#include <cppunit/TestFixture.h>
#include <cppunit/TestResult.h>
#include <cppunit/TestResultCollector.h>
#include <cppunit/TestRunner.h>
#include <conemu.h>
#include <final/final.h>
//----------------------------------------------------------------------
// class FTermFunctionsTest
//----------------------------------------------------------------------
class FTermFunctionsTest : public CPPUNIT_NS::TestFixture, test::ConEmu
{
public:
FTermFunctionsTest()
{
auto ret = std::setlocale (LC_CTYPE, "en_US.UTF-8");
if ( ! ret )
ret = std::setlocale (LC_CTYPE, "C.UTF-8");
fwide(stdout, 1); // Makes stream wide-character oriented
}
protected:
void env2uintTest();
void isReverseNewFontcharTest();
void cp437Test();
void FullWidthHalfWidthTest();
void combiningCharacterTest();
void readCursorPosTest();
private:
// Constant
constexpr static std::size_t NOT_FOUND = static_cast<std::size_t>(-1);
// Adds code needed to register the test suite
CPPUNIT_TEST_SUITE (FTermFunctionsTest);
// Add a methods to the test suite
CPPUNIT_TEST (env2uintTest);
CPPUNIT_TEST (isReverseNewFontcharTest);
CPPUNIT_TEST (cp437Test);
CPPUNIT_TEST (FullWidthHalfWidthTest);
CPPUNIT_TEST (combiningCharacterTest);
CPPUNIT_TEST (readCursorPosTest);
// End of test suite definition
CPPUNIT_TEST_SUITE_END();
};
//----------------------------------------------------------------------
void FTermFunctionsTest::env2uintTest()
{
setenv ("NUM1", "123", 1);
CPPUNIT_ASSERT ( finalcut::env2uint("NUM1") == 123 );
setenv ("NUM2", "4294967295", 1);
CPPUNIT_ASSERT ( finalcut::env2uint("NUM2") == UINT_MAX );
// Overflow
setenv ("NUM3", "999999999999999999999999999999999", 1);
CPPUNIT_ASSERT ( finalcut::env2uint("NUM3") == UINT_MAX );
// not unsigned!
setenv ("NUM4", "-123", 1);
CPPUNIT_ASSERT ( finalcut::env2uint("NUM4") == 0 );
// Invalid
CPPUNIT_ASSERT ( finalcut::env2uint("NON_EXISTENT_VARIABLE") == 0 );
}
//----------------------------------------------------------------------
void FTermFunctionsTest::isReverseNewFontcharTest()
{
CPPUNIT_ASSERT ( ! finalcut::isReverseNewFontchar(L'A') );
CPPUNIT_ASSERT ( ! finalcut::isReverseNewFontchar(L'£') );
CPPUNIT_ASSERT ( finalcut::isReverseNewFontchar(wchar_t(finalcut::UniChar::NF_rev_left_arrow2)) );
CPPUNIT_ASSERT ( finalcut::isReverseNewFontchar(wchar_t(finalcut::UniChar::NF_rev_right_arrow2)) );
CPPUNIT_ASSERT ( finalcut::isReverseNewFontchar(wchar_t(finalcut::UniChar::NF_rev_border_corner_upper_right)) );
CPPUNIT_ASSERT ( finalcut::isReverseNewFontchar(wchar_t(finalcut::UniChar::NF_rev_border_line_right)) );
CPPUNIT_ASSERT ( finalcut::isReverseNewFontchar(wchar_t(finalcut::UniChar::NF_rev_border_line_vertical_left)) );
CPPUNIT_ASSERT ( finalcut::isReverseNewFontchar(wchar_t(finalcut::UniChar::NF_rev_border_corner_lower_right)) );
CPPUNIT_ASSERT ( finalcut::isReverseNewFontchar(wchar_t(finalcut::UniChar::NF_rev_up_arrow2)) );
CPPUNIT_ASSERT ( finalcut::isReverseNewFontchar(wchar_t(finalcut::UniChar::NF_rev_down_arrow2)) );
CPPUNIT_ASSERT ( finalcut::isReverseNewFontchar(wchar_t(finalcut::UniChar::NF_rev_up_arrow1)) );
CPPUNIT_ASSERT ( finalcut::isReverseNewFontchar(wchar_t(finalcut::UniChar::NF_rev_down_arrow1)) );
CPPUNIT_ASSERT ( finalcut::isReverseNewFontchar(wchar_t(finalcut::UniChar::NF_rev_left_arrow1)) );
CPPUNIT_ASSERT ( finalcut::isReverseNewFontchar(wchar_t(finalcut::UniChar::NF_rev_right_arrow1)) );
CPPUNIT_ASSERT ( finalcut::isReverseNewFontchar(wchar_t(finalcut::UniChar::NF_rev_menu_button1)) );
CPPUNIT_ASSERT ( finalcut::isReverseNewFontchar(wchar_t(finalcut::UniChar::NF_rev_menu_button2)) );
CPPUNIT_ASSERT ( finalcut::isReverseNewFontchar(wchar_t(finalcut::UniChar::NF_rev_up_pointing_triangle1)) );
CPPUNIT_ASSERT ( finalcut::isReverseNewFontchar(wchar_t(finalcut::UniChar::NF_rev_down_pointing_triangle1)) );
CPPUNIT_ASSERT ( finalcut::isReverseNewFontchar(wchar_t(finalcut::UniChar::NF_rev_up_pointing_triangle2)) );
CPPUNIT_ASSERT ( finalcut::isReverseNewFontchar(wchar_t(finalcut::UniChar::NF_rev_down_pointing_triangle2)) );
CPPUNIT_ASSERT ( finalcut::isReverseNewFontchar(wchar_t(finalcut::UniChar::NF_rev_menu_button3)) );
CPPUNIT_ASSERT ( finalcut::isReverseNewFontchar(wchar_t(finalcut::UniChar::NF_rev_border_line_right_and_left)) );
CPPUNIT_ASSERT ( ! finalcut::isReverseNewFontchar(wchar_t(finalcut::UniChar::NF_shadow_box_checked)) );
CPPUNIT_ASSERT ( ! finalcut::isReverseNewFontchar(wchar_t(finalcut::UniChar::NF_Bullet)) );
CPPUNIT_ASSERT ( ! finalcut::isReverseNewFontchar(wchar_t(finalcut::UniChar::SquareRoot)) );
}
//----------------------------------------------------------------------
void FTermFunctionsTest::cp437Test()
{
// CP437 -> Unicode
CPPUNIT_ASSERT ( finalcut::cp437_to_unicode(0x01) == L'' );
CPPUNIT_ASSERT ( finalcut::cp437_to_unicode(0x02) == L'' );
CPPUNIT_ASSERT ( finalcut::cp437_to_unicode(0x03) == L'' );
CPPUNIT_ASSERT ( finalcut::cp437_to_unicode(0x04) == L'' );
CPPUNIT_ASSERT ( finalcut::cp437_to_unicode(0x05) == L'' );
CPPUNIT_ASSERT ( finalcut::cp437_to_unicode(0x06) == L'' );
CPPUNIT_ASSERT ( finalcut::cp437_to_unicode(0x07) == L'' );
CPPUNIT_ASSERT ( finalcut::cp437_to_unicode(0x08) == L'' );
CPPUNIT_ASSERT ( finalcut::cp437_to_unicode(0x09) == L'' );
CPPUNIT_ASSERT ( finalcut::cp437_to_unicode(0x0a) == L'' );
CPPUNIT_ASSERT ( finalcut::cp437_to_unicode(0x0b) == L'' );
CPPUNIT_ASSERT ( finalcut::cp437_to_unicode(0x0c) == L'' );
CPPUNIT_ASSERT ( finalcut::cp437_to_unicode(0x0d) == L'' );
CPPUNIT_ASSERT ( finalcut::cp437_to_unicode(0x0e) == L'' );
CPPUNIT_ASSERT ( finalcut::cp437_to_unicode(0x0f) == L'' );
CPPUNIT_ASSERT ( finalcut::cp437_to_unicode(0x10) == L'' );
CPPUNIT_ASSERT ( finalcut::cp437_to_unicode(0x11) == L'' );
CPPUNIT_ASSERT ( finalcut::cp437_to_unicode(0x12) == L'' );
CPPUNIT_ASSERT ( finalcut::cp437_to_unicode(0x13) == L'' );
CPPUNIT_ASSERT ( finalcut::cp437_to_unicode(0x14) == L'' );
CPPUNIT_ASSERT ( finalcut::cp437_to_unicode(0x15) == L'§' );
CPPUNIT_ASSERT ( finalcut::cp437_to_unicode(0x16) == L'' );
CPPUNIT_ASSERT ( finalcut::cp437_to_unicode(0x17) == L'' );
CPPUNIT_ASSERT ( finalcut::cp437_to_unicode(0x18) == L'' );
CPPUNIT_ASSERT ( finalcut::cp437_to_unicode(0x19) == L'' );
CPPUNIT_ASSERT ( finalcut::cp437_to_unicode(0x1a) == L'' );
CPPUNIT_ASSERT ( finalcut::cp437_to_unicode(0x1b) == L'' );
CPPUNIT_ASSERT ( finalcut::cp437_to_unicode(0x1c) == L'' );
CPPUNIT_ASSERT ( finalcut::cp437_to_unicode(0x1d) == L'' );
CPPUNIT_ASSERT ( finalcut::cp437_to_unicode(0x1e) == L'' );
CPPUNIT_ASSERT ( finalcut::cp437_to_unicode(0x1f) == L'' );
CPPUNIT_ASSERT ( finalcut::cp437_to_unicode(0x9b) == L'¢' );
CPPUNIT_ASSERT ( finalcut::cp437_to_unicode(0x9c) == L'£' );
CPPUNIT_ASSERT ( finalcut::cp437_to_unicode(0x9d) == L'¥' );
CPPUNIT_ASSERT ( finalcut::cp437_to_unicode(0x9e) == L'' );
CPPUNIT_ASSERT ( finalcut::cp437_to_unicode(0xb0) == L'' );
CPPUNIT_ASSERT ( finalcut::cp437_to_unicode(0xb1) == L'' );
CPPUNIT_ASSERT ( finalcut::cp437_to_unicode(0xb2) == L'' );
CPPUNIT_ASSERT ( finalcut::cp437_to_unicode(0xdb) == L'' );
CPPUNIT_ASSERT ( finalcut::cp437_to_unicode(0xdf) == L'' );
CPPUNIT_ASSERT ( finalcut::cp437_to_unicode(0xdc) == L'' );
CPPUNIT_ASSERT ( finalcut::cp437_to_unicode(0xdd) == L'' );
CPPUNIT_ASSERT ( finalcut::cp437_to_unicode(0xde) == L'' );
CPPUNIT_ASSERT ( finalcut::cp437_to_unicode(0xc4) == L'' );
CPPUNIT_ASSERT ( finalcut::cp437_to_unicode(0xb3) == L'' );
CPPUNIT_ASSERT ( finalcut::cp437_to_unicode(0xc3) == L'' );
CPPUNIT_ASSERT ( finalcut::cp437_to_unicode(0xb4) == L'' );
CPPUNIT_ASSERT ( finalcut::cp437_to_unicode(0xc5) == L'' );
CPPUNIT_ASSERT ( finalcut::cp437_to_unicode(0xbf) == L'' );
CPPUNIT_ASSERT ( finalcut::cp437_to_unicode(0xc0) == L'' );
CPPUNIT_ASSERT ( finalcut::cp437_to_unicode(0xda) == L'' );
CPPUNIT_ASSERT ( finalcut::cp437_to_unicode(0xd9) == L'' );
CPPUNIT_ASSERT ( finalcut::cp437_to_unicode(0xf4) == L'' );
CPPUNIT_ASSERT ( finalcut::cp437_to_unicode(0xf5) == L'' );
// Unicode -> CP437
CPPUNIT_ASSERT ( finalcut::unicode_to_cp437(L'') == 0x01 );
CPPUNIT_ASSERT ( finalcut::unicode_to_cp437(L'') == 0x02 );
CPPUNIT_ASSERT ( finalcut::unicode_to_cp437(L'') == 0x03 );
CPPUNIT_ASSERT ( finalcut::unicode_to_cp437(L'') == 0x04 );
CPPUNIT_ASSERT ( finalcut::unicode_to_cp437(L'') == 0x05 );
CPPUNIT_ASSERT ( finalcut::unicode_to_cp437(L'') == 0x06 );
CPPUNIT_ASSERT ( finalcut::unicode_to_cp437(L'') == 0x07 );
CPPUNIT_ASSERT ( finalcut::unicode_to_cp437(L'') == 0x08 );
CPPUNIT_ASSERT ( finalcut::unicode_to_cp437(L'') == 0x09 );
CPPUNIT_ASSERT ( finalcut::unicode_to_cp437(L'') == 0x0a );
CPPUNIT_ASSERT ( finalcut::unicode_to_cp437(L'') == 0x0b );
CPPUNIT_ASSERT ( finalcut::unicode_to_cp437(L'') == 0x0c );
CPPUNIT_ASSERT ( finalcut::unicode_to_cp437(L'') == 0x0d );
CPPUNIT_ASSERT ( finalcut::unicode_to_cp437(L'') == 0x0e );
CPPUNIT_ASSERT ( finalcut::unicode_to_cp437(L'') == 0x0f );
CPPUNIT_ASSERT ( finalcut::unicode_to_cp437(L'') == 0x10 );
CPPUNIT_ASSERT ( finalcut::unicode_to_cp437(L'') == 0x11 );
CPPUNIT_ASSERT ( finalcut::unicode_to_cp437(L'') == 0x12 );
CPPUNIT_ASSERT ( finalcut::unicode_to_cp437(L'') == 0x13 );
CPPUNIT_ASSERT ( finalcut::unicode_to_cp437(L'') == 0x14 );
CPPUNIT_ASSERT ( finalcut::unicode_to_cp437(L'§') == 0x15 );
CPPUNIT_ASSERT ( finalcut::unicode_to_cp437(L'') == 0x16 );
CPPUNIT_ASSERT ( finalcut::unicode_to_cp437(L'') == 0x17 );
CPPUNIT_ASSERT ( finalcut::unicode_to_cp437(L'') == 0x18 );
CPPUNIT_ASSERT ( finalcut::unicode_to_cp437(L'') == 0x19 );
CPPUNIT_ASSERT ( finalcut::unicode_to_cp437(L'') == 0x1a );
CPPUNIT_ASSERT ( finalcut::unicode_to_cp437(L'') == 0x1b );
CPPUNIT_ASSERT ( finalcut::unicode_to_cp437(L'') == 0x1c );
CPPUNIT_ASSERT ( finalcut::unicode_to_cp437(L'') == 0x1d );
CPPUNIT_ASSERT ( finalcut::unicode_to_cp437(L'') == 0x1e );
CPPUNIT_ASSERT ( finalcut::unicode_to_cp437(L'') == 0x1f );
CPPUNIT_ASSERT ( finalcut::unicode_to_cp437(L'¢') == 0x9b );
CPPUNIT_ASSERT ( finalcut::unicode_to_cp437(L'£') == 0x9c );
CPPUNIT_ASSERT ( finalcut::unicode_to_cp437(L'¥') == 0x9d );
CPPUNIT_ASSERT ( finalcut::unicode_to_cp437(L'') == 0x9e );
CPPUNIT_ASSERT ( finalcut::unicode_to_cp437(L'') == 0xb0 );
CPPUNIT_ASSERT ( finalcut::unicode_to_cp437(L'') == 0xb1 );
CPPUNIT_ASSERT ( finalcut::unicode_to_cp437(L'') == 0xb2 );
CPPUNIT_ASSERT ( finalcut::unicode_to_cp437(L'') == 0xdb );
CPPUNIT_ASSERT ( finalcut::unicode_to_cp437(L'') == 0xdf );
CPPUNIT_ASSERT ( finalcut::unicode_to_cp437(L'') == 0xdc );
CPPUNIT_ASSERT ( finalcut::unicode_to_cp437(L'') == 0xdd );
CPPUNIT_ASSERT ( finalcut::unicode_to_cp437(L'') == 0xde );
CPPUNIT_ASSERT ( finalcut::unicode_to_cp437(L'') == 0xc4 );
CPPUNIT_ASSERT ( finalcut::unicode_to_cp437(L'') == 0xb3 );
CPPUNIT_ASSERT ( finalcut::unicode_to_cp437(L'') == 0xc3 );
CPPUNIT_ASSERT ( finalcut::unicode_to_cp437(L'') == 0xb4 );
CPPUNIT_ASSERT ( finalcut::unicode_to_cp437(L'') == 0xc5 );
CPPUNIT_ASSERT ( finalcut::unicode_to_cp437(L'') == 0xbf );
CPPUNIT_ASSERT ( finalcut::unicode_to_cp437(L'') == 0xc0 );
CPPUNIT_ASSERT ( finalcut::unicode_to_cp437(L'') == 0xda );
CPPUNIT_ASSERT ( finalcut::unicode_to_cp437(L'') == 0xd9 );
CPPUNIT_ASSERT ( finalcut::unicode_to_cp437(L'') == 0xf4 );
CPPUNIT_ASSERT ( finalcut::unicode_to_cp437(L'') == 0xf5 );
}
//----------------------------------------------------------------------
void FTermFunctionsTest::FullWidthHalfWidthTest()
{
CPPUNIT_ASSERT ( finalcut::hasFullWidthSupports() );
// Test the conversion from half-width to full-width characters
CPPUNIT_ASSERT ( finalcut::getFullWidth(L' ') == L" " );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'!') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'"') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'#') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'$') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'%') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'&') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'\'') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'(') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L')') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'*') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'+') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L',') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'-') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'.') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'/') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'0') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'1') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'2') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'3') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'4') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'5') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'6') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'7') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'8') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'9') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L':') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L';') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'<') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'=') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'>') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'?') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'@') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'A') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'B') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'C') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'D') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'E') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'F') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'G') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'H') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'I') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'J') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'K') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'L') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'M') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'N') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'O') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'P') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'Q') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'R') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'S') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'T') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'U') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'V') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'W') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'X') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'Y') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'Z') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'[') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'\\') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L']') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'^') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'_') == L"_" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'`') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'a') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'b') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'c') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'd') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'e') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'f') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'g') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'h') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'i') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'j') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'k') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'l') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'm') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'n') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'o') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'p') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'q') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'r') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L's') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L't') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'u') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'v') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'w') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'x') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'y') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'z') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'{') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'|') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'}') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'~') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'¢') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'£') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'') == L"" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'') == L"" );
// Only half-width
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'Ā') == L"Ā" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'ā') == L"ā" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'Ă') == L"Ă" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'ă') == L"ă" );
CPPUNIT_ASSERT ( finalcut::getFullWidth(L'Ą') == L"Ą" );
// Test the conversion from full-width to half-width characters
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L" ") == L" " );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"!" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"\"" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"#" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"$" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"%" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"&" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"'" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"(" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L")" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"*" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"+" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"," );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"-" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"." );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"/" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"0" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"1" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"2" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"3" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"4" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"5" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"6" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"7" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"8" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"9" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L":" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L";" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"<" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"=" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L">" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"?" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"@" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"A" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"B" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"C" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"D" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"E" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"F" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"G" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"H" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"I" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"J" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"K" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"L" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"M" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"N" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"O" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"P" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"Q" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"R" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"S" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"T" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"U" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"V" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"W" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"X" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"Y" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"Z" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"[" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"\\" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"]" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"^" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"_") == L"_" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"`" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"a" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"b" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"c" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"d" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"e" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"f" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"g" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"h" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"i" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"j" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"k" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"l" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"m" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"n" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"o" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"p" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"q" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"r" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"s" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"t" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"u" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"v" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"w" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"x" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"y" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"z" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"{" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"|" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"}" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"~" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"" ) == L"");
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"" ) == L"");
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"" ) == L"");
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"" ) == L"");
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"¢" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"£" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"" );
CPPUNIT_ASSERT ( finalcut::getHalfWidth(L"") == L"" );
// Column width (wchar_t)
auto& fterm_data = finalcut::FTerm::getFTermData();
fterm_data.setTermEncoding (finalcut::Encoding::UTF8);
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"\t") == 0 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"\r") == 0 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"\n") == 0 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"\v") == 0 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L" ") == 1 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"0") == 1 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"1") == 1 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"2") == 1 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"3") == 1 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"") == 2 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"") == 2 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"") == 2 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"") == 2 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"\U00000300") == 0 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"\U00000348") == 0 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"\U0000094d") == 0 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"\U00000e37") == 0 );
// Column width (wchar_t) in latin-1
std::setlocale (LC_CTYPE, "C");
fterm_data.setTermEncoding (finalcut::Encoding::VT100);
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L'') == 1 ); // wcwidth(L'─') == -1 (for LC_CTYPE = C)
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L'') == 1 ); // wcwidth(L'│') == -1 (for LC_CTYPE = C)
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L'') == 1 ); // wcwidth(L'├') == -1 (for LC_CTYPE = C)
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L'') == 1 ); // wcwidth(L'┤') == -1 (for LC_CTYPE = C)
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L'') == 1 ); // wcwidth(L'┼') == -1 (for LC_CTYPE = C)
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L'') == 1 ); // wcwidth(L'┐') == -1 (for LC_CTYPE = C)
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L'') == 1 ); // wcwidth(L'└') == -1 (for LC_CTYPE = C)
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L'') == 1 ); // wcwidth(L'┌') == -1 (for LC_CTYPE = C)
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L'') == 1 ); // wcwidth(L'┘') == -1 (for LC_CTYPE = C)
auto ret = std::setlocale (LC_CTYPE, "en_US.UTF-8");
if ( ! ret )
ret = std::setlocale (LC_CTYPE, "C.UTF-8");
fterm_data.setTermEncoding (finalcut::Encoding::UTF8);
// Column width (FString)
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"\v\t 100") == 4 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"0123456789") == 10 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"") == 20 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"abc") == 3 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"b") == 5 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"你好") == 4 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"你好 one more") == 20 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"1234567 one more") == 23 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"o\U0000031b\U00000323=\U00001ee3") == 3 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"STARGΛ̊TE") == 8 );
// Column width (FString) with end position
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"\v\t 100", 0) == 0 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"\v\t 100", 1) == 0 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"\v\t 100", 2) == 0 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"\v\t 100", 3) == 1 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"\v\t 100", 4) == 2 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"\v\t 100", 5) == 3 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"\v\t 100", 6) == 4 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"\v\t 100", 7) == 4 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"0123", 0) == 0 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"0123", 1) == 1 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"0123", 2) == 2 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"0123", 3) == 3 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"0123", 4) == 4 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"", 0) == 0 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"", 1) == 2 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"", 2) == 4 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"", 3) == 6 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"", 4) == 8 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"你好 one more", 0) == 0 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"你好 one more", 1) == 2 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"你好 one more", 2) == 4 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"你好 one more", 3) == 5 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"你好 one more", 4) == 6 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"你好 one more", 5) == 7 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"你好 one more", 6) == 8 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"你好 one more", 7) == 9 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"你好 one more", 8) == 11 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"你好 one more", 9) == 13 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"你好 one more", 10) == 15 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"你好 one more", 11) == 16 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"你好 one more", 12) == 17 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"你好 one more", 13) == 18 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"你好 one more", 14) == 19 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"你好 one more", 15) == 20 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"1234567 one more", 0) == 0 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"1234567 one more", 1) == 1 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"1234567 one more", 2) == 2 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"1234567 one more", 3) == 3 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"1234567 one more", 4) == 4 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"1234567 one more", 5) == 5 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"1234567 one more", 6) == 6 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"1234567 one more", 7) == 7 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"1234567 one more", 8) == 8 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"1234567 one more", 9) == 9 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"1234567 one more", 10) == 10 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"1234567 one more", 11) == 11 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"1234567 one more", 12) == 12 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"1234567 one more", 13) == 14 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"1234567 one more", 14) == 16 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"1234567 one more", 15) == 18 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"1234567 one more", 16) == 19 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"1234567 one more", 17) == 20 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"1234567 one more", 18) == 21 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"1234567 one more", 19) == 22 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"1234567 one more", 20) == 23 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"o\U0000031b\U00000323=\U00001ee3", 0) == 0 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"o\U0000031b\U00000323=\U00001ee3", 1) == 1 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"o\U0000031b\U00000323=\U00001ee3", 2) == 1 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"o\U0000031b\U00000323=\U00001ee3", 3) == 1 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"o\U0000031b\U00000323=\U00001ee3", 4) == 2 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"o\U0000031b\U00000323=\U00001ee3", 5) == 3 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"STARGΛ̊TE", 0) == 0 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"STARGΛ̊TE", 1) == 1 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"STARGΛ̊TE", 2) == 2 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"STARGΛ̊TE", 3) == 3 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"STARGΛ̊TE", 4) == 4 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"STARGΛ̊TE", 5) == 5 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"STARGΛ̊TE", 6) == 6 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"STARGΛ̊TE", 7) == 6 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"STARGΛ̊TE", 8) == 7 );
CPPUNIT_ASSERT ( finalcut::getColumnWidth(L"STARGΛ̊TE", 9) == 8 );
// String length from the first to the specified end column
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"\v\t 100", 0) == 0 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"\v\t 100", 1) == 3 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"\v\t 100", 2) == 4 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"\v\t 100", 3) == 5 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"\v\t 100", 4) == 6 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"\v\t 100", 5) == 6 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"0123", 0) == 0 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"0123", 1) == 1 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"0123", 2) == 2 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"0123", 3) == 3 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"0123", 4) == 4 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"", 0) == 0 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"", 1) == 1 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"", 2) == 1 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"", 3) == 2 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"", 4) == 2 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"", 5) == 3 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"", 6) == 3 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"", 7) == 4 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"", 8) == 4 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"你好 one more", 0) == 0 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"你好 one more", 1) == 1 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"你好 one more", 2) == 1 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"你好 one more", 3) == 2 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"你好 one more", 4) == 2 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"你好 one more", 5) == 3 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"你好 one more", 6) == 4 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"你好 one more", 7) == 5 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"你好 one more", 8) == 6 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"你好 one more", 9) == 7 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"你好 one more", 10) == 8 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"你好 one more", 11) == 8 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"你好 one more", 12) == 9 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"你好 one more", 13) == 9 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"你好 one more", 14) == 10 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"你好 one more", 15) == 10 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"你好 one more", 16) == 11 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"你好 one more", 17) == 12 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"你好 one more", 18) == 13 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"你好 one more", 19) == 14 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"你好 one more", 20) == 15 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"1234567 one more", 0) == 0 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"1234567 one more", 1) == 1 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"1234567 one more", 2) == 2 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"1234567 one more", 3) == 3 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"1234567 one more", 4) == 4 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"1234567 one more", 5) == 5 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"1234567 one more", 6) == 6 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"1234567 one more", 7) == 7 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"1234567 one more", 8) == 8 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"1234567 one more", 9) == 9 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"1234567 one more", 10) == 10 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"1234567 one more", 11) == 11 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"1234567 one more", 12) == 12 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"1234567 one more", 13) == 13 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"1234567 one more", 14) == 13 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"1234567 one more", 15) == 14 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"1234567 one more", 16) == 14 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"1234567 one more", 17) == 15 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"1234567 one more", 18) == 15 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"1234567 one more", 19) == 16 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"1234567 one more", 20) == 17 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"1234567 one more", 21) == 18 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"1234567 one more", 22) == 19 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"1234567 one more", 23) == 20 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"o\U0000031b\U00000323=\U00001ee3", 0) == 0 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"o\U0000031b\U00000323=\U00001ee3", 1) == 1 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"o\U0000031b\U00000323=\U00001ee3", 2) == 4 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"o\U0000031b\U00000323=\U00001ee3", 3) == 5 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"STARGΛ̊TE", 0) == 0 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"STARGΛ̊TE", 1) == 1 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"STARGΛ̊TE", 2) == 2 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"STARGΛ̊TE", 3) == 3 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"STARGΛ̊TE", 4) == 4 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"STARGΛ̊TE", 5) == 5 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"STARGΛ̊TE", 6) == 6 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"STARGΛ̊TE", 7) == 8 );
CPPUNIT_ASSERT ( finalcut::getLengthFromColumnWidth(L"STARGΛ̊TE", 8) == 9 );
// Column width (FChar)
finalcut::FChar fchar{};
std::wstring s = L"1";
std::copy(std::begin(s), std::end(s), std::begin(fchar.ch));
CPPUNIT_ASSERT ( finalcut::getColumnWidth(fchar) == 0 );
finalcut::addColumnWidth(fchar);
CPPUNIT_ASSERT ( finalcut::getColumnWidth(fchar) == 1 );
fchar.attr.bit.char_width = 0x00 & 0x03;
s = L"\t";
std::copy(std::begin(s), std::end(s), std::begin(fchar.ch));
CPPUNIT_ASSERT ( finalcut::getColumnWidth(fchar) == 0 );
finalcut::addColumnWidth(fchar);
CPPUNIT_ASSERT ( finalcut::getColumnWidth(fchar) == 0 );
fchar.attr.bit.char_width = 0x00 & 0x03;
s = L"\r";
std::copy(std::begin(s), std::end(s), std::begin(fchar.ch));
CPPUNIT_ASSERT ( finalcut::getColumnWidth(fchar) == 0 );
finalcut::addColumnWidth(fchar);
CPPUNIT_ASSERT ( finalcut::getColumnWidth(fchar) == 0 );
fchar.attr.bit.char_width = 0x00 & 0x03;
s = L"\n";
std::copy(std::begin(s), std::end(s), std::begin(fchar.ch));
CPPUNIT_ASSERT ( finalcut::getColumnWidth(fchar) == 0 );
finalcut::addColumnWidth(fchar);
CPPUNIT_ASSERT ( finalcut::getColumnWidth(fchar) == 0 );
fchar.attr.bit.char_width = 0x00 & 0x03;
s = L"\v";
std::copy(std::begin(s), std::end(s), std::begin(fchar.ch));
CPPUNIT_ASSERT ( finalcut::getColumnWidth(fchar) == 0 );
finalcut::addColumnWidth(fchar);
CPPUNIT_ASSERT ( finalcut::getColumnWidth(fchar) == 0 );
fchar.attr.bit.char_width = 0x00 & 0x03;
s = L" ";
std::copy(std::begin(s), std::end(s), std::begin(fchar.ch));
CPPUNIT_ASSERT ( finalcut::getColumnWidth(fchar) == 0 );
finalcut::addColumnWidth(fchar);
CPPUNIT_ASSERT ( finalcut::getColumnWidth(fchar) == 1 );
fchar.attr.bit.char_width = 0x00 & 0x03;
s = L"0";
std::copy(std::begin(s), std::end(s), std::begin(fchar.ch));
CPPUNIT_ASSERT ( finalcut::getColumnWidth(fchar) == 0 );
finalcut::addColumnWidth(fchar);
CPPUNIT_ASSERT ( finalcut::getColumnWidth(fchar) == 1 );
fchar.attr.bit.char_width = 0x00 & 0x03;
s = L"1";
std::copy(std::begin(s), std::end(s), std::begin(fchar.ch));
CPPUNIT_ASSERT ( finalcut::getColumnWidth(fchar) == 0 );
finalcut::addColumnWidth(fchar);
CPPUNIT_ASSERT ( finalcut::getColumnWidth(fchar) == 1 );
fchar.attr.bit.char_width = 0x00 & 0x03;
s = L"2";
std::copy(std::begin(s), std::end(s), std::begin(fchar.ch));
CPPUNIT_ASSERT ( finalcut::getColumnWidth(fchar) == 0 );
finalcut::addColumnWidth(fchar);
CPPUNIT_ASSERT ( finalcut::getColumnWidth(fchar) == 1 );
fchar.attr.bit.char_width = 0x00 & 0x03;
s = L"3";
std::copy(std::begin(s), std::end(s), std::begin(fchar.ch));
CPPUNIT_ASSERT ( finalcut::getColumnWidth(fchar) == 0 );
finalcut::addColumnWidth(fchar);
CPPUNIT_ASSERT ( finalcut::getColumnWidth(fchar) == 1 );
fchar.attr.bit.char_width = 0x00 & 0x03;
s = L"";
std::copy(std::begin(s), std::end(s), std::begin(fchar.ch));
CPPUNIT_ASSERT ( finalcut::getColumnWidth(fchar) == 0 );
finalcut::addColumnWidth(fchar);
CPPUNIT_ASSERT ( finalcut::getColumnWidth(fchar) == 2 );
fchar.attr.bit.char_width = 0x00 & 0x03;
s = L"";
std::copy(std::begin(s), std::end(s), std::begin(fchar.ch));
CPPUNIT_ASSERT ( finalcut::getColumnWidth(fchar) == 0 );
finalcut::addColumnWidth(fchar);
CPPUNIT_ASSERT ( finalcut::getColumnWidth(fchar) == 2 );
fchar.attr.bit.char_width = 0x00 & 0x03;
s = L"";
std::copy(std::begin(s), std::end(s), std::begin(fchar.ch));
CPPUNIT_ASSERT ( finalcut::getColumnWidth(fchar) == 0 );
finalcut::addColumnWidth(fchar);
CPPUNIT_ASSERT ( finalcut::getColumnWidth(fchar) == 2 );
fchar.attr.bit.char_width = 0x00 & 0x03;
s = L"";
std::copy(std::begin(s), std::end(s), std::begin(fchar.ch));
CPPUNIT_ASSERT ( finalcut::getColumnWidth(fchar) == 0 );
finalcut::addColumnWidth(fchar);
CPPUNIT_ASSERT ( finalcut::getColumnWidth(fchar) == 2 );
fchar.attr.bit.char_width = 0x00 & 0x03;
s = L"\U00000300";
std::copy(std::begin(s), std::end(s), std::begin(fchar.ch));
CPPUNIT_ASSERT ( finalcut::getColumnWidth(fchar) == 0 );
finalcut::addColumnWidth(fchar);
CPPUNIT_ASSERT ( finalcut::getColumnWidth(fchar) == 0 );
fchar.attr.bit.char_width = 0x00 & 0x03;
s = L"\U00000348";
std::copy(std::begin(s), std::end(s), std::begin(fchar.ch));
CPPUNIT_ASSERT ( finalcut::getColumnWidth(fchar) == 0 );
finalcut::addColumnWidth(fchar);
CPPUNIT_ASSERT ( finalcut::getColumnWidth(fchar) == 0 );
fchar.attr.bit.char_width = 0x00 & 0x03;
s = L"\U0000094d";
std::copy(std::begin(s), std::end(s), std::begin(fchar.ch));
CPPUNIT_ASSERT ( finalcut::getColumnWidth(fchar) == 0 );
finalcut::addColumnWidth(fchar);
CPPUNIT_ASSERT ( finalcut::getColumnWidth(fchar) == 0 );
fchar.attr.bit.char_width = 0x00 & 0x03;
s = L"\U00000e37";
std::copy(std::begin(s), std::end(s), std::begin(fchar.ch));
CPPUNIT_ASSERT ( finalcut::getColumnWidth(fchar) == 0 );
finalcut::addColumnWidth(fchar);
CPPUNIT_ASSERT ( finalcut::getColumnWidth(fchar) == 0 );
fchar.attr.bit.char_width = 0x00 & 0x03;
// Column width (FTermBuffer)
finalcut::FTermBuffer term_buf{};
term_buf << L"\v\t 100";
CPPUNIT_ASSERT ( finalcut::getColumnWidth(term_buf) == 4 );
term_buf.clear();
term_buf << L"0123456789";
CPPUNIT_ASSERT ( finalcut::getColumnWidth(term_buf) == 10 );
term_buf.clear();
term_buf << L"";
CPPUNIT_ASSERT ( finalcut::getColumnWidth(term_buf) == 20 ); // UTF-8
term_buf.clear();
fterm_data.setTermEncoding (finalcut::Encoding::PC);
term_buf << L"";
CPPUNIT_ASSERT ( finalcut::getColumnWidth(term_buf) == 10 ); // CP-437
term_buf.clear();
fterm_data.setTermEncoding (finalcut::Encoding::UTF8);
CPPUNIT_ASSERT ( finalcut::getColumnWidth(term_buf) == 0 ); // after clear
term_buf << L"abc";
CPPUNIT_ASSERT ( finalcut::getColumnWidth(term_buf) == 3 );
term_buf.clear();
term_buf << L"b";
CPPUNIT_ASSERT ( finalcut::getColumnWidth(term_buf) == 5 );
term_buf.clear();
term_buf << L"你好";
CPPUNIT_ASSERT ( finalcut::getColumnWidth(term_buf) == 4 );
term_buf.clear();
term_buf << L"你好 one more";
CPPUNIT_ASSERT ( finalcut::getColumnWidth(term_buf) == 20 );
term_buf.clear();
term_buf << L"1234567 one more";
CPPUNIT_ASSERT ( finalcut::getColumnWidth(term_buf) == 23 );
term_buf.clear();
term_buf << L"o\U0000031b\U00000323=\U00001ee3";
CPPUNIT_ASSERT ( finalcut::getColumnWidth(term_buf) == 3 );
term_buf.clear();
term_buf << L"STARGΛ̊TE";
CPPUNIT_ASSERT ( finalcut::getColumnWidth(term_buf) == 8 );
// Extracts a substring that starts at a specified column position
// and has a specified number of columns
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"\v\t 100", 0, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"\v\t 100", 1, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"\v\t 100", 2, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"\v\t 100", 3, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"\v\t 100", 4, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"\v\t 100", 5, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"\v\t 100", 0, 1) == L" " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"\v\t 100", 1, 1) == L" " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"\v\t 100", 2, 1) == L"1" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"\v\t 100", 3, 1) == L"0" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"\v\t 100", 4, 1) == L"0" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"\v\t 100", 5, 1) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"\v\t 100", 0, 2) == L" 1" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"\v\t 100", 1, 2) == L" 1" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"\v\t 100", 2, 2) == L"10" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"\v\t 100", 3, 2) == L"00" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"\v\t 100", 4, 2) == L"0" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"\v\t 100", 5, 2) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"\v\t 100", 0, 3) == L" 10" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"\v\t 100", 1, 3) == L" 10" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"\v\t 100", 2, 3) == L"100" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"\v\t 100", 3, 3) == L"00" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"\v\t 100", 4, 3) == L"0" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"\v\t 100", 5, 3) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"\v\t 100", 0, 4) == L" 100" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"\v\t 100", 1, 4) == L" 100" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"\v\t 100", 2, 4) == L"100" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"\v\t 100", 3, 4) == L"00" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"\v\t 100", 4, 4) == L"0" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"\v\t 100", 5, 4) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"0123", 0, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"0123", 1, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"0123", 2, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"0123", 3, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"0123", 4, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"0123", 5, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"0123", 0, 1) == L"0" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"0123", 1, 1) == L"0" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"0123", 2, 1) == L"1" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"0123", 3, 1) == L"2" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"0123", 4, 1) == L"3" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"0123", 5, 1) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"0123", 0, 2) == L"01" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"0123", 1, 2) == L"01" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"0123", 2, 2) == L"12" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"0123", 3, 2) == L"23" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"0123", 4, 2) == L"3" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"0123", 5, 2) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"0123", 0, 3) == L"012" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"0123", 1, 3) == L"012" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"0123", 2, 3) == L"123" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"0123", 3, 3) == L"23" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"0123", 4, 3) == L"3" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"0123", 5, 3) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 0, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 1, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 2, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 3, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 4, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 5, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 6, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 7, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 8, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 9, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 0, 1) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 1, 1) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 2, 1) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 3, 1) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 4, 1) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 5, 1) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 6, 1) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 7, 1) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 8, 1) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 9, 1) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 0, 2) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 1, 2) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 2, 2) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 3, 2) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 4, 2) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 5, 2) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 6, 2) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 7, 2) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 8, 2) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 9, 2) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 0, 3) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 1, 3) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 2, 3) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 3, 3) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 4, 3) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 5, 3) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 6, 3) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 7, 3) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 8, 3) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 9, 3) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 0, 4) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 1, 4) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 2, 4) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 3, 4) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 4, 4) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 5, 4) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 6, 4) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 7, 4) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 8, 4) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 9, 4) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 0, 5) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 1, 5) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 2, 5) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 3, 5) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 4, 5) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 5, 5) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 6, 5) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 7, 5) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 8, 5) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 9, 5) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 0, 6) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 1, 6) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 2, 6) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 3, 6) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 4, 6) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 5, 6) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 6, 6) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 7, 6) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 8, 6) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 9, 6) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 0, 7) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 1, 7) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 2, 7) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 3, 7) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 4, 7) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 5, 7) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 6, 7) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 7, 7) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 8, 7) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 9, 7) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 0, 8) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 1, 8) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 2, 8) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 3, 8) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 4, 8) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 5, 8) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 6, 8) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 7, 8) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 8, 8) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"", 9, 8) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 0, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 1, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 2, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 3, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 4, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 5, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 6, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 7, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 8, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 9, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 10, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 11, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 12, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 13, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 14, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 15, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 16, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 17, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 18, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 19, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 20, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 21, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 0, 1) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 1, 1) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 2, 1) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 3, 1) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 4, 1) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 5, 1) == L" " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 6, 1) == L"o" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 7, 1) == L"n" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 8, 1) == L"e" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 9, 1) == L" " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 10, 1) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 11, 1) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 12, 1) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 13, 1) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 14, 1) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 15, 1) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 16, 1) == L" " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 17, 1) == L"m" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 18, 1) == L"o" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 19, 1) == L"r" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 20, 1) == L"e" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 21, 1) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 0, 2) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 1, 2) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 2, 2) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 3, 2) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 4, 2) == L" " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 5, 2) == L" o" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 6, 2) == L"on" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 7, 2) == L"ne" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 8, 2) == L"e " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 9, 2) == L" " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 10, 2) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 11, 2) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 12, 2) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 13, 2) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 14, 2) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 15, 2) == L" " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 16, 2) == L" m" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 17, 2) == L"mo" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 18, 2) == L"or" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 19, 2) == L"re" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 20, 2) == L"e" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 21, 2) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 0, 3) == L"你›" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 1, 3) == L"你›" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 2, 3) == L"‹好" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 3, 3) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 4, 3) == L" o" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 5, 3) == L" on" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 6, 3) == L"one" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 7, 3) == L"ne " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 8, 3) == L"e " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 9, 3) == L" " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 10, 3) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 11, 3) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 12, 3) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 13, 3) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 14, 3) == L" " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 15, 3) == L" m" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 16, 3) == L" mo" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 17, 3) == L"mor" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 18, 3) == L"ore" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 19, 3) == L"re" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 20, 3) == L"e" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 21, 3) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 0, 4) == L"你好" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 1, 4) == L"你好" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 2, 4) == L"‹好 " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 3, 4) == L"好 o" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 4, 4) == L" on" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 5, 4) == L" one" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 6, 4) == L"one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 7, 4) == L"ne " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 8, 4) == L"e " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 9, 4) == L" " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 10, 4) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 11, 4) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 12, 4) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 13, 4) == L" " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 14, 4) == L" m" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 15, 4) == L" mo" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 16, 4) == L" mor" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 17, 4) == L"more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 18, 4) == L"ore" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 19, 4) == L"re" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 20, 4) == L"e" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 21, 4) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 0, 5) == L"你好 " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 1, 5) == L"你好 " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 2, 5) == L"‹好 o" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 3, 5) == L"好 on" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 4, 5) == L" one" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 5, 5) == L" one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 6, 5) == L"one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 7, 5) == L"ne " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 8, 5) == L"e " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 9, 5) == L" " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 10, 5) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 11, 5) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 12, 5) == L" " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 13, 5) == L" m" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 14, 5) == L" mo" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 15, 5) == L" mor" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 16, 5) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 17, 5) == L"more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 18, 5) == L"ore" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 19, 5) == L"re" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 20, 5) == L"e" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 21, 5) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 0, 6) == L"你好 o" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 1, 6) == L"你好 o" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 2, 6) == L"‹好 on" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 3, 6) == L"好 one" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 4, 6) == L" one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 5, 6) == L" one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 6, 6) == L"one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 7, 6) == L"ne " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 8, 6) == L"e " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 9, 6) == L" " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 10, 6) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 11, 6) == L" " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 12, 6) == L" m" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 13, 6) == L" mo" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 14, 6) == L" mor" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 15, 6) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 16, 6) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 17, 6) == L"more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 18, 6) == L"ore" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 19, 6) == L"re" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 20, 6) == L"e" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 21, 6) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 0, 7) == L"你好 on" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 1, 7) == L"你好 on" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 2, 7) == L"‹好 one" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 3, 7) == L"好 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 4, 7) == L" one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 5, 7) == L" one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 6, 7) == L"one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 7, 7) == L"ne " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 8, 7) == L"e " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 9, 7) == L" " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 10, 7) == L" " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 11, 7) == L" m" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 12, 7) == L" mo" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 13, 7) == L" mor" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 14, 7) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 15, 7) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 16, 7) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 17, 7) == L"more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 18, 7) == L"ore" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 19, 7) == L"re" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 20, 7) == L"e" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 21, 7) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 0, 8) == L"你好 one" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 1, 8) == L"你好 one" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 2, 8) == L"‹好 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 3, 8) == L"好 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 4, 8) == L" one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 5, 8) == L" one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 6, 8) == L"one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 7, 8) == L"ne " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 8, 8) == L"e " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 9, 8) == L" " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 10, 8) == L" m" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 11, 8) == L" mo" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 12, 8) == L" mor" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 13, 8) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 14, 8) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 15, 8) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 16, 8) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 17, 8) == L"more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 18, 8) == L"ore" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 19, 8) == L"re" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 20, 8) == L"e" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 21, 8) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 0, 9) == L"你好 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 1, 9) == L"你好 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 2, 9) == L"‹好 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 3, 9) == L"好 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 4, 9) == L" one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 5, 9) == L" one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 6, 9) == L"one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 7, 9) == L"ne " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 8, 9) == L"e " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 9, 9) == L" m" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 10, 9) == L" mo" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 11, 9) == L" mor" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 12, 9) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 13, 9) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 14, 9) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 15, 9) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 16, 9) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 17, 9) == L"more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 18, 9) == L"ore" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 19, 9) == L"re" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 20, 9) == L"e" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 21, 9) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 0, 10) == L"你好 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 1, 10) == L"你好 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 2, 10) == L"‹好 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 3, 10) == L"好 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 4, 10) == L" one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 5, 10) == L" one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 6, 10) == L"one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 7, 10) == L"ne " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 8, 10) == L"e m" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 9, 10) == L" mo" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 10, 10) == L" mor" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 11, 10) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 12, 10) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 13, 10) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 14, 10) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 15, 10) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 16, 10) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 17, 10) == L"more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 18, 10) == L"ore" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 19, 10) == L"re" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 20, 10) == L"e" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 21, 10) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 0, 11) == L"你好 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 1, 11) == L"你好 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 2, 11) == L"‹好 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 3, 11) == L"好 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 4, 11) == L" one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 5, 11) == L" one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 6, 11) == L"one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 7, 11) == L"ne m" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 8, 11) == L"e mo" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 9, 11) == L" mor" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 10, 11) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 11, 11) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 12, 11) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 13, 11) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 14, 11) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 15, 11) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 16, 11) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 17, 11) == L"more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 18, 11) == L"ore" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 19, 11) == L"re" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 20, 11) == L"e" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 21, 11) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 0, 12) == L"你好 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 1, 12) == L"你好 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 2, 12) == L"‹好 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 3, 12) == L"好 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 4, 12) == L" one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 5, 12) == L" one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 6, 12) == L"one m" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 7, 12) == L"ne mo" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 8, 12) == L"e mor" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 9, 12) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 10, 12) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 11, 12) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 12, 12) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 13, 12) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 14, 12) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 15, 12) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 16, 12) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 17, 12) == L"more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 18, 12) == L"ore" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 19, 12) == L"re" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 20, 12) == L"e" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 21, 12) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 0, 13) == L"你好 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 1, 13) == L"你好 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 2, 13) == L"‹好 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 3, 13) == L"好 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 4, 13) == L" one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 5, 13) == L" one m" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 6, 13) == L"one mo" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 7, 13) == L"ne mor" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 8, 13) == L"e more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 9, 13) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 10, 13) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 11, 13) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 12, 13) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 13, 13) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 14, 13) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 15, 13) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 16, 13) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 17, 13) == L"more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 18, 13) == L"ore" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 19, 13) == L"re" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 20, 13) == L"e" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 21, 13) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 0, 14) == L"你好 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 1, 14) == L"你好 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 2, 14) == L"‹好 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 3, 14) == L"好 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 4, 14) == L" one m" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 5, 14) == L" one mo" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 6, 14) == L"one mor" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 7, 14) == L"ne more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 8, 14) == L"e more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 9, 14) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 10, 14) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 11, 14) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 12, 14) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 13, 14) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 14, 14) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 15, 14) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 16, 14) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 17, 14) == L"more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 18, 14) == L"ore" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 19, 14) == L"re" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 20, 14) == L"e" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 21, 14) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 0, 15) == L"你好 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 1, 15) == L"你好 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 2, 15) == L"‹好 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 3, 15) == L"好 one m" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 4, 15) == L" one mo" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 5, 15) == L" one mor" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 6, 15) == L"one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 7, 15) == L"ne more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 8, 15) == L"e more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 9, 15) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 10, 15) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 11, 15) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 12, 15) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 13, 15) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 14, 15) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 15, 15) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 16, 15) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 17, 15) == L"more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 18, 15) == L"ore" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 19, 15) == L"re" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 20, 15) == L"e" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 21, 15) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 0, 16) == L"你好 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 1, 16) == L"你好 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 2, 16) == L"‹好 one m" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 3, 16) == L"好 one mo" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 4, 16) == L" one mor" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 5, 16) == L" one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 6, 16) == L"one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 7, 16) == L"ne more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 8, 16) == L"e more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 9, 16) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 10, 16) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 11, 16) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 12, 16) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 13, 16) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 14, 16) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 15, 16) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 16, 16) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 17, 16) == L"more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 18, 16) == L"ore" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 19, 16) == L"re" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 20, 16) == L"e" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 21, 16) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 0, 17) == L"你好 one m" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 1, 17) == L"你好 one m" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 2, 17) == L"‹好 one mo" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 3, 17) == L"好 one mor" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 4, 17) == L" one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 5, 17) == L" one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 6, 17) == L"one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 7, 17) == L"ne more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 8, 17) == L"e more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 9, 17) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 10, 17) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 11, 17) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 12, 17) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 13, 17) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 14, 17) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 15, 17) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 16, 17) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 17, 17) == L"more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 18, 17) == L"ore" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 19, 17) == L"re" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 20, 17) == L"e" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 21, 17) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 0, 18) == L"你好 one mo" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 1, 18) == L"你好 one mo" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 2, 18) == L"‹好 one mor" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 3, 18) == L"好 one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 4, 18) == L" one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 5, 18) == L" one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 6, 18) == L"one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 7, 18) == L"ne more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 8, 18) == L"e more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 9, 18) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 10, 18) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 11, 18) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 12, 18) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 13, 18) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 14, 18) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 15, 18) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 16, 18) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 17, 18) == L"more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 18, 18) == L"ore" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 19, 18) == L"re" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 20, 18) == L"e" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 21, 18) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 0, 19) == L"你好 one mor" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 1, 19) == L"你好 one mor" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 2, 19) == L"‹好 one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 3, 19) == L"好 one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 4, 19) == L" one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 5, 19) == L" one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 6, 19) == L"one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 7, 19) == L"ne more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 8, 19) == L"e more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 9, 19) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 10, 19) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 11, 19) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 12, 19) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 13, 19) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 14, 19) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 15, 19) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 16, 19) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 17, 19) == L"more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 18, 19) == L"ore" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 19, 19) == L"re" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 20, 19) == L"e" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 21, 19) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 0, 20) == L"你好 one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 1, 20) == L"你好 one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 2, 20) == L"‹好 one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 3, 20) == L"好 one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 4, 20) == L" one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 5, 20) == L" one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 6, 20) == L"one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 7, 20) == L"ne more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 8, 20) == L"e more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 9, 20) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 10, 20) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 11, 20) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 12, 20) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 13, 20) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 14, 20) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 15, 20) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 16, 20) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 17, 20) == L"more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 18, 20) == L"ore" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 19, 20) == L"re" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 20, 20) == L"e" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"你好 one more", 21, 20) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 0, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 1, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 2, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 3, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 4, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 5, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 6, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 7, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 8, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 9, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 10, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 11, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 12, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 13, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 14, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 15, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 16, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 17, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 18, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 19, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 20, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 21, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 22, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 23, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 24, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 0, 1) == L"1" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 1, 1) == L"1" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 2, 1) == L"2" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 3, 1) == L"3" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 4, 1) == L"4" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 5, 1) == L"5" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 6, 1) == L"6" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 7, 1) == L"7" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 8, 1) == L" " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 9, 1) == L"o" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 10, 1) == L"n" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 11, 1) == L"e" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 12, 1) == L" " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 13, 1) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 14, 1) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 15, 1) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 16, 1) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 17, 1) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 18, 1) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 19, 1) == L" " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 20, 1) == L"m" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 21, 1) == L"o" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 22, 1) == L"r" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 23, 1) == L"e" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 24, 1) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 0, 2) == L"12" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 1, 2) == L"12" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 2, 2) == L"23" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 3, 2) == L"34" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 4, 2) == L"45" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 5, 2) == L"56" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 6, 2) == L"67" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 7, 2) == L"7 " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 8, 2) == L" o" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 9, 2) == L"on" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 10, 2) == L"ne" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 11, 2) == L"e " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 12, 2) == L" " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 13, 2) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 14, 2) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 15, 2) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 16, 2) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 17, 2) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 18, 2) == L" " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 19, 2) == L" m" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 20, 2) == L"mo" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 21, 2) == L"or" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 22, 2) == L"re" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 23, 2) == L"e" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 24, 2) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 0, 3) == L"123" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 1, 3) == L"123" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 2, 3) == L"234" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 3, 3) == L"345" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 4, 3) == L"456" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 5, 3) == L"567" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 6, 3) == L"67 " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 7, 3) == L"7 o" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 8, 3) == L" on" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 9, 3) == L"one" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 10, 3) == L"ne " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 11, 3) == L"e " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 12, 3) == L" " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 13, 3) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 14, 3) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 15, 3) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 16, 3) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 17, 3) == L" " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 18, 3) == L" m" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 19, 3) == L" mo" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 20, 3) == L"mor" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 21, 3) == L"ore" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 22, 3) == L"re" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 23, 3) == L"e" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 24, 3) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 0, 4) == L"1234" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 1, 4) == L"1234" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 2, 4) == L"2345" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 3, 4) == L"3456" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 4, 4) == L"4567" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 5, 4) == L"567 " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 6, 4) == L"67 o" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 7, 4) == L"7 on" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 8, 4) == L" one" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 9, 4) == L"one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 10, 4) == L"ne " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 11, 4) == L"e " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 12, 4) == L" " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 13, 4) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 14, 4) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 15, 4) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 16, 4) == L" " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 17, 4) == L" m" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 18, 4) == L" mo" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 19, 4) == L" mor" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 20, 4) == L"more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 21, 4) == L"ore" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 22, 4) == L"re" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 23, 4) == L"e" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 24, 4) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 0, 5) == L"12345" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 1, 5) == L"12345" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 2, 5) == L"23456" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 3, 5) == L"34567" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 4, 5) == L"4567 " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 5, 5) == L"567 o" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 6, 5) == L"67 on" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 7, 5) == L"7 one" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 8, 5) == L" one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 9, 5) == L"one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 10, 5) == L"ne " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 11, 5) == L"e " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 12, 5) == L" " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 13, 5) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 14, 5) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 15, 5) == L" " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 16, 5) == L" m" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 17, 5) == L" mo" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 18, 5) == L" mor" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 19, 5) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 20, 5) == L"more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 21, 5) == L"ore" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 22, 5) == L"re" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 23, 5) == L"e" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 24, 5) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 0, 6) == L"123456" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 1, 6) == L"123456" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 2, 6) == L"234567" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 3, 6) == L"34567 " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 4, 6) == L"4567 o" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 5, 6) == L"567 on" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 6, 6) == L"67 one" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 7, 6) == L"7 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 8, 6) == L" one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 9, 6) == L"one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 10, 6) == L"ne " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 11, 6) == L"e " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 12, 6) == L" " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 13, 6) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 14, 6) == L" " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 15, 6) == L" m" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 16, 6) == L" mo" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 17, 6) == L" mor" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 18, 6) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 19, 6) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 20, 6) == L"more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 21, 6) == L"ore" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 22, 6) == L"re" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 23, 6) == L"e" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 24, 6) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 0, 7) == L"1234567" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 1, 7) == L"1234567" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 2, 7) == L"234567 " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 3, 7) == L"34567 o" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 4, 7) == L"4567 on" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 5, 7) == L"567 one" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 6, 7) == L"67 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 7, 7) == L"7 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 8, 7) == L" one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 9, 7) == L"one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 10, 7) == L"ne " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 11, 7) == L"e " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 12, 7) == L" " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 13, 7) == L" " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 14, 7) == L" m" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 15, 7) == L" mo" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 16, 7) == L" mor" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 17, 7) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 18, 7) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 19, 7) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 20, 7) == L"more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 21, 7) == L"ore" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 22, 7) == L"re" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 23, 7) == L"e" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 24, 7) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 0, 8) == L"1234567 " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 1, 8) == L"1234567 " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 2, 8) == L"234567 o" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 3, 8) == L"34567 on" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 4, 8) == L"4567 one" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 5, 8) == L"567 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 6, 8) == L"67 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 7, 8) == L"7 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 8, 8) == L" one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 9, 8) == L"one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 10, 8) == L"ne " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 11, 8) == L"e " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 12, 8) == L" " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 13, 8) == L" m" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 14, 8) == L" mo" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 15, 8) == L" mor" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 16, 8) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 17, 8) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 18, 8) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 19, 8) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 20, 8) == L"more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 21, 8) == L"ore" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 22, 8) == L"re" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 23, 8) == L"e" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 24, 8) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 0, 9) == L"1234567 o" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 1, 9) == L"1234567 o" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 2, 9) == L"234567 on" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 3, 9) == L"34567 one" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 4, 9) == L"4567 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 5, 9) == L"567 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 6, 9) == L"67 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 7, 9) == L"7 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 8, 9) == L" one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 9, 9) == L"one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 10, 9) == L"ne " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 11, 9) == L"e " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 12, 9) == L" m" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 13, 9) == L" mo" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 14, 9) == L" mor" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 15, 9) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 16, 9) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 17, 9) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 18, 9) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 19, 9) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 20, 9) == L"more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 21, 9) == L"ore" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 22, 9) == L"re" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 23, 9) == L"e" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 24, 9) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 0, 10) == L"1234567 on" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 1, 10) == L"1234567 on" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 2, 10) == L"234567 one" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 3, 10) == L"34567 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 4, 10) == L"4567 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 5, 10) == L"567 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 6, 10) == L"67 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 7, 10) == L"7 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 8, 10) == L" one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 9, 10) == L"one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 10, 10) == L"ne " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 11, 10) == L"e m" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 12, 10) == L" mo" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 13, 10) == L" mor" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 14, 10) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 15, 10) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 16, 10) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 17, 10) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 18, 10) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 19, 10) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 20, 10) == L"more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 21, 10) == L"ore" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 22, 10) == L"re" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 23, 10) == L"e" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 24, 10) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 0, 11) == L"1234567 one" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 1, 11) == L"1234567 one" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 2, 11) == L"234567 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 3, 11) == L"34567 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 4, 11) == L"4567 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 5, 11) == L"567 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 6, 11) == L"67 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 7, 11) == L"7 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 8, 11) == L" one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 9, 11) == L"one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 10, 11) == L"ne m" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 11, 11) == L"e mo" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 12, 11) == L" mor" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 13, 11) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 14, 11) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 15, 11) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 16, 11) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 17, 11) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 18, 11) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 19, 11) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 20, 11) == L"more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 21, 11) == L"ore" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 22, 11) == L"re" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 23, 11) == L"e" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 24, 11) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 0, 12) == L"1234567 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 1, 12) == L"1234567 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 2, 12) == L"234567 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 3, 12) == L"34567 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 4, 12) == L"4567 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 5, 12) == L"567 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 6, 12) == L"67 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 7, 12) == L"7 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 8, 12) == L" one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 9, 12) == L"one m" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 10, 12) == L"ne mo" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 11, 12) == L"e mor" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 12, 12) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 13, 12) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 14, 12) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 15, 12) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 16, 12) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 17, 12) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 18, 12) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 19, 12) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 20, 12) == L"more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 21, 12) == L"ore" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 22, 12) == L"re" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 23, 12) == L"e" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 24, 12) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 0, 13) == L"1234567 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 1, 13) == L"1234567 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 2, 13) == L"234567 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 3, 13) == L"34567 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 4, 13) == L"4567 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 5, 13) == L"567 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 6, 13) == L"67 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 7, 13) == L"7 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 8, 13) == L" one m" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 9, 13) == L"one mo" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 10, 13) == L"ne mor" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 11, 13) == L"e more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 12, 13) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 13, 13) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 14, 13) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 15, 13) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 16, 13) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 17, 13) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 18, 13) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 19, 13) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 20, 13) == L"more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 21, 13) == L"ore" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 22, 13) == L"re" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 23, 13) == L"e" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 24, 13) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 0, 14) == L"1234567 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 1, 14) == L"1234567 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 2, 14) == L"234567 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 3, 14) == L"34567 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 4, 14) == L"4567 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 5, 14) == L"567 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 6, 14) == L"67 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 7, 14) == L"7 one m" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 8, 14) == L" one mo" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 9, 14) == L"one mor" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 10, 14) == L"ne more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 11, 14) == L"e more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 12, 14) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 13, 14) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 14, 14) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 15, 14) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 16, 14) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 17, 14) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 18, 14) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 19, 14) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 20, 14) == L"more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 21, 14) == L"ore" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 22, 14) == L"re" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 23, 14) == L"e" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 24, 14) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 0, 15) == L"1234567 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 1, 15) == L"1234567 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 2, 15) == L"234567 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 3, 15) == L"34567 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 4, 15) == L"4567 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 5, 15) == L"567 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 6, 15) == L"67 one m" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 7, 15) == L"7 one mo" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 8, 15) == L" one mor" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 9, 15) == L"one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 10, 15) == L"ne more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 11, 15) == L"e more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 12, 15) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 13, 15) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 14, 15) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 15, 15) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 16, 15) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 17, 15) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 18, 15) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 19, 15) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 20, 15) == L"more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 21, 15) == L"ore" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 22, 15) == L"re" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 23, 15) == L"e" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 24, 15) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 0, 16) == L"1234567 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 1, 16) == L"1234567 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 2, 16) == L"234567 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 3, 16) == L"34567 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 4, 16) == L"4567 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 5, 16) == L"567 one m" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 6, 16) == L"67 one mo" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 7, 16) == L"7 one mor" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 8, 16) == L" one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 9, 16) == L"one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 10, 16) == L"ne more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 11, 16) == L"e more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 12, 16) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 13, 16) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 14, 16) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 15, 16) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 16, 16) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 17, 16) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 18, 16) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 19, 16) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 20, 16) == L"more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 21, 16) == L"ore" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 22, 16) == L"re" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 23, 16) == L"e" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 24, 16) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 0, 17) == L"1234567 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 1, 17) == L"1234567 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 2, 17) == L"234567 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 3, 17) == L"34567 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 4, 17) == L"4567 one m" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 5, 17) == L"567 one mo" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 6, 17) == L"67 one mor" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 7, 17) == L"7 one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 8, 17) == L" one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 9, 17) == L"one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 10, 17) == L"ne more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 11, 17) == L"e more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 12, 17) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 13, 17) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 14, 17) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 15, 17) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 16, 17) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 17, 17) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 18, 17) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 19, 17) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 20, 17) == L"more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 21, 17) == L"ore" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 22, 17) == L"re" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 23, 17) == L"e" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 24, 17) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 0, 18) == L"1234567 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 1, 18) == L"1234567 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 2, 18) == L"234567 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 3, 18) == L"34567 one m" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 4, 18) == L"4567 one mo" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 5, 18) == L"567 one mor" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 6, 18) == L"67 one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 7, 18) == L"7 one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 8, 18) == L" one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 9, 18) == L"one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 10, 18) == L"ne more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 11, 18) == L"e more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 12, 18) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 13, 18) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 14, 18) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 15, 18) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 16, 18) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 17, 18) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 18, 18) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 19, 18) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 20, 18) == L"more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 21, 18) == L"ore" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 22, 18) == L"re" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 23, 18) == L"e" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 24, 18) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 0, 19) == L"1234567 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 1, 19) == L"1234567 one " );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 2, 19) == L"234567 one m" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 3, 19) == L"34567 one mo" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 4, 19) == L"4567 one mor" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 5, 19) == L"567 one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 6, 19) == L"67 one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 7, 19) == L"7 one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 8, 19) == L" one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 9, 19) == L"one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 10, 19) == L"ne more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 11, 19) == L"e more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 12, 19) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 13, 19) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 14, 19) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 15, 19) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 16, 19) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 17, 19) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 18, 19) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 19, 19) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 20, 19) == L"more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 21, 19) == L"ore" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 22, 19) == L"re" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 23, 19) == L"e" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 24, 19) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 0, 20) == L"1234567 one m" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 1, 20) == L"1234567 one m" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 2, 20) == L"234567 one mo" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 3, 20) == L"34567 one mor" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 4, 20) == L"4567 one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 5, 20) == L"567 one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 6, 20) == L"67 one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 7, 20) == L"7 one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 8, 20) == L" one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 9, 20) == L"one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 10, 20) == L"ne more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 11, 20) == L"e more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 12, 20) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 13, 20) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 14, 20) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 15, 20) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 16, 20) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 17, 20) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 18, 20) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 19, 20) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 20, 20) == L"more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 21, 20) == L"ore" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 22, 20) == L"re" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 23, 20) == L"e" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 24, 20) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 0, 21) == L"1234567 one mo" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 1, 21) == L"1234567 one mo" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 2, 21) == L"234567 one mor" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 3, 21) == L"34567 one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 4, 21) == L"4567 one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 5, 21) == L"567 one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 6, 21) == L"67 one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 7, 21) == L"7 one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 8, 21) == L" one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 9, 21) == L"one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 10, 21) == L"ne more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 11, 21) == L"e more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 12, 21) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 13, 21) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 14, 21) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 15, 21) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 16, 21) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 17, 21) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 18, 21) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 19, 21) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 20, 21) == L"more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 21, 21) == L"ore" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 22, 21) == L"re" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 23, 21) == L"e" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 24, 21) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 0, 22) == L"1234567 one mor" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 1, 22) == L"1234567 one mor" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 2, 22) == L"234567 one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 3, 22) == L"34567 one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 4, 22) == L"4567 one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 5, 22) == L"567 one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 6, 22) == L"67 one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 7, 22) == L"7 one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 8, 22) == L" one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 9, 22) == L"one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 10, 22) == L"ne more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 11, 22) == L"e more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 12, 22) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 13, 22) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 14, 22) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 15, 22) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 16, 22) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 17, 22) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 18, 22) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 19, 22) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 20, 22) == L"more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 21, 22) == L"ore" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 22, 22) == L"re" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 23, 22) == L"e" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 24, 22) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 0, 23) == L"1234567 one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 1, 23) == L"1234567 one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 2, 23) == L"234567 one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 3, 23) == L"34567 one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 4, 23) == L"4567 one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 5, 23) == L"567 one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 6, 23) == L"67 one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 7, 23) == L"7 one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 8, 23) == L" one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 9, 23) == L"one more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 10, 23) == L"ne more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 11, 23) == L"e more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 12, 23) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 13, 23) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 14, 23) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 15, 23) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 16, 23) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 17, 23) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 18, 23) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 19, 23) == L" more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 20, 23) == L"more" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 21, 23) == L"ore" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 22, 23) == L"re" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 23, 23) == L"e" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"1234567 one more", 24, 23) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"o\U0000031b\U00000323=\U00001ee3", 0, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"o\U0000031b\U00000323=\U00001ee3", 1, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"o\U0000031b\U00000323=\U00001ee3", 2, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"o\U0000031b\U00000323=\U00001ee3", 3, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"o\U0000031b\U00000323=\U00001ee3", 4, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"o\U0000031b\U00000323=\U00001ee3", 0, 1) == L"o\U0000031b\U00000323" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"o\U0000031b\U00000323=\U00001ee3", 1, 1) == L"o\U0000031b\U00000323" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"o\U0000031b\U00000323=\U00001ee3", 2, 1) == L"=" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"o\U0000031b\U00000323=\U00001ee3", 3, 1) == L"\U00001ee3" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"o\U0000031b\U00000323=\U00001ee3", 4, 1) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"o\U0000031b\U00000323=\U00001ee3", 0, 2) == L"o\U0000031b\U00000323=" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"o\U0000031b\U00000323=\U00001ee3", 1, 2) == L"o\U0000031b\U00000323=" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"o\U0000031b\U00000323=\U00001ee3", 2, 2) == L"=\U00001ee3" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"o\U0000031b\U00000323=\U00001ee3", 3, 2) == L"\U00001ee3" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"o\U0000031b\U00000323=\U00001ee3", 4, 2) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"o\U0000031b\U00000323=\U00001ee3", 0, 3) == L"o\U0000031b\U00000323=\U00001ee3" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"o\U0000031b\U00000323=\U00001ee3", 1, 3) == L"o\U0000031b\U00000323=\U00001ee3" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"o\U0000031b\U00000323=\U00001ee3", 2, 3) == L"=\U00001ee3" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"o\U0000031b\U00000323=\U00001ee3", 3, 3) == L"\U00001ee3" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"o\U0000031b\U00000323=\U00001ee3", 4, 3) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 0, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 1, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 2, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 3, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 4, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 5, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 6, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 7, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 8, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 9, 0) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 0, 1) == L"S" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 1, 1) == L"S" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 2, 1) == L"T" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 3, 1) == L"A" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 4, 1) == L"R" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 5, 1) == L"G" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 6, 1) == L"Λ̊" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 7, 1) == L"T" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 8, 1) == L"E" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 9, 1) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 0, 2) == L"ST" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 1, 2) == L"ST" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 2, 2) == L"TA" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 3, 2) == L"AR" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 4, 2) == L"RG" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 5, 2) == L"GΛ̊" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 6, 2) == L"Λ̊T" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 7, 2) == L"TE" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 8, 2) == L"E" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 9, 2) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 0, 3) == L"STA" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 1, 3) == L"STA" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 2, 3) == L"TAR" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 3, 3) == L"ARG" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 4, 3) == L"RGΛ̊" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 5, 3) == L"GΛ̊T" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 6, 3) == L"Λ̊TE" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 7, 3) == L"TE" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 8, 3) == L"E" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 9, 3) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 0, 4) == L"STAR" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 1, 4) == L"STAR" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 2, 4) == L"TARG" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 3, 4) == L"ARGΛ̊" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 4, 4) == L"RGΛ̊T" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 5, 4) == L"GΛ̊TE" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 6, 4) == L"Λ̊TE" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 7, 4) == L"TE" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 8, 4) == L"E" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 9, 4) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 0, 5) == L"STARG" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 1, 5) == L"STARG" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 2, 5) == L"TARGΛ̊" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 3, 5) == L"ARGΛ̊T" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 4, 5) == L"RGΛ̊TE" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 5, 5) == L"GΛ̊TE" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 6, 5) == L"Λ̊TE" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 7, 5) == L"TE" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 8, 5) == L"E" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 9, 5) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 0, 6) == L"STARGΛ̊" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 1, 6) == L"STARGΛ̊" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 2, 6) == L"TARGΛ̊T" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 3, 6) == L"ARGΛ̊TE" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 4, 6) == L"RGΛ̊TE" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 5, 6) == L"GΛ̊TE" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 6, 6) == L"Λ̊TE" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 7, 6) == L"TE" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 8, 6) == L"E" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 9, 6) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 0, 7) == L"STARGΛ̊T" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 1, 7) == L"STARGΛ̊T" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 2, 7) == L"TARGΛ̊TE" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 3, 7) == L"ARGΛ̊TE" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 4, 7) == L"RGΛ̊TE" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 5, 7) == L"GΛ̊TE" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 6, 7) == L"Λ̊TE" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 7, 7) == L"TE" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 8, 7) == L"E" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 9, 7) == L"" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 0, 8) == L"STARGΛ̊TE" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 1, 8) == L"STARGΛ̊TE" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 2, 8) == L"TARGΛ̊TE" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 3, 8) == L"ARGΛ̊TE" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 4, 8) == L"RGΛ̊TE" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 5, 8) == L"GΛ̊TE" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 6, 8) == L"Λ̊TE" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 7, 8) == L"TE" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 8, 8) == L"E" );
CPPUNIT_ASSERT ( finalcut::getColumnSubString(L"STARGΛ̊TE", 9, 8) == L"" );
}
//----------------------------------------------------------------------
void FTermFunctionsTest::combiningCharacterTest()
{
// Leading zero-width characters
std::wstring combining = L"\U00000323\U00000300\U0000ff2f\n"; // [] [] [NL]
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 0) == -1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 1) == -1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 2) == 1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 3) == 1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 0) == -1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 1) == -1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 2) == -1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 3) == 1 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 0) == NOT_FOUND );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 1) == NOT_FOUND );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 2) == NOT_FOUND );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 3) == 2 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 4) == 3 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 0) == 2 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 1) == 2 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 2) == 3 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 3) == NOT_FOUND );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 4) == NOT_FOUND );
// Characters with separate and with combined diacritical marks
combining = L"u\U00000300=\U000000f9"; // u ` = ù
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 0) == 2 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 1) == -1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 2) == 1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 3) == 1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 4) == -1 ); // Position is outside the string
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 0) == -1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 1) == -1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 2) == 2 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 3) == 1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 4) == -1 ); // Position is outside the string
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 0) == NOT_FOUND );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 1) == 0 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 2) == 0 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 3) == 2 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 4) == 3 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 0) == 2 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 1) == 2 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 2) == 3 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 3) == NOT_FOUND );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 4) == NOT_FOUND );
combining = L"o\U0000031b\U00000323=\U00001ee3"; // o ‍̛ ‍̣ = ợ
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 0) == 3 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 1) == -1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 2) == -1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 3) == 1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 4) == 1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 0) == -1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 1) == -1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 2) == -1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 3) == 3 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 4) == 1 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 0) == NOT_FOUND );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 1) == 0 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 2) == 0 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 3) == 0 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 4) == 3 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 5) == 4 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 0) == 3 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 1) == 3 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 2) == 3 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 3) == 4 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 4) == NOT_FOUND );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 5) == NOT_FOUND );
// Many combination characters
combining = L"v" \
L"\U00000300\U0000032e\U00000368" \
L"\U00000364\U00000348\U0000034b"; // v ̀ ̮ ͨ ͤ ͈ ͋
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 0) == 7 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 1) == -1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 2) == -1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 3) == -1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 4) == -1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 5) == -1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 6) == -1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 0) == -1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 1) == -1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 2) == -1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 3) == -1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 4) == -1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 5) == -1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 6) == -1 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 0) == NOT_FOUND );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 1) == 0 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 2) == 0 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 3) == 0 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 4) == 0 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 5) == 0 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 6) == 0 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 7) == 0 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 0) == NOT_FOUND );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 1) == NOT_FOUND );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 2) == NOT_FOUND );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 3) == NOT_FOUND );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 4) == NOT_FOUND );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 5) == NOT_FOUND );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 6) == NOT_FOUND );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 7) == NOT_FOUND );
// Trailing uncombined zero-width characters
combining = L"a\t\U00000300\U00000323"; // a [Tab] [] []
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 0) == 1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 1) == 1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 2) == -1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 3) == -1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 0) == -1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 1) == 1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 2) == -1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 3) == -1 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 0) == NOT_FOUND );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 1) == 0 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 2) == 1 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 3) == 1 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 4) == 1 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 0) == 1 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 1) == NOT_FOUND );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 2) == NOT_FOUND );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 3) == NOT_FOUND );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 4) == NOT_FOUND );
// Thai (ISO 10646-1 - UCS implementation level 2)
combining = L"๏ แผ่นดินฮั่นเสื่อมโทรมแสนสังเวช";
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 0) == 1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 1) == 1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 2) == 1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 3) == 2 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 4) == -1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 5) == 1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 6) == 2 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 7) == -1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 8) == 1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 9) == 3 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 10) == -1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 11) == -1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 12) == 1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 13) == 1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 14) == 3 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 15) == -1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 16) == -1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 17) == 1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 18) == 1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 19) == 1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 20) == 1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 21) == 1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 22) == 1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 23) == 1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 24) == 1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 25) == 1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 26) == 2 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 27) == -1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 28) == 1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 29) == 1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 30) == 1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 31) == 1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 0) == -1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 1) == 1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 2) == 1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 3) == 1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 4) == -1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 5) == 2 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 6) == 1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 7) == -1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 8) == 2 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 9) == 1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 10) == -1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 11) == -1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 12) == 3 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 13) == 1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 14) == 1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 15) == -1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 16) == -1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 17) == 3 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 18) == 1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 19) == 1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 20) == 1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 21) == 1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 22) == 1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 23) == 1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 24) == 1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 25) == 1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 26) == 1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 27) == -1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 28) == 2 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 29) == 1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 30) == 1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 31) == 1 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 0) == NOT_FOUND );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 1) == 0 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 2) == 1 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 3) == 2 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 4) == 3 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 5) == 3 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 6) == 5 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 7) == 6 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 8) == 6 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 9) == 8 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 10) == 9 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 11) == 9 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 12) == 9 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 13) == 12 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 14) == 13 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 15) == 14 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 16) == 14 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 17) == 14 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 18) == 17 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 19) == 18 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 20) == 19 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 21) == 20 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 22) == 21 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 23) == 22 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 24) == 23 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 25) == 24 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 26) == 25 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 27) == 26 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 28) == 26 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 29) == 28 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 30) == 29 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 31) == 30 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 32) == 31 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 0) == 1 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 1) == 2 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 2) == 3 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 3) == 5 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 4) == 5 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 5) == 6 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 6) == 8 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 7) == 8 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 8) == 9 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 9) == 12 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 10) == 12 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 11) == 12 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 12) == 13 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 13) == 14 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 14) == 17 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 15) == 17 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 16) == 17 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 17) == 18 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 18) == 19 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 19) == 20 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 20) == 21 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 21) == 22 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 22) == 23 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 23) == 24 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 24) == 25 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 25) == 26 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 26) == 28 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 27) == 28 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 28) == 29 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 29) == 30 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 30) == 31 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 31) == NOT_FOUND );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 32) == NOT_FOUND );
// Devanagari script (ISO 10646-1 - UCS implementation level 2)
combining = L"पन्ह पन्ह त्र र्च कृकृ ड्ड न्ह";
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 0) == 1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 1) == 2 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 2) == -1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 3) == 1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 4) == 1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 5) == 1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 6) == 2 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 7) == -1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 8) == 1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 9) == 1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 10) == 2 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 11) == -1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 12) == 1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 13) == 1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 14) == 2 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 15) == -1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 16) == 1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 17) == 1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 18) == 2 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 19) == -1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 20) == 2 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 21) == -1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 22) == 1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 23) == 2 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 24) == -1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 25) == 1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 26) == 1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 27) == 2 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 28) == -1 );
CPPUNIT_ASSERT ( finalcut::getCharLength(combining, 29) == 1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 0) == -1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 1) == 1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 2) == -1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 3) == 2 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 4) == 1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 5) == 1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 6) == 1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 7) == -1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 8) == 2 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 9) == 1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 10) == 1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 11) == -1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 12) == 2 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 13) == 1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 14) == 1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 15) == -1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 16) == 2 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 17) == 1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 18) == 1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 19) == -1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 20) == 2 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 21) == -1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 22) == 2 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 23) == 1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 24) == -1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 25) == 2 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 26) == 1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 27) == 1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 28) == -1 );
CPPUNIT_ASSERT ( finalcut::getPrevCharLength(combining, 29) == 2 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 0) == NOT_FOUND );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 1) == 0 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 2) == 1 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 3) == 1 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 4) == 3 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 5) == 4 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 6) == 5 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 7) == 6 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 8) == 6 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 9) == 8 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 10) == 9 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 11) == 10 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 12) == 10 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 13) == 12 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 14) == 13 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 15) == 14 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 16) == 14 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 17) == 16 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 18) == 17 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 19) == 18 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 20) == 18 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 21) == 20 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 22) == 20 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 23) == 22 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 24) == 23 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 25) == 23 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 26) == 25 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 27) == 26 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 28) == 27 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 29) == 27 );
CPPUNIT_ASSERT ( finalcut::searchLeftCharBegin(combining, 30) == 29 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 0) == 1 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 1) == 3 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 2) == 3 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 3) == 4 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 4) == 5 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 5) == 6 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 6) == 8 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 7) == 8 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 8) == 9 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 9) == 10 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 10) == 12 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 11) == 12 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 12) == 13 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 13) == 14 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 14) == 16 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 15) == 16 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 16) == 17 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 17) == 18 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 18) == 20 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 19) == 20 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 20) == 22 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 21) == 22 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 22) == 23 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 23) == 25 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 24) == 25 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 25) == 26 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 26) == 27 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 27) == 29 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 28) == 29 );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 29) == NOT_FOUND );
CPPUNIT_ASSERT ( finalcut::searchRightCharBegin(combining, 30) == NOT_FOUND );
}
//----------------------------------------------------------------------
void FTermFunctionsTest::readCursorPosTest()
{
auto& fterm_data = finalcut::FTerm::getFTermData();
finalcut::FTermDetection detect;
fterm_data.setTermType("xterm");
detect.setTerminalDetection(true);
pid_t pid = forkConEmu();
if ( isConEmuChildProcess(pid) )
{
const finalcut::FPoint cursor_pos = finalcut::readCursorPos();
CPPUNIT_ASSERT ( cursor_pos.getX() == 80 );
CPPUNIT_ASSERT ( cursor_pos.getY() == 25 );
closeConEmuStdStreams();
exit(EXIT_SUCCESS);
}
else // Parent
{
// Start the terminal emulation
startConEmuTerminal (ConEmu::console::xterm);
if ( waitpid(pid, 0, WUNTRACED) != pid )
std::cerr << "waitpid error" << std::endl;
}
}
// Put the test suite in the registry
CPPUNIT_TEST_SUITE_REGISTRATION (FTermFunctionsTest);
// The general unit test main part
#include <main-test.inc>