12faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes/*
22faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * Copyright (C) 2011 The Android Open Source Project
32faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes *
42faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * Licensed under the Apache License, Version 2.0 (the "License");
52faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * you may not use this file except in compliance with the License.
62faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * You may obtain a copy of the License at
72faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes *
82faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes *      http://www.apache.org/licenses/LICENSE-2.0
92faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes *
102faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * Unless required by applicable law or agreed to in writing, software
112faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * distributed under the License is distributed on an "AS IS" BASIS,
122faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
132faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * See the License for the specific language governing permissions and
142faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * limitations under the License.
152faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes */
1612eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro
17578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom#include "dex_instruction_visitor.h"
1812eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro
19700a402244a1a423da4f3ba8032459f4b65fa18fIan Rogers#include <memory>
2090a3369d3b6238f1a4c9b19ca68978dab1c39bc4Elliott Hughes
2112eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro#include "gtest/gtest.h"
2212eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro
2312eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapironamespace art {
2412eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro
2512eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiroclass TestVisitor : public DexInstructionVisitor<TestVisitor> {};
2612eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro
27a331b3cc392132c7333d36649a8310f38f4822ccBrian CarlstromTEST(InstructionTest, Init) {
28700a402244a1a423da4f3ba8032459f4b65fa18fIan Rogers  std::unique_ptr<TestVisitor> visitor(new TestVisitor);
2912eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro}
3012eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro
3112eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiroclass CountVisitor : public DexInstructionVisitor<CountVisitor> {
3212eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro public:
3312eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro  int count_;
3412eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro
3512eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro  CountVisitor() : count_(0) {}
3612eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro
37317eb64f5b9aafcd158b8b701cf46a0f697506a5Elliott Hughes  void Do_Default(const Instruction*) {
3812eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro    ++count_;
3912eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro  }
4012eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro};
4112eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro
42a331b3cc392132c7333d36649a8310f38f4822ccBrian CarlstromTEST(InstructionTest, Count) {
4312eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro  CountVisitor v0;
44ba5ebb944b7c5c6a1b754b6dd47eed96f39aea29jeffhao  const uint16_t c0[] = {};
4512eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro  v0.Visit(c0, sizeof(c0));
4612eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro  EXPECT_EQ(0, v0.count_);
4712eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro
4812eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro  CountVisitor v1;
49ba5ebb944b7c5c6a1b754b6dd47eed96f39aea29jeffhao  const uint16_t c1[] = { 0 };
5012eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro  v1.Visit(c1, sizeof(c1));
5112eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro  EXPECT_EQ(1, v1.count_);
5212eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro
5312eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro  CountVisitor v2;
54ba5ebb944b7c5c6a1b754b6dd47eed96f39aea29jeffhao  const uint16_t c2[] = { 0, 0 };
5512eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro  v2.Visit(c2, sizeof(c2));
5612eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro  EXPECT_EQ(2, v2.count_);
5712eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro
5812eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro  CountVisitor v3;
59ba5ebb944b7c5c6a1b754b6dd47eed96f39aea29jeffhao  const uint16_t c3[] = { 0, 0, 0, };
6012eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro  v3.Visit(c3, sizeof(c3));
6112eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro  EXPECT_EQ(3, v3.count_);
6212eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro
6312eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro  CountVisitor v4;
64ba5ebb944b7c5c6a1b754b6dd47eed96f39aea29jeffhao  const uint16_t c4[] = { 0, 0, 0, 0  };
6512eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro  v4.Visit(c4, sizeof(c4));
6612eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro  EXPECT_EQ(4, v4.count_);
6712eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro}
6812eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro
6912eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro}  // namespace art
70