# Copyright (C) 2016 and later: Unicode, Inc. and others.
# License & terms of use: http://www.unicode.org/copyright.html
# *******************************************************************************
# * Copyright (C) 2007-2009, International Business Machines
# * Corporation and others.  All Rights Reserved.
# *******************************************************************************
#
# test1.ucm
#
# Test file for MBCS conversion with single-byte codepage data.
# BMP-only, to test optimized code path.
# Includes extensions.

<code_set_name>     "test1bmp"
<mb_cur_max>        1
<mb_cur_min>        1
<uconv_class>       "MBCS"
<subchar>           \xff
<icu:state>         0, 5-9, c:0.s, ff

CHARMAP

# fromUnicode result is zero byte from other than U+0000
<U0040>     \x00 |0
<U0061>     \x00 |1

# nothing special
<U0065>     \x05 |0

# toUnicode result is fallback direct
<U0066>     \x06 |3

#unassigned \x09

# 1:2 mapping
<U0074>     \x07\x09 |0

# 2:1 mapping
<U0075><U0076> \x08 |0

END CHARMAP
