| /************************************************************************ |
| * |
| * 22.locale.cons.stdcxx-485.cpp |
| * |
| * test exercising the thread safety of locale ctors |
| * |
| * $Id$ |
| * |
| *************************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed |
| * with this work for additional information regarding copyright |
| * ownership. The ASF licenses this file to you under the Apache |
| * License, Version 2.0 (the "License"); you may not use this file |
| * except in compliance with the License. You may obtain a copy of |
| * the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or |
| * implied. See the License for the specific language governing |
| * permissions and limitations under the License. |
| * |
| **************************************************************************/ |
| |
| #include <cassert> |
| #include <cstring> |
| #include <locale> |
| |
| #include <rw_locale.h> |
| #include <rw_driver.h> |
| |
| |
| static int |
| run_test (int, char**) |
| { |
| // obtain a NUL-separated list of installed locales |
| const char* const names = rw_locales (); |
| |
| if (0 == names || '\0' == *names) |
| return 0; |
| |
| // repeatedly create a large set of unique named locale objects |
| for (int j = 0; j != 2; ++j) { |
| std::locale locales [64]; |
| |
| std::size_t i = 0; |
| |
| for (const char *pn = names; *pn; ++i, pn += std::strlen (pn) + 1) { |
| if (i == sizeof locales / sizeof *locales) |
| break; |
| |
| locales [i] = std::locale (pn); |
| } |
| |
| i = 0; |
| |
| for (const char *pn = names; *pn; ++i, pn += std::strlen (pn) + 1) { |
| if (i == sizeof locales / sizeof *locales) |
| break; |
| |
| rw_assert (std::has_facet<std::collate<char> >(locales [i]), |
| 0, __LINE__, |
| "std::has_facet<std::collate<char> >(locales(#s))", |
| pn); |
| } |
| } |
| |
| return 0; |
| } |
| |
| |
| int main (int argc, char* argv[]) |
| { |
| return rw_test (argc, argv, __FILE__, |
| "lib.locale.cons", |
| "STDCXX-485", |
| run_test, |
| "", |
| (void*)0); |
| } |