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