// Copyright 2018 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "xfa/fxfa/parser/cxfa_localevalue.h"

#include "testing/gtest/include/gtest/gtest.h"

namespace {

// We don't expect more precision than a float's worth from this code.
float MakeDoubleNumAsFloat(const wchar_t* str) {
  return static_cast<float>(
      CXFA_LocaleValue(XFA_VT_FLOAT, str, nullptr).GetDoubleNum());
}

}  // namespace

TEST(CXFALocaleValueTest, GetDoubleNum) {
  EXPECT_EQ(0.0, MakeDoubleNumAsFloat(L""));
  EXPECT_EQ(0.0, MakeDoubleNumAsFloat(L"0"));
  EXPECT_EQ(0.0, MakeDoubleNumAsFloat(L"0."));
  EXPECT_EQ(0.0, MakeDoubleNumAsFloat(L"0.0"));
  EXPECT_EQ(0.0, MakeDoubleNumAsFloat(L"0.x"));
  EXPECT_EQ(7.0, MakeDoubleNumAsFloat(L"7.x"));
  EXPECT_FLOAT_EQ(0.54321f, MakeDoubleNumAsFloat(L".54321"));
  EXPECT_FLOAT_EQ(0.54321f, MakeDoubleNumAsFloat(L"0.54321"));
  EXPECT_FLOAT_EQ(0.54321f, MakeDoubleNumAsFloat(L"+0.54321"));
  EXPECT_FLOAT_EQ(0.54321f, MakeDoubleNumAsFloat(L"   +0.54321"));
  EXPECT_FLOAT_EQ(-0.54321f, MakeDoubleNumAsFloat(L"-.54321"));
  EXPECT_FLOAT_EQ(-0.54321f, MakeDoubleNumAsFloat(L"-0.54321"));
  EXPECT_FLOAT_EQ(-0.54321f, MakeDoubleNumAsFloat(L"  -0.54321"));
  EXPECT_FLOAT_EQ(-0.054321f, MakeDoubleNumAsFloat(L"-0.54321e-1"));
  EXPECT_FLOAT_EQ(-0.54321f, MakeDoubleNumAsFloat(L"-0.54321e0"));
  EXPECT_FLOAT_EQ(-5.4321f, MakeDoubleNumAsFloat(L"-0.54321e1"));
}
