// Copyright 2016 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 <trace-engine/fields.h>
#include <unittest/unittest.h>

namespace {

static bool field_get_set_test(void) {
  BEGIN_TEST;

  uint64_t value(0);

  trace::Field<0, 0>::Set(value, uint8_t(1));
  trace::Field<1, 1>::Set(value, uint8_t(1));
  trace::Field<2, 2>::Set(value, uint8_t(1));
  trace::Field<3, 3>::Set(value, uint8_t(1));
  trace::Field<4, 4>::Set(value, uint8_t(1));
  trace::Field<5, 5>::Set(value, uint8_t(1));
  trace::Field<6, 6>::Set(value, uint8_t(1));
  trace::Field<7, 7>::Set(value, uint8_t(1));

  EXPECT_EQ(uint8_t(-1), value);
  value = 0;
  trace::Field<0, 2>::Set(value, uint8_t(7));
  EXPECT_EQ(uint8_t(7), value);
  trace::Field<0, 2>::Set(value, uint8_t(0));
  EXPECT_EQ(uint8_t(0), value);

  END_TEST;
}

}  // namespace

BEGIN_TEST_CASE(types)
RUN_TEST(field_get_set_test)
END_TEST_CASE(types)
