// Copyright 2018 The Fuchsia 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 <array>
#include "gtest/gtest.h"
#include "lib/fidl/cpp/builder.h"

namespace fidl {
namespace {

TEST(Array, BuilderTest) {
  char buffer[ZX_CHANNEL_MAX_MSG_BYTES];
  fidl::Builder builder(buffer, ZX_CHANNEL_MAX_MSG_BYTES);

  std::array<int, 3>* view = builder.New<std::array<int, 3>>();
  EXPECT_EQ(3u, view->size());

  (*view)[0] = 0;
  (*view)[1] = 1;
  (*view)[2] = 2;

  EXPECT_EQ(view->at(0), 0);
  EXPECT_EQ(view->at(1), 1);
  EXPECT_EQ(view->at(2), 2);

  int i = 0;
  for (auto& value : *view) {
    EXPECT_EQ(i, value);
    ++i;
  }

  EXPECT_NE(view->data(), nullptr);
}

}  // namespace
}  // namespace fidl
