184011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania/*
284011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania * Copyright (C) 2009 The Android Open Source Project
384011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania * All rights reserved.
484011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania *
584011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania * Redistribution and use in source and binary forms, with or without
684011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania * modification, are permitted provided that the following conditions
784011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania * are met:
884011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania *  * Redistributions of source code must retain the above copyright
984011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania *    notice, this list of conditions and the following disclaimer.
1084011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania *  * Redistributions in binary form must reproduce the above copyright
1184011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania *    notice, this list of conditions and the following disclaimer in
1284011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania *    the documentation and/or other materials provided with the
1384011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania *    distribution.
1484011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania *
1584011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
1684011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
1784011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
1884011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
1984011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
2084011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
2184011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
2284011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
2384011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
2484011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
2584011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
2684011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania * SUCH DAMAGE.
2784011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania */
2884011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania
2984011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania#include <ctime>
30b381ead492251a797d2df4b260cb01eb1f64cfadDavid 'Digit' Turner#if defined BIONIC && !defined BIONIC_LIBSTDCPP_INCLUDE_CTIME__
311aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania#error "Wrong header file included!!"
321aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania#endif
331aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania
3484011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania
3584011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catanianamespace {
3684011c7599ab8a4463cefda5e8ce8a59987640d8Niko Cataniaconst int kPassed = 0;
3784011c7599ab8a4463cefda5e8ce8a59987640d8Niko Cataniaconst int kFailed = 1;
3884011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania#define FAIL_UNLESS(f) if (!android::f()) return kFailed;
3984011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania}  // anonymous namespace
4084011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania
4184011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catanianamespace android
4284011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania{
4384011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania#ifndef CLOCKS_PER_SEC
4484011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania#error "CLOCKS_PER_SEC must be a macro"
4584011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania#endif
4684011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania
4784011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania#ifdef clock
4884011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania#error "should be a real function"
4984011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania#endif
5084011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania#ifdef difftime
5184011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania#error "should be a real function"
5284011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania#endif
5384011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania#ifdef mktime
5484011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania#error "should be a real function"
5584011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania#endif
5684011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania#ifdef time
5784011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania#error "should be a real function"
5884011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania#endif
5984011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania#ifdef asctime
6084011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania#error "should be a real function"
6184011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania#endif
6284011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania#ifdef ctime
6384011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania#error "should be a real function"
6484011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania#endif
6584011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania#ifdef gmtime
6684011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania#error "should be a real function"
6784011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania#endif
6884011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania#ifdef localtime
6984011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania#error "should be a real function"
7084011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania#endif
7184011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania#ifdef strftime
7284011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania#error "should be a real function"
7384011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania#endif
7484011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania
7584011c7599ab8a4463cefda5e8ce8a59987640d8Niko Cataniausing std::clock;
7684011c7599ab8a4463cefda5e8ce8a59987640d8Niko Cataniausing std::difftime;
7784011c7599ab8a4463cefda5e8ce8a59987640d8Niko Cataniausing std::mktime;
7884011c7599ab8a4463cefda5e8ce8a59987640d8Niko Cataniausing std::time;
7984011c7599ab8a4463cefda5e8ce8a59987640d8Niko Cataniausing std::asctime;
8084011c7599ab8a4463cefda5e8ce8a59987640d8Niko Cataniausing std::ctime;
8184011c7599ab8a4463cefda5e8ce8a59987640d8Niko Cataniausing std::gmtime;
8284011c7599ab8a4463cefda5e8ce8a59987640d8Niko Cataniausing std::localtime;
8384011c7599ab8a4463cefda5e8ce8a59987640d8Niko Cataniausing std::strftime;
8484011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania
8584011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania// Check various types are declared in the std namespace.
8684011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania// This is a compilation test.
8784011c7599ab8a4463cefda5e8ce8a59987640d8Niko Cataniabool testTypesStd()
8884011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania{
8984011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania    volatile std::clock_t clock;
9084011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania    volatile std::time_t time;
9184011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania    volatile std::tm better_time;
9284011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania    return true;
9384011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania}
9484011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania
9584011c7599ab8a4463cefda5e8ce8a59987640d8Niko Cataniabool testGetClock()
9684011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania{
9784011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania    volatile std::clock_t clock1 = std::clock();
9884011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania    volatile std::clock_t clock2 = std::clock();
9984011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania    if (clock2 < clock1) return false;
10084011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania    return true;
10184011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania}
10284011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania
10384011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania}  // namespace android
10484011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania
10584011c7599ab8a4463cefda5e8ce8a59987640d8Niko Cataniaint main(int argc, char **argv)
10684011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania{
10784011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania    FAIL_UNLESS(testTypesStd);
10884011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania    FAIL_UNLESS(testGetClock);
10984011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania    return kPassed;
11084011c7599ab8a4463cefda5e8ce8a59987640d8Niko Catania}
111