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