// 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 <zxtest/zxtest.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
