diff --git a/Lib/test/test__locale.py b/Lib/test/test__locale.py
index afcb926..88f2c44 100644
--- a/Lib/test/test__locale.py
+++ b/Lib/test/test__locale.py
@@ -22,7 +22,7 @@
     'da_DK', 'nn_NO', 'cs_CZ', 'de_LU', 'es_BO', 'sq_AL', 'sk_SK', 'fr_CH',
     'de_DE', 'sr_YU', 'br_FR', 'nl_BE', 'sv_FI', 'pl_PL', 'fr_CA', 'fo_FO',
     'bs_BA', 'fr_LU', 'kl_GL', 'fa_IR', 'de_BE', 'sv_SE', 'it_CH', 'uk_UA',
-    'eu_ES', 'vi_VN', 'af_ZA', 'nb_NO', 'en_DK', 'tg_TJ', 'en_US',
+    'eu_ES', 'vi_VN', 'af_ZA', 'nb_NO', 'en_DK', 'tg_TJ', 'ps_AF.UTF-8', 'en_US',
     'es_ES.ISO8859-1', 'fr_FR.ISO8859-15', 'ru_RU.KOI8-R', 'ko_KR.eucKR']
 
 # Workaround for MSVC6(debug) crash bug
@@ -35,7 +35,12 @@
 # List known locale values to test against when available.
 # Dict formatted as ``<locale> : (<decimal_point>, <thousands_sep>)``.  If a
 # value is not known, use '' .
-known_numerics = {'fr_FR' : (',', ''), 'en_US':('.', ',')}
+known_numerics = {
+    'en_US': ('.', ','),
+    'fr_FR' : (',', ' '),
+    'de_DE' : (',', '.'),
+    'ps_AF.UTF-8' : ('\xd9\xab', '\xd9\xac'),
+}
 
 class _LocaleTests(unittest.TestCase):
 
@@ -64,10 +69,12 @@
                                     calc_value, known_value,
                                     calc_type, data_type, set_locale,
                                     used_locale))
+            return True
 
     @unittest.skipUnless(nl_langinfo, "nl_langinfo is not available")
     def test_lc_numeric_nl_langinfo(self):
         # Test nl_langinfo against known values
+        tested = False
         for loc in candidate_locales:
             try:
                 setlocale(LC_NUMERIC, loc)
@@ -75,21 +82,30 @@
                 continue
             for li, lc in ((RADIXCHAR, "decimal_point"),
                             (THOUSEP, "thousands_sep")):
-                self.numeric_tester('nl_langinfo', nl_langinfo(li), lc, loc)
+                if self.numeric_tester('nl_langinfo', nl_langinfo(li), lc, loc):
+                    tested = True
+        if not tested:
+            self.skipTest('no suitable locales')
 
     def test_lc_numeric_localeconv(self):
         # Test localeconv against known values
+        tested = False
         for loc in candidate_locales:
             try:
                 setlocale(LC_NUMERIC, loc)
             except Error:
                 continue
+            formatting = localeconv()
             for lc in ("decimal_point", "thousands_sep"):
-                self.numeric_tester('localeconv', localeconv()[lc], lc, loc)
+                if self.numeric_tester('localeconv', formatting[lc], lc, loc):
+                    tested = True
+        if not tested:
+            self.skipTest('no suitable locales')
 
     @unittest.skipUnless(nl_langinfo, "nl_langinfo is not available")
     def test_lc_numeric_basic(self):
         # Test nl_langinfo against localeconv
+        tested = False
         for loc in candidate_locales:
             try:
                 setlocale(LC_NUMERIC, loc)
@@ -108,10 +124,14 @@
                                 "(set to %s, using %s)" % (
                                                 nl_radixchar, li_radixchar,
                                                 loc, set_locale))
+                tested = True
+        if not tested:
+            self.skipTest('no suitable locales')
 
     def test_float_parsing(self):
         # Bug #1391872: Test whether float parsing is okay on European
         # locales.
+        tested = False
         for loc in candidate_locales:
             try:
                 setlocale(LC_NUMERIC, loc)
@@ -129,6 +149,10 @@
             if localeconv()['decimal_point'] != '.':
                 self.assertRaises(ValueError, float,
                                   localeconv()['decimal_point'].join(['1', '23']))
+            tested = True
+        if not tested:
+            self.skipTest('no suitable locales')
+
 
 def test_main():
     run_unittest(_LocaleTests)
diff --git a/Lib/test/test_decimal.py b/Lib/test/test_decimal.py
index de309ba..3b3d9d1 100644
--- a/Lib/test/test_decimal.py
+++ b/Lib/test/test_decimal.py
@@ -32,7 +32,8 @@
 from decimal import *
 import numbers
 from test.test_support import (run_unittest, run_doctest, requires_unicode, u,
-                               is_resource_enabled, check_py3k_warnings)
+                               is_resource_enabled, check_py3k_warnings,
+                               run_with_locale)
 import random
 try:
     import threading
@@ -905,6 +906,23 @@
         self.assertEqual(get_fmt(123456, crazy, '012n'), '00-01-2345-6')
         self.assertEqual(get_fmt(123456, crazy, '013n'), '000-01-2345-6')
 
+    @run_with_locale('LC_ALL', 'ps_AF.UTF-8')
+    def test_wide_char_separator_decimal_point(self):
+        # locale with wide char separator and decimal point
+        import locale
+
+        decimal_point = locale.localeconv()['decimal_point']
+        thousands_sep = locale.localeconv()['thousands_sep']
+        if decimal_point != '\xd9\xab':
+            self.skipTest('inappropriate decimal point separator'
+                          '({!r} not {!r})'.format(decimal_point, '\xd9\xab'))
+        if thousands_sep != '\xd9\xac':
+            self.skipTest('inappropriate thousands separator'
+                          '({!r} not {!r})'.format(thousands_sep, '\xd9\xac'))
+
+        self.assertEqual(format(Decimal('100000000.123'), 'n'),
+                         '100\xd9\xac000\xd9\xac000\xd9\xab123')
+
 
 class DecimalArithmeticOperatorsTest(unittest.TestCase):
     '''Unit tests for all arithmetic operators, binary and unary.'''
