blob: 9a3a538abe4795c328f953cca0e79224a50c194d [file] [log] [blame]
// 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 <stdlib.h>
#include <stdio.h>
#include <iostream>
#include "testutil/gtest-util.h"
#include "util/pretty-printer.h"
#include "common/names.h"
namespace impala {
TEST(PrettyPrinterTest, Unit) {
// Note no restriction to 2 decimal places with UNIT < 1000.
EXPECT_EQ(PrettyPrinter::Print(1.2345678f, TUnit::UNIT), "1.234568");
EXPECT_EQ(PrettyPrinter::Print(1, TUnit::UNIT), "1");
EXPECT_EQ(PrettyPrinter::Print("string", TUnit::UNIT), "string");
EXPECT_EQ(PrettyPrinter::Print(1000, TUnit::UNIT), "1.00K");
EXPECT_EQ(PrettyPrinter::Print(1000 * 1000, TUnit::UNIT), "1.00M");
EXPECT_EQ(PrettyPrinter::Print(1000 * 1000 * 1000, TUnit::UNIT), "1.00B");
}
TEST(PrettyPrinterTest, UnitPerSecond) {
EXPECT_EQ(PrettyPrinter::Print(1.2345678f, TUnit::UNIT_PER_SECOND), "1.23 /sec");
EXPECT_EQ(PrettyPrinter::Print(1, TUnit::UNIT_PER_SECOND), "1.00 /sec");
EXPECT_EQ(PrettyPrinter::Print("string", TUnit::UNIT_PER_SECOND), "string");
EXPECT_EQ(PrettyPrinter::Print(1000, TUnit::UNIT_PER_SECOND), "1.00 K/sec");
EXPECT_EQ(PrettyPrinter::Print(1000 * 1000, TUnit::UNIT_PER_SECOND),
"1.00 M/sec");
EXPECT_EQ(PrettyPrinter::Print(1000 * 1000 * 1000, TUnit::UNIT_PER_SECOND),
"1.00 B/sec");
}
TEST(PrettyPrinterTest, CpuTicks) {
EXPECT_EQ(PrettyPrinter::Print(1000, TUnit::CPU_TICKS), "1.00K clock cycles");
EXPECT_EQ(PrettyPrinter::Print(1500, TUnit::CPU_TICKS), "1.50K clock cycles");
EXPECT_EQ(PrettyPrinter::Print(1000.1, TUnit::CPU_TICKS), "1.00K clock cycles");
}
TEST(PrettyPrinterTest, Bytes) {
EXPECT_EQ(PrettyPrinter::Print(1.2345678f, TUnit::BYTES), "1.23 B");
EXPECT_EQ(PrettyPrinter::Print(1, TUnit::BYTES), "1.00 B");
EXPECT_EQ(PrettyPrinter::Print(1024, TUnit::BYTES), "1.00 KB");
EXPECT_EQ(PrettyPrinter::Print(1024 * 1024, TUnit::BYTES), "1.00 MB");
EXPECT_EQ(PrettyPrinter::Print(1024 * 1024 * 1024, TUnit::BYTES), "1.00 GB");
// Negative values
EXPECT_EQ(PrettyPrinter::Print(-2, TUnit::BYTES), "-2.00 B");
EXPECT_EQ(PrettyPrinter::Print(-1024, TUnit::BYTES), "-1.00 KB");
EXPECT_EQ(PrettyPrinter::Print(-1024 * 1024, TUnit::BYTES), "-1.00 MB");
EXPECT_EQ(PrettyPrinter::Print(-1024 * 1024 * 1024, TUnit::BYTES), "-1.00 GB");
EXPECT_EQ(PrettyPrinter::Print(1536, TUnit::BYTES), "1.50 KB");
EXPECT_EQ(PrettyPrinter::Print(1536.0, TUnit::BYTES), "1.50 KB");
// Units are ignored for strings
EXPECT_EQ(PrettyPrinter::Print("string", TUnit::BYTES), "string");
}
TEST(PrettyPrinterTest, BytesPerSecond) {
EXPECT_EQ(PrettyPrinter::Print(1.2345678f, TUnit::BYTES_PER_SECOND),
"1.23 B/sec");
EXPECT_EQ(PrettyPrinter::Print(1, TUnit::BYTES_PER_SECOND), "1.00 B/sec");
EXPECT_EQ(PrettyPrinter::Print(1024, TUnit::BYTES_PER_SECOND), "1.00 KB/sec");
EXPECT_EQ(PrettyPrinter::Print(1024 * 1024, TUnit::BYTES_PER_SECOND),
"1.00 MB/sec");
EXPECT_EQ(PrettyPrinter::Print(1024 * 1024 * 1024, TUnit::BYTES_PER_SECOND),
"1.00 GB/sec");
EXPECT_EQ(PrettyPrinter::Print(1536, TUnit::BYTES_PER_SECOND), "1.50 KB/sec");
EXPECT_EQ(PrettyPrinter::Print(1536.0, TUnit::BYTES_PER_SECOND), "1.50 KB/sec");
}
TEST(PrettyPrinterTest, Seconds) {
EXPECT_EQ(PrettyPrinter::Print(0.00001, TUnit::TIME_S), "0ms");
EXPECT_EQ(PrettyPrinter::Print(0.0001, TUnit::TIME_S), "0ms");
EXPECT_EQ(PrettyPrinter::Print(0.021, TUnit::TIME_S), "21ms");
EXPECT_EQ(PrettyPrinter::Print(0.31, TUnit::TIME_S), "310ms");
EXPECT_EQ(PrettyPrinter::Print(0.1, TUnit::TIME_S), "100ms");
EXPECT_EQ(PrettyPrinter::Print(1.5, TUnit::TIME_S), "1s500ms");
EXPECT_EQ(PrettyPrinter::Print(60, TUnit::TIME_S), "1m");
EXPECT_EQ(PrettyPrinter::Print(60 * 60, TUnit::TIME_S), "1h");
EXPECT_EQ(PrettyPrinter::Print(60 * 60 * 24, TUnit::TIME_S), "24h");
EXPECT_EQ(PrettyPrinter::Print(1000, TUnit::TIME_S), "16m40s");
// Only three decimal places of precision are supported for seconds.
EXPECT_EQ(PrettyPrinter::Print(1.5009, TUnit::TIME_S), "1s500ms");
EXPECT_EQ(PrettyPrinter::Print(12345, TUnit::TIME_S), "3h25m");
EXPECT_EQ(PrettyPrinter::Print(1.23456789123, TUnit::TIME_S), "1s234ms");
EXPECT_EQ(PrettyPrinter::Print(12345.67, TUnit::TIME_S), "3h25m");
EXPECT_EQ(PrettyPrinter::Print(1234567, TUnit::TIME_S), "342h56m");
EXPECT_EQ(PrettyPrinter::Print(1234567.8989, TUnit::TIME_S), "342h56m");
EXPECT_EQ(PrettyPrinter::Print(123456789, TUnit::TIME_S), "34293h33m");
EXPECT_EQ(PrettyPrinter::Print(2147483647, TUnit::TIME_S), "596523h14m");
EXPECT_EQ(PrettyPrinter::Print(123823456789, TUnit::TIME_S), "34395404h39m");
}
TEST(PrettyPrinterTest, NanoSeconds) {
EXPECT_EQ(PrettyPrinter::Print(0.00001, TUnit::TIME_NS), "0.000ns");
EXPECT_EQ(PrettyPrinter::Print(0.0001, TUnit::TIME_NS), "0.000ns");
EXPECT_EQ(PrettyPrinter::Print(0.021, TUnit::TIME_NS), "0.021ns");
EXPECT_EQ(PrettyPrinter::Print(0.31, TUnit::TIME_NS), "0.310ns");
EXPECT_EQ(PrettyPrinter::Print(0.1, TUnit::TIME_NS), "0.100ns");
EXPECT_EQ(PrettyPrinter::Print(1, TUnit::TIME_NS), "1.000ns");
EXPECT_EQ(PrettyPrinter::Print(123.4, TUnit::TIME_NS), "123.400ns");
EXPECT_EQ(PrettyPrinter::Print(1234.9, TUnit::TIME_NS), "1.234us");
EXPECT_EQ(PrettyPrinter::Print(12345.6789, TUnit::TIME_NS), "12.345us");
EXPECT_EQ(PrettyPrinter::Print(1234567.890, TUnit::TIME_NS), "1.234ms");
EXPECT_EQ(PrettyPrinter::Print(123456789.0, TUnit::TIME_NS), "123.456ms");
EXPECT_EQ(PrettyPrinter::Print(123823456789.9, TUnit::TIME_NS), "2m3s");
EXPECT_EQ(PrettyPrinter::Print(12123456789.9, TUnit::TIME_NS), "12s123ms");
EXPECT_EQ(PrettyPrinter::Print(1.5009, TUnit::TIME_NS), "1.500ns");
EXPECT_EQ(PrettyPrinter::Print(1000 * 1000 * 1000, TUnit::TIME_NS), "1s000ms");
EXPECT_EQ(PrettyPrinter::Print(123, TUnit::TIME_NS), "123.000ns");
EXPECT_EQ(PrettyPrinter::Print(123400, TUnit::TIME_NS), "123.400us");
EXPECT_EQ(PrettyPrinter::Print(123456789, TUnit::TIME_NS), "123.456ms");
EXPECT_EQ(PrettyPrinter::Print(123456789, TUnit::TIME_NS), "123.456ms");
}
TEST(PrettyPrinterTest, MillisSeconds) {
EXPECT_EQ(PrettyPrinter::Print(0.00001, TUnit::TIME_MS), "0ms");
EXPECT_EQ(PrettyPrinter::Print(0.0001, TUnit::TIME_MS), "0ms");
EXPECT_EQ(PrettyPrinter::Print(0.021, TUnit::TIME_MS), "0ms");
EXPECT_EQ(PrettyPrinter::Print(0.31, TUnit::TIME_MS), "0ms");
EXPECT_EQ(PrettyPrinter::Print(0.1, TUnit::TIME_MS), "0ms");
EXPECT_EQ(PrettyPrinter::Print(1, TUnit::TIME_MS), "1ms");
EXPECT_EQ(PrettyPrinter::Print(123.4, TUnit::TIME_MS), "123ms");
EXPECT_EQ(PrettyPrinter::Print(1234.9, TUnit::TIME_MS), "1s234ms");
EXPECT_EQ(PrettyPrinter::Print(12345.6789, TUnit::TIME_MS), "12s345ms");
EXPECT_EQ(PrettyPrinter::Print(1234567.890, TUnit::TIME_MS), "20m34s");
EXPECT_EQ(PrettyPrinter::Print(123456789.0, TUnit::TIME_MS), "34h17m");
EXPECT_EQ(PrettyPrinter::Print(123823456789.9, TUnit::TIME_MS), "34395h24m");
EXPECT_EQ(PrettyPrinter::Print(12123456789.9, TUnit::TIME_MS), "3367h37m");
EXPECT_EQ(PrettyPrinter::Print(1.5009, TUnit::TIME_MS), "1ms");
EXPECT_EQ(PrettyPrinter::Print(1000 * 1000 * 1000, TUnit::TIME_MS), "277h46m");
EXPECT_EQ(PrettyPrinter::Print(123, TUnit::TIME_MS), "123ms");
EXPECT_EQ(PrettyPrinter::Print(123400, TUnit::TIME_MS), "2m3s");
EXPECT_EQ(PrettyPrinter::Print(123456789, TUnit::TIME_MS), "34h17m");
EXPECT_EQ(PrettyPrinter::Print(2147483647, TUnit::TIME_MS), "596h31m");
}
TEST(PrettyPrinterTest, MicroSeconds) {
EXPECT_EQ(PrettyPrinter::Print(0.00001, TUnit::TIME_US), "0.010ns");
EXPECT_EQ(PrettyPrinter::Print(0.0001, TUnit::TIME_US), "0.100ns");
EXPECT_EQ(PrettyPrinter::Print(0.021, TUnit::TIME_US), "21.000ns");
EXPECT_EQ(PrettyPrinter::Print(0.31, TUnit::TIME_US), "310.000ns");
EXPECT_EQ(PrettyPrinter::Print(0.1, TUnit::TIME_US), "100.000ns");
EXPECT_EQ(PrettyPrinter::Print(1, TUnit::TIME_US), "1000.000ns");
EXPECT_EQ(PrettyPrinter::Print(123.4, TUnit::TIME_US), "123.400us");
EXPECT_EQ(PrettyPrinter::Print(1234.9, TUnit::TIME_US), "1.234ms");
EXPECT_EQ(PrettyPrinter::Print(12345.6789, TUnit::TIME_US), "12.345ms");
EXPECT_EQ(PrettyPrinter::Print(1234567.890, TUnit::TIME_US), "1s234ms");
EXPECT_EQ(PrettyPrinter::Print(123456789.0, TUnit::TIME_US), "2m3s");
EXPECT_EQ(PrettyPrinter::Print(123823456789.9, TUnit::TIME_US), "34h23m");
EXPECT_EQ(PrettyPrinter::Print(12123456789.9, TUnit::TIME_US), "3h22m");
EXPECT_EQ(PrettyPrinter::Print(1.5009, TUnit::TIME_US), "1.500us");
EXPECT_EQ(PrettyPrinter::Print(1000 * 1000 * 1000, TUnit::TIME_US), "16m40s");
EXPECT_EQ(PrettyPrinter::Print(123, TUnit::TIME_US), "123.000us");
EXPECT_EQ(PrettyPrinter::Print(123400, TUnit::TIME_US), "123.400ms");
EXPECT_EQ(PrettyPrinter::Print(123456789, TUnit::TIME_US), "2m3s");
EXPECT_EQ(PrettyPrinter::Print(2147483647, TUnit::TIME_US), "35m47s");
}
TEST(PrettyPrinterTest, DoubleValue) {
EXPECT_EQ(PrettyPrinter::Print(1.0, TUnit::DOUBLE_VALUE), "1.00 ");
}
TEST(PrettyPrinterTest, StringList) {
vector<int> vals;
stringstream ss1;
PrettyPrinter::PrintStringList(vals, TUnit::UNIT, &ss1);
EXPECT_EQ(ss1.str(), "[]");
vals.push_back(1);
vals.push_back(1000);
vals.push_back(1000 * 1000);
stringstream ss2;
PrettyPrinter::PrintStringList(vals, TUnit::UNIT, &ss2);
EXPECT_EQ(ss2.str(), "[1, 1.00K, 1.00M]");
}
}