17c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania/* -*- c++ -*- */ 27c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania/* 37c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania * Copyright (C) 2010 The Android Open Source Project 47c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania * All rights reserved. 57c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania * 67c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania * Redistribution and use in source and binary forms, with or without 77c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania * modification, are permitted provided that the following conditions 87c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania * are met: 97c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania * * Redistributions of source code must retain the above copyright 107c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania * notice, this list of conditions and the following disclaimer. 117c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania * * Redistributions in binary form must reproduce the above copyright 127c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania * notice, this list of conditions and the following disclaimer in 137c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania * the documentation and/or other materials provided with the 147c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania * distribution. 157c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania * 167c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 177c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 187c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 197c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 207c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 217c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 227c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 237c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 247c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 257c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 267c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 277c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania * SUCH DAMAGE. 287c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania */ 297c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania 307c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania#include "../include/iostream" 317c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania#ifndef ANDROID_ASTL_IOSTREAM__ 327c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania#error "Wrong header included!!" 337c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania#endif 347c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania#include "common.h" 35328cfeefa59a829fd8ae83ff1955c530a25b43ffNicolas Catania#include <limits> 3644d38f3d1ae0fd02030e259c4f93a265f91e96fcNicolas Catania#include <string> 377c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania 387c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catanianamespace android { 397c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania 407c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Cataniaclass A { 417c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania public: 427c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania A() { 437c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania mPassed = std::cout.precision() == 6; 447c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania } 457c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania static A mInstance; 467c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania bool mPassed; 477c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania}; 487c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas CataniaA A::mInstance; 497c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania 507c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Cataniabool testStaticInit() { 517c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania EXPECT_TRUE(A::mInstance.mPassed); 527c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania return true; 537c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania} 547c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania 557c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Cataniabool testOstream() { 567c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania EXPECT_TRUE(std::cout.precision() == 6); 577c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania EXPECT_TRUE(std::cerr.precision() == 6); 587c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania 597c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania std::cout.precision(20); 607c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania std::cerr.precision(20); 617c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania 627c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania EXPECT_TRUE(std::cout.precision() == 20); 637c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania EXPECT_TRUE(std::cerr.precision() == 20); 647c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania // reset back to the default value. 657c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania std::cout.precision(6); 667c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania std::cerr.precision(6); 677c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania return true; 687c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania} 697c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania 70d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Cataniabool testCoutCerr() { 71d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania std::cout << "Hi from stdout\n"; 72d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania std::cerr << "Hi from stderr\n"; 73d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania return true; 74d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania} 75d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania 76e5b7af0c3c5af401b46d34987cbd8a65f45454deNicolas Cataniabool testManip() { 77e5b7af0c3c5af401b46d34987cbd8a65f45454deNicolas Catania std::cout << "line 1" << std::endl 78e5b7af0c3c5af401b46d34987cbd8a65f45454deNicolas Catania << " a nul char |" << std::ends << std::flush << "| in line 2."; 79e5b7af0c3c5af401b46d34987cbd8a65f45454deNicolas Catania return true; 80e5b7af0c3c5af401b46d34987cbd8a65f45454deNicolas Catania} 81e5b7af0c3c5af401b46d34987cbd8a65f45454deNicolas Catania 8244d38f3d1ae0fd02030e259c4f93a265f91e96fcNicolas Cataniabool testOutputFormat() { 8344d38f3d1ae0fd02030e259c4f93a265f91e96fcNicolas Catania using std::endl; 8444d38f3d1ae0fd02030e259c4f93a265f91e96fcNicolas Catania using std::cout; 85328cfeefa59a829fd8ae83ff1955c530a25b43ffNicolas Catania using std::numeric_limits; 86328cfeefa59a829fd8ae83ff1955c530a25b43ffNicolas Catania cout << endl << "Int: " << numeric_limits<int>::max() << endl; 87328cfeefa59a829fd8ae83ff1955c530a25b43ffNicolas Catania cout << "Negative int: " << numeric_limits<int>::min() << endl; 88328cfeefa59a829fd8ae83ff1955c530a25b43ffNicolas Catania cout << "Unsigned int: " << numeric_limits<unsigned int>::max() << endl; 89328cfeefa59a829fd8ae83ff1955c530a25b43ffNicolas Catania cout << "Long: " << numeric_limits<long>::max() << endl; 90328cfeefa59a829fd8ae83ff1955c530a25b43ffNicolas Catania cout << "Negative long: " << numeric_limits<long>::min() << endl; 91328cfeefa59a829fd8ae83ff1955c530a25b43ffNicolas Catania cout << "Unsigned long int: " << numeric_limits<unsigned long>::max() << endl; 92328cfeefa59a829fd8ae83ff1955c530a25b43ffNicolas Catania cout << "Long long: " << numeric_limits<long long>::max() << endl; 93328cfeefa59a829fd8ae83ff1955c530a25b43ffNicolas Catania cout << "Negative long long: " << numeric_limits<long long>::min() << endl; 94328cfeefa59a829fd8ae83ff1955c530a25b43ffNicolas Catania cout << "Unsigned long long: " << numeric_limits<unsigned long long>::max() << endl; 95328cfeefa59a829fd8ae83ff1955c530a25b43ffNicolas Catania 96328cfeefa59a829fd8ae83ff1955c530a25b43ffNicolas Catania cout.precision(std::numeric_limits<double>::digits10); 97328cfeefa59a829fd8ae83ff1955c530a25b43ffNicolas Catania cout << "Double: " << numeric_limits<double>::max() << endl; 98328cfeefa59a829fd8ae83ff1955c530a25b43ffNicolas Catania cout << "Negative double: " << numeric_limits<double>::min() << endl; 99328cfeefa59a829fd8ae83ff1955c530a25b43ffNicolas Catania cout << "Float: " << numeric_limits<float>::max() << endl; 100328cfeefa59a829fd8ae83ff1955c530a25b43ffNicolas Catania cout << "Negative float: " << numeric_limits<float>::min() << endl; 101328cfeefa59a829fd8ae83ff1955c530a25b43ffNicolas Catania 10244d38f3d1ae0fd02030e259c4f93a265f91e96fcNicolas Catania cout << "Void *: " << static_cast<void*>(&std::cout) << endl; 103328cfeefa59a829fd8ae83ff1955c530a25b43ffNicolas Catania cout << "NULL *: " << static_cast<void*>(0) << endl; 104328cfeefa59a829fd8ae83ff1955c530a25b43ffNicolas Catania cout << "bool: " << true << " " << false << endl; 105328cfeefa59a829fd8ae83ff1955c530a25b43ffNicolas Catania cout << "char: " << 'A' << endl; 10644d38f3d1ae0fd02030e259c4f93a265f91e96fcNicolas Catania cout << "string: " << std::string("hello world") << endl; 10744d38f3d1ae0fd02030e259c4f93a265f91e96fcNicolas Catania return true; 10844d38f3d1ae0fd02030e259c4f93a265f91e96fcNicolas Catania} 1097c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania} // namespace android 1107c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania 1117c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Cataniaint main(int argc, char **argv){ 1127c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania FAIL_UNLESS(testStaticInit); 1137c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania FAIL_UNLESS(testOstream); 114d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania FAIL_UNLESS(testCoutCerr); 115e5b7af0c3c5af401b46d34987cbd8a65f45454deNicolas Catania FAIL_UNLESS(testManip); 11644d38f3d1ae0fd02030e259c4f93a265f91e96fcNicolas Catania FAIL_UNLESS(testOutputFormat); 1177c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania return kPassed; 1187c0a09a5022e5fb75b7a7dd6d68d4f811f6c462bNicolas Catania} 119