brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.2 KiB · 8412008 Raw
229 lines · plain
1#include <cstdlib>2 3#include "../src/commandlineflags.h"4#include "../src/internal_macros.h"5#include "gmock/gmock.h"6#include "gtest/gtest.h"7 8namespace benchmark {9namespace {10 11#if defined(BENCHMARK_OS_WINDOWS)12int setenv(const char* name, const char* value, int overwrite) {13  if (!overwrite) {14    // NOTE: getenv_s is far superior but not available under mingw.15    char* env_value = getenv(name);16    if (env_value == nullptr) {17      return -1;18    }19  }20  return _putenv_s(name, value);21}22 23int unsetenv(const char* name) { return _putenv_s(name, ""); }24 25#endif  // BENCHMARK_OS_WINDOWS26 27TEST(BoolFromEnv, Default) {28  ASSERT_EQ(unsetenv("NOT_IN_ENV"), 0);29  EXPECT_EQ(BoolFromEnv("not_in_env", true), true);30}31 32TEST(BoolFromEnv, False) {33  ASSERT_EQ(setenv("IN_ENV", "0", 1), 0);34  EXPECT_EQ(BoolFromEnv("in_env", true), false);35  unsetenv("IN_ENV");36 37  ASSERT_EQ(setenv("IN_ENV", "N", 1), 0);38  EXPECT_EQ(BoolFromEnv("in_env", true), false);39  unsetenv("IN_ENV");40 41  ASSERT_EQ(setenv("IN_ENV", "n", 1), 0);42  EXPECT_EQ(BoolFromEnv("in_env", true), false);43  unsetenv("IN_ENV");44 45  ASSERT_EQ(setenv("IN_ENV", "NO", 1), 0);46  EXPECT_EQ(BoolFromEnv("in_env", true), false);47  unsetenv("IN_ENV");48 49  ASSERT_EQ(setenv("IN_ENV", "No", 1), 0);50  EXPECT_EQ(BoolFromEnv("in_env", true), false);51  unsetenv("IN_ENV");52 53  ASSERT_EQ(setenv("IN_ENV", "no", 1), 0);54  EXPECT_EQ(BoolFromEnv("in_env", true), false);55  unsetenv("IN_ENV");56 57  ASSERT_EQ(setenv("IN_ENV", "F", 1), 0);58  EXPECT_EQ(BoolFromEnv("in_env", true), false);59  unsetenv("IN_ENV");60 61  ASSERT_EQ(setenv("IN_ENV", "f", 1), 0);62  EXPECT_EQ(BoolFromEnv("in_env", true), false);63  unsetenv("IN_ENV");64 65  ASSERT_EQ(setenv("IN_ENV", "FALSE", 1), 0);66  EXPECT_EQ(BoolFromEnv("in_env", true), false);67  unsetenv("IN_ENV");68 69  ASSERT_EQ(setenv("IN_ENV", "False", 1), 0);70  EXPECT_EQ(BoolFromEnv("in_env", true), false);71  unsetenv("IN_ENV");72 73  ASSERT_EQ(setenv("IN_ENV", "false", 1), 0);74  EXPECT_EQ(BoolFromEnv("in_env", true), false);75  unsetenv("IN_ENV");76 77  ASSERT_EQ(setenv("IN_ENV", "OFF", 1), 0);78  EXPECT_EQ(BoolFromEnv("in_env", true), false);79  unsetenv("IN_ENV");80 81  ASSERT_EQ(setenv("IN_ENV", "Off", 1), 0);82  EXPECT_EQ(BoolFromEnv("in_env", true), false);83  unsetenv("IN_ENV");84 85  ASSERT_EQ(setenv("IN_ENV", "off", 1), 0);86  EXPECT_EQ(BoolFromEnv("in_env", true), false);87  unsetenv("IN_ENV");88}89 90TEST(BoolFromEnv, True) {91  ASSERT_EQ(setenv("IN_ENV", "1", 1), 0);92  EXPECT_EQ(BoolFromEnv("in_env", false), true);93  unsetenv("IN_ENV");94 95  ASSERT_EQ(setenv("IN_ENV", "Y", 1), 0);96  EXPECT_EQ(BoolFromEnv("in_env", false), true);97  unsetenv("IN_ENV");98 99  ASSERT_EQ(setenv("IN_ENV", "y", 1), 0);100  EXPECT_EQ(BoolFromEnv("in_env", false), true);101  unsetenv("IN_ENV");102 103  ASSERT_EQ(setenv("IN_ENV", "YES", 1), 0);104  EXPECT_EQ(BoolFromEnv("in_env", false), true);105  unsetenv("IN_ENV");106 107  ASSERT_EQ(setenv("IN_ENV", "Yes", 1), 0);108  EXPECT_EQ(BoolFromEnv("in_env", false), true);109  unsetenv("IN_ENV");110 111  ASSERT_EQ(setenv("IN_ENV", "yes", 1), 0);112  EXPECT_EQ(BoolFromEnv("in_env", false), true);113  unsetenv("IN_ENV");114 115  ASSERT_EQ(setenv("IN_ENV", "T", 1), 0);116  EXPECT_EQ(BoolFromEnv("in_env", false), true);117  unsetenv("IN_ENV");118 119  ASSERT_EQ(setenv("IN_ENV", "t", 1), 0);120  EXPECT_EQ(BoolFromEnv("in_env", false), true);121  unsetenv("IN_ENV");122 123  ASSERT_EQ(setenv("IN_ENV", "TRUE", 1), 0);124  EXPECT_EQ(BoolFromEnv("in_env", false), true);125  unsetenv("IN_ENV");126 127  ASSERT_EQ(setenv("IN_ENV", "True", 1), 0);128  EXPECT_EQ(BoolFromEnv("in_env", false), true);129  unsetenv("IN_ENV");130 131  ASSERT_EQ(setenv("IN_ENV", "true", 1), 0);132  EXPECT_EQ(BoolFromEnv("in_env", false), true);133  unsetenv("IN_ENV");134 135  ASSERT_EQ(setenv("IN_ENV", "ON", 1), 0);136  EXPECT_EQ(BoolFromEnv("in_env", false), true);137  unsetenv("IN_ENV");138 139  ASSERT_EQ(setenv("IN_ENV", "On", 1), 0);140  EXPECT_EQ(BoolFromEnv("in_env", false), true);141  unsetenv("IN_ENV");142 143  ASSERT_EQ(setenv("IN_ENV", "on", 1), 0);144  EXPECT_EQ(BoolFromEnv("in_env", false), true);145  unsetenv("IN_ENV");146 147#ifndef BENCHMARK_OS_WINDOWS148  ASSERT_EQ(setenv("IN_ENV", "", 1), 0);149  EXPECT_EQ(BoolFromEnv("in_env", false), true);150  unsetenv("IN_ENV");151#endif152}153 154TEST(Int32FromEnv, NotInEnv) {155  ASSERT_EQ(unsetenv("NOT_IN_ENV"), 0);156  EXPECT_EQ(Int32FromEnv("not_in_env", 42), 42);157}158 159TEST(Int32FromEnv, InvalidInteger) {160  ASSERT_EQ(setenv("IN_ENV", "foo", 1), 0);161  EXPECT_EQ(Int32FromEnv("in_env", 42), 42);162  unsetenv("IN_ENV");163}164 165TEST(Int32FromEnv, ValidInteger) {166  ASSERT_EQ(setenv("IN_ENV", "42", 1), 0);167  EXPECT_EQ(Int32FromEnv("in_env", 64), 42);168  unsetenv("IN_ENV");169}170 171TEST(DoubleFromEnv, NotInEnv) {172  ASSERT_EQ(unsetenv("NOT_IN_ENV"), 0);173  EXPECT_EQ(DoubleFromEnv("not_in_env", 0.51), 0.51);174}175 176TEST(DoubleFromEnv, InvalidReal) {177  ASSERT_EQ(setenv("IN_ENV", "foo", 1), 0);178  EXPECT_EQ(DoubleFromEnv("in_env", 0.51), 0.51);179  unsetenv("IN_ENV");180}181 182TEST(DoubleFromEnv, ValidReal) {183  ASSERT_EQ(setenv("IN_ENV", "0.51", 1), 0);184  EXPECT_EQ(DoubleFromEnv("in_env", 0.71), 0.51);185  unsetenv("IN_ENV");186}187 188TEST(StringFromEnv, Default) {189  ASSERT_EQ(unsetenv("NOT_IN_ENV"), 0);190  EXPECT_STREQ(StringFromEnv("not_in_env", "foo"), "foo");191}192 193TEST(StringFromEnv, Valid) {194  ASSERT_EQ(setenv("IN_ENV", "foo", 1), 0);195  EXPECT_STREQ(StringFromEnv("in_env", "bar"), "foo");196  unsetenv("IN_ENV");197}198 199TEST(KvPairsFromEnv, Default) {200  ASSERT_EQ(unsetenv("NOT_IN_ENV"), 0);201  EXPECT_THAT(KvPairsFromEnv("not_in_env", {{"foo", "bar"}}),202              testing::ElementsAre(testing::Pair("foo", "bar")));203}204 205TEST(KvPairsFromEnv, MalformedReturnsDefault) {206  ASSERT_EQ(setenv("IN_ENV", "foo", 1), 0);207  EXPECT_THAT(KvPairsFromEnv("in_env", {{"foo", "bar"}}),208              testing::ElementsAre(testing::Pair("foo", "bar")));209  unsetenv("IN_ENV");210}211 212TEST(KvPairsFromEnv, Single) {213  ASSERT_EQ(setenv("IN_ENV", "foo=bar", 1), 0);214  EXPECT_THAT(KvPairsFromEnv("in_env", {}),215              testing::ElementsAre(testing::Pair("foo", "bar")));216  unsetenv("IN_ENV");217}218 219TEST(KvPairsFromEnv, Multiple) {220  ASSERT_EQ(setenv("IN_ENV", "foo=bar,baz=qux", 1), 0);221  EXPECT_THAT(KvPairsFromEnv("in_env", {}),222              testing::UnorderedElementsAre(testing::Pair("foo", "bar"),223                                            testing::Pair("baz", "qux")));224  unsetenv("IN_ENV");225}226 227}  // namespace228}  // namespace benchmark229