153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers/*
253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers * Copyright (C) 2011 The Android Open Source Project
353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers *
453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers * Licensed under the Apache License, Version 2.0 (the "License");
553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers * you may not use this file except in compliance with the License.
653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers * You may obtain a copy of the License at
753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers *
853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers *      http://www.apache.org/licenses/LICENSE-2.0
953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers *
1053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers * Unless required by applicable law or agreed to in writing, software
1153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers * distributed under the License is distributed on an "AS IS" BASIS,
1253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers * See the License for the specific language governing permissions and
1453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers * limitations under the License.
1553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers */
1653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
1753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers#include "reflection.h"
1853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
198edba0b19d53000d8f191496394960e3995c5ba6Brian Carlstrom#include <float.h>
2088e46a35b4b898ec2032348a185d2b0b812b6ad9Ian Rogers#include <limits.h>
21e63db27db913f1a88e2095a1ee8239b2bb9124e8Ian Rogers#include "ScopedLocalRef.h"
2253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
23e401d146407d61eeb99f8d6176b2ac13c4df1e33Mathieu Chartier#include "art_method-inl.h"
2453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers#include "common_compiler_test.h"
25e63db27db913f1a88e2095a1ee8239b2bb9124e8Ian Rogers#include "scoped_thread_state_change.h"
2653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
2753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogersnamespace art {
2853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
2953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers// TODO: Convert to CommonRuntimeTest. Currently MakeExecutable is used.
3053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogersclass ReflectionTest : public CommonCompilerTest {
3153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers protected:
3253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  virtual void SetUp() {
3353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    CommonCompilerTest::SetUp();
3453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
3553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    vm_ = Runtime::Current()->GetJavaVM();
3653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
3753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    // Turn on -verbose:jni for the JNI tests.
3853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    // gLogVerbosity.jni = true;
3953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
402cebb24bfc3247d3e9be138a3350106737455918Mathieu Chartier    vm_->AttachCurrentThread(&env_, nullptr);
4153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
4253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    ScopedLocalRef<jclass> aioobe(env_,
4353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers                                  env_->FindClass("java/lang/ArrayIndexOutOfBoundsException"));
442cebb24bfc3247d3e9be138a3350106737455918Mathieu Chartier    CHECK(aioobe.get() != nullptr);
4553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    aioobe_ = reinterpret_cast<jclass>(env_->NewGlobalRef(aioobe.get()));
4653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
4753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    ScopedLocalRef<jclass> ase(env_, env_->FindClass("java/lang/ArrayStoreException"));
482cebb24bfc3247d3e9be138a3350106737455918Mathieu Chartier    CHECK(ase.get() != nullptr);
4953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    ase_ = reinterpret_cast<jclass>(env_->NewGlobalRef(ase.get()));
5053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
5153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    ScopedLocalRef<jclass> sioobe(env_,
5253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers                                  env_->FindClass("java/lang/StringIndexOutOfBoundsException"));
532cebb24bfc3247d3e9be138a3350106737455918Mathieu Chartier    CHECK(sioobe.get() != nullptr);
5453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    sioobe_ = reinterpret_cast<jclass>(env_->NewGlobalRef(sioobe.get()));
5553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  }
5653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
5753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  void CleanUpJniEnv() {
582cebb24bfc3247d3e9be138a3350106737455918Mathieu Chartier    if (aioobe_ != nullptr) {
5953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers      env_->DeleteGlobalRef(aioobe_);
602cebb24bfc3247d3e9be138a3350106737455918Mathieu Chartier      aioobe_ = nullptr;
6153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    }
622cebb24bfc3247d3e9be138a3350106737455918Mathieu Chartier    if (ase_ != nullptr) {
6353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers      env_->DeleteGlobalRef(ase_);
642cebb24bfc3247d3e9be138a3350106737455918Mathieu Chartier      ase_ = nullptr;
6553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    }
662cebb24bfc3247d3e9be138a3350106737455918Mathieu Chartier    if (sioobe_ != nullptr) {
6753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers      env_->DeleteGlobalRef(sioobe_);
682cebb24bfc3247d3e9be138a3350106737455918Mathieu Chartier      sioobe_ = nullptr;
6953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    }
7053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  }
7153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
7253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  virtual void TearDown() {
7353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    CleanUpJniEnv();
7453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    CommonCompilerTest::TearDown();
7553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  }
7653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
7753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  jclass GetPrimitiveClass(char descriptor) {
7853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    ScopedObjectAccess soa(env_);
7953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    mirror::Class* c = class_linker_->FindPrimitiveClass(descriptor);
8053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    CHECK(c != nullptr);
8153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    return soa.AddLocalReference<jclass>(c);
8253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  }
8353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
84e401d146407d61eeb99f8d6176b2ac13c4df1e33Mathieu Chartier  void ReflectionTestMakeExecutable(ArtMethod** method,
8553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers                                    mirror::Object** receiver,
8653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers                                    bool is_static, const char* method_name,
8753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers                                    const char* method_signature)
8890443477f9a0061581c420775ce3b7eeae7468bcMathieu Chartier      SHARED_REQUIRES(Locks::mutator_lock_) {
8953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    const char* class_name = is_static ? "StaticLeafMethods" : "NonStaticLeafMethods";
9053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    jobject jclass_loader(LoadDex(class_name));
9153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    Thread* self = Thread::Current();
92eb8167a4f4d27fce0530f6724ab8032610cd146bMathieu Chartier    StackHandleScope<2> hs(self);
93eb8167a4f4d27fce0530f6724ab8032610cd146bMathieu Chartier    Handle<mirror::ClassLoader> class_loader(
94eb8167a4f4d27fce0530f6724ab8032610cd146bMathieu Chartier        hs.NewHandle(
95eb8167a4f4d27fce0530f6724ab8032610cd146bMathieu Chartier            ScopedObjectAccessUnchecked(self).Decode<mirror::ClassLoader*>(jclass_loader)));
9653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    if (is_static) {
9753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers      MakeExecutable(ScopedObjectAccessUnchecked(self).Decode<mirror::ClassLoader*>(jclass_loader),
9853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers                     class_name);
9953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    } else {
10053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers      MakeExecutable(nullptr, "java.lang.Class");
10153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers      MakeExecutable(nullptr, "java.lang.Object");
10253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers      MakeExecutable(ScopedObjectAccessUnchecked(self).Decode<mirror::ClassLoader*>(jclass_loader),
10353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers                     class_name);
10453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    }
10553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
10653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    mirror::Class* c = class_linker_->FindClass(self, DotToDescriptor(class_name).c_str(),
10753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers                                                class_loader);
1082cebb24bfc3247d3e9be138a3350106737455918Mathieu Chartier    CHECK(c != nullptr);
10953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
110e401d146407d61eeb99f8d6176b2ac13c4df1e33Mathieu Chartier    *method = is_static ? c->FindDirectMethod(method_name, method_signature, sizeof(void*))
111e401d146407d61eeb99f8d6176b2ac13c4df1e33Mathieu Chartier                        : c->FindVirtualMethod(method_name, method_signature, sizeof(void*));
11253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    CHECK(method != nullptr);
11353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
1144e99b3d8955131f3fc71aa113f0fa71f0092cb6fSebastien Hertz    if (is_static) {
1154e99b3d8955131f3fc71aa113f0fa71f0092cb6fSebastien Hertz      *receiver = nullptr;
1164e99b3d8955131f3fc71aa113f0fa71f0092cb6fSebastien Hertz    } else {
1174e99b3d8955131f3fc71aa113f0fa71f0092cb6fSebastien Hertz      // Ensure class is initialized before allocating object
118277ccbd200ea43590dfc06a93ae184a765327ad0Andreas Gampe      StackHandleScope<1> hs2(self);
119277ccbd200ea43590dfc06a93ae184a765327ad0Andreas Gampe      Handle<mirror::Class> h_class(hs2.NewHandle(c));
1207b078e8c04f3e1451dbdd18543c8b9692b5b067eIan Rogers      bool initialized = class_linker_->EnsureInitialized(self, h_class, true, true);
1214e99b3d8955131f3fc71aa113f0fa71f0092cb6fSebastien Hertz      CHECK(initialized);
1224e99b3d8955131f3fc71aa113f0fa71f0092cb6fSebastien Hertz      *receiver = c->AllocObject(self);
1234e99b3d8955131f3fc71aa113f0fa71f0092cb6fSebastien Hertz    }
12453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
12553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    // Start runtime.
12653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    bool started = runtime_->Start();
12753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    CHECK(started);
12853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    self->TransitionFromSuspendedToRunnable();
12953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  }
13053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
13153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  void InvokeNopMethod(bool is_static) {
13253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    ScopedObjectAccess soa(env_);
133e401d146407d61eeb99f8d6176b2ac13c4df1e33Mathieu Chartier    ArtMethod* method;
13453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    mirror::Object* receiver;
13553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    ReflectionTestMakeExecutable(&method, &receiver, is_static, "nop", "()V");
13639b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao    ScopedLocalRef<jobject> receiver_ref(soa.Env(), soa.AddLocalReference<jobject>(receiver));
13739b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao    InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), nullptr);
13853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  }
13953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
14053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  void InvokeIdentityByteMethod(bool is_static) {
14153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    ScopedObjectAccess soa(env_);
142e401d146407d61eeb99f8d6176b2ac13c4df1e33Mathieu Chartier    ArtMethod* method;
14353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    mirror::Object* receiver;
14453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    ReflectionTestMakeExecutable(&method, &receiver, is_static, "identity", "(B)B");
14539b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao    ScopedLocalRef<jobject> receiver_ref(soa.Env(), soa.AddLocalReference<jobject>(receiver));
14653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    jvalue args[1];
14753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
14853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[0].b = 0;
14939b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao    JValue result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args);
15053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    EXPECT_EQ(0, result.GetB());
15153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
15253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[0].b = -1;
15339b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao    result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args);
15453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    EXPECT_EQ(-1, result.GetB());
15553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
15653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[0].b = SCHAR_MAX;
15739b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao    result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args);
15853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    EXPECT_EQ(SCHAR_MAX, result.GetB());
15953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
16058554b7de4b437ddef7ff550e62c8ec0b16f9264Andreas Gampe    static_assert(SCHAR_MIN == -128, "SCHAR_MIN unexpected");
16158554b7de4b437ddef7ff550e62c8ec0b16f9264Andreas Gampe    args[0].b = SCHAR_MIN;
16239b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao    result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args);
16353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    EXPECT_EQ(SCHAR_MIN, result.GetB());
16453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  }
16553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
16653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  void InvokeIdentityIntMethod(bool is_static) {
16753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    ScopedObjectAccess soa(env_);
168e401d146407d61eeb99f8d6176b2ac13c4df1e33Mathieu Chartier    ArtMethod* method;
16953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    mirror::Object* receiver;
17053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    ReflectionTestMakeExecutable(&method, &receiver, is_static, "identity", "(I)I");
17139b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao    ScopedLocalRef<jobject> receiver_ref(soa.Env(), soa.AddLocalReference<jobject>(receiver));
17253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    jvalue args[1];
17353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
17453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[0].i = 0;
17539b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao    JValue result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args);
17653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    EXPECT_EQ(0, result.GetI());
17753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
17853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[0].i = -1;
17939b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao    result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args);
18053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    EXPECT_EQ(-1, result.GetI());
18153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
18253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[0].i = INT_MAX;
18339b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao    result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args);
18453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    EXPECT_EQ(INT_MAX, result.GetI());
18553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
18653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[0].i = INT_MIN;
18739b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao    result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args);
18853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    EXPECT_EQ(INT_MIN, result.GetI());
18953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  }
19053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
19153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  void InvokeIdentityDoubleMethod(bool is_static) {
19253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    ScopedObjectAccess soa(env_);
193e401d146407d61eeb99f8d6176b2ac13c4df1e33Mathieu Chartier    ArtMethod* method;
19453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    mirror::Object* receiver;
19553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    ReflectionTestMakeExecutable(&method, &receiver, is_static, "identity", "(D)D");
19639b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao    ScopedLocalRef<jobject> receiver_ref(soa.Env(), soa.AddLocalReference<jobject>(receiver));
19753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    jvalue args[1];
19853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
19953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[0].d = 0.0;
20039b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao    JValue result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args);
201647b1a86f518d8db0331b3d52a96392b7a62504bIan Rogers    EXPECT_DOUBLE_EQ(0.0, result.GetD());
20253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
20353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[0].d = -1.0;
20439b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao    result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args);
205647b1a86f518d8db0331b3d52a96392b7a62504bIan Rogers    EXPECT_DOUBLE_EQ(-1.0, result.GetD());
20653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
20753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[0].d = DBL_MAX;
20839b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao    result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args);
209647b1a86f518d8db0331b3d52a96392b7a62504bIan Rogers    EXPECT_DOUBLE_EQ(DBL_MAX, result.GetD());
21053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
21153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[0].d = DBL_MIN;
21239b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao    result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args);
213647b1a86f518d8db0331b3d52a96392b7a62504bIan Rogers    EXPECT_DOUBLE_EQ(DBL_MIN, result.GetD());
21453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  }
21553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
21653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  void InvokeSumIntIntMethod(bool is_static) {
21753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    ScopedObjectAccess soa(env_);
218e401d146407d61eeb99f8d6176b2ac13c4df1e33Mathieu Chartier    ArtMethod* method;
21953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    mirror::Object* receiver;
22053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    ReflectionTestMakeExecutable(&method, &receiver, is_static, "sum", "(II)I");
22139b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao    ScopedLocalRef<jobject> receiver_ref(soa.Env(), soa.AddLocalReference<jobject>(receiver));
22253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    jvalue args[2];
22353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
22453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[0].i = 1;
22553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[1].i = 2;
22639b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao    JValue result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args);
22753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    EXPECT_EQ(3, result.GetI());
22853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
22953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[0].i = -2;
23053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[1].i = 5;
23139b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao    result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args);
23253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    EXPECT_EQ(3, result.GetI());
23353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
23453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[0].i = INT_MAX;
23553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[1].i = INT_MIN;
23639b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao    result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args);
23753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    EXPECT_EQ(-1, result.GetI());
23853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
23953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[0].i = INT_MAX;
24053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[1].i = INT_MAX;
24139b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao    result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args);
24253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    EXPECT_EQ(-2, result.GetI());
24353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  }
24453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
24553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  void InvokeSumIntIntIntMethod(bool is_static) {
24653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    ScopedObjectAccess soa(env_);
247e401d146407d61eeb99f8d6176b2ac13c4df1e33Mathieu Chartier    ArtMethod* method;
24853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    mirror::Object* receiver;
24953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    ReflectionTestMakeExecutable(&method, &receiver, is_static, "sum", "(III)I");
25039b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao    ScopedLocalRef<jobject> receiver_ref(soa.Env(), soa.AddLocalReference<jobject>(receiver));
25153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    jvalue args[3];
25253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
25353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[0].i = 0;
25453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[1].i = 0;
25553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[2].i = 0;
25639b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao    JValue result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args);
25753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    EXPECT_EQ(0, result.GetI());
25853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
25953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[0].i = 1;
26053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[1].i = 2;
26153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[2].i = 3;
26239b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao    result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args);
26353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    EXPECT_EQ(6, result.GetI());
26453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
26553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[0].i = -1;
26653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[1].i = 2;
26753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[2].i = -3;
26839b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao    result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args);
26953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    EXPECT_EQ(-2, result.GetI());
27053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
27153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[0].i = INT_MAX;
27253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[1].i = INT_MIN;
27353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[2].i = INT_MAX;
27439b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao    result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args);
27553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    EXPECT_EQ(2147483646, result.GetI());
27653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
27753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[0].i = INT_MAX;
27853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[1].i = INT_MAX;
27953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[2].i = INT_MAX;
28039b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao    result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args);
28153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    EXPECT_EQ(2147483645, result.GetI());
28253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  }
28353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
28453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  void InvokeSumIntIntIntIntMethod(bool is_static) {
28553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    ScopedObjectAccess soa(env_);
286e401d146407d61eeb99f8d6176b2ac13c4df1e33Mathieu Chartier    ArtMethod* method;
28753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    mirror::Object* receiver;
28853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    ReflectionTestMakeExecutable(&method, &receiver, is_static, "sum", "(IIII)I");
28939b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao    ScopedLocalRef<jobject> receiver_ref(soa.Env(), soa.AddLocalReference<jobject>(receiver));
29053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    jvalue args[4];
29153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
29253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[0].i = 0;
29353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[1].i = 0;
29453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[2].i = 0;
29553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[3].i = 0;
29639b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao    JValue result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args);
29753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    EXPECT_EQ(0, result.GetI());
29853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
29953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[0].i = 1;
30053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[1].i = 2;
30153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[2].i = 3;
30253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[3].i = 4;
30339b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao    result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args);
30453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    EXPECT_EQ(10, result.GetI());
30553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
30653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[0].i = -1;
30753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[1].i = 2;
30853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[2].i = -3;
30953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[3].i = 4;
31039b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao    result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args);
31153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    EXPECT_EQ(2, result.GetI());
31253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
31353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[0].i = INT_MAX;
31453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[1].i = INT_MIN;
31553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[2].i = INT_MAX;
31653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[3].i = INT_MIN;
31739b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao    result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args);
31853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    EXPECT_EQ(-2, result.GetI());
31953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
32053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[0].i = INT_MAX;
32153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[1].i = INT_MAX;
32253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[2].i = INT_MAX;
32353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[3].i = INT_MAX;
32439b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao    result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args);
32553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    EXPECT_EQ(-4, result.GetI());
32653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  }
32753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
32853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  void InvokeSumIntIntIntIntIntMethod(bool is_static) {
32953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    ScopedObjectAccess soa(env_);
330e401d146407d61eeb99f8d6176b2ac13c4df1e33Mathieu Chartier    ArtMethod* method;
33153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    mirror::Object* receiver;
33253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    ReflectionTestMakeExecutable(&method, &receiver, is_static, "sum", "(IIIII)I");
33339b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao    ScopedLocalRef<jobject> receiver_ref(soa.Env(), soa.AddLocalReference<jobject>(receiver));
33453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    jvalue args[5];
33553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
33653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[0].i = 0;
33753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[1].i = 0;
33853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[2].i = 0;
33953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[3].i = 0;
34053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[4].i = 0;
34139b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao    JValue result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args);
34253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    EXPECT_EQ(0, result.GetI());
34353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
34453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[0].i = 1;
34553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[1].i = 2;
34653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[2].i = 3;
34753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[3].i = 4;
34853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[4].i = 5;
34939b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao    result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args);
35053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    EXPECT_EQ(15, result.GetI());
35153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
35253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[0].i = -1;
35353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[1].i = 2;
35453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[2].i = -3;
35553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[3].i = 4;
35653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[4].i = -5;
35739b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao    result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args);
35853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    EXPECT_EQ(-3, result.GetI());
35953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
36053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[0].i = INT_MAX;
36153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[1].i = INT_MIN;
36253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[2].i = INT_MAX;
36353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[3].i = INT_MIN;
36453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[4].i = INT_MAX;
36539b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao    result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args);
36653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    EXPECT_EQ(2147483645, result.GetI());
36753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
36853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[0].i = INT_MAX;
36953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[1].i = INT_MAX;
37053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[2].i = INT_MAX;
37153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[3].i = INT_MAX;
37253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[4].i = INT_MAX;
37339b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao    result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args);
37453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    EXPECT_EQ(2147483643, result.GetI());
37553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  }
37653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
37753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  void InvokeSumDoubleDoubleMethod(bool is_static) {
37853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    ScopedObjectAccess soa(env_);
379e401d146407d61eeb99f8d6176b2ac13c4df1e33Mathieu Chartier    ArtMethod* method;
38053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    mirror::Object* receiver;
38153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    ReflectionTestMakeExecutable(&method, &receiver, is_static, "sum", "(DD)D");
38239b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao    ScopedLocalRef<jobject> receiver_ref(soa.Env(), soa.AddLocalReference<jobject>(receiver));
38353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    jvalue args[2];
38453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
38553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[0].d = 0.0;
38653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[1].d = 0.0;
38739b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao    JValue result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args);
388647b1a86f518d8db0331b3d52a96392b7a62504bIan Rogers    EXPECT_DOUBLE_EQ(0.0, result.GetD());
38953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
39053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[0].d = 1.0;
39153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[1].d = 2.0;
39239b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao    result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args);
393647b1a86f518d8db0331b3d52a96392b7a62504bIan Rogers    EXPECT_DOUBLE_EQ(3.0, result.GetD());
39453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
39553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[0].d = 1.0;
39653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[1].d = -2.0;
39739b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao    result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args);
398647b1a86f518d8db0331b3d52a96392b7a62504bIan Rogers    EXPECT_DOUBLE_EQ(-1.0, result.GetD());
39953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
40053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[0].d = DBL_MAX;
40153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[1].d = DBL_MIN;
40239b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao    result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args);
403647b1a86f518d8db0331b3d52a96392b7a62504bIan Rogers    EXPECT_DOUBLE_EQ(1.7976931348623157e308, result.GetD());
40453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
40553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[0].d = DBL_MAX;
40653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[1].d = DBL_MAX;
40739b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao    result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args);
408647b1a86f518d8db0331b3d52a96392b7a62504bIan Rogers    EXPECT_DOUBLE_EQ(INFINITY, result.GetD());
40953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  }
41053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
41153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  void InvokeSumDoubleDoubleDoubleMethod(bool is_static) {
41253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    ScopedObjectAccess soa(env_);
413e401d146407d61eeb99f8d6176b2ac13c4df1e33Mathieu Chartier    ArtMethod* method;
41453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    mirror::Object* receiver;
41553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    ReflectionTestMakeExecutable(&method, &receiver, is_static, "sum", "(DDD)D");
41639b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao    ScopedLocalRef<jobject> receiver_ref(soa.Env(), soa.AddLocalReference<jobject>(receiver));
41753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    jvalue args[3];
41853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
41953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[0].d = 0.0;
42053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[1].d = 0.0;
42153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[2].d = 0.0;
42239b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao    JValue result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args);
423647b1a86f518d8db0331b3d52a96392b7a62504bIan Rogers    EXPECT_DOUBLE_EQ(0.0, result.GetD());
42453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
42553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[0].d = 1.0;
42653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[1].d = 2.0;
42753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[2].d = 3.0;
42839b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao    result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args);
429647b1a86f518d8db0331b3d52a96392b7a62504bIan Rogers    EXPECT_DOUBLE_EQ(6.0, result.GetD());
43053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
43153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[0].d = 1.0;
43253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[1].d = -2.0;
43353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[2].d = 3.0;
43439b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao    result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args);
435647b1a86f518d8db0331b3d52a96392b7a62504bIan Rogers    EXPECT_DOUBLE_EQ(2.0, result.GetD());
43653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  }
43753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
43853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  void InvokeSumDoubleDoubleDoubleDoubleMethod(bool is_static) {
43953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    ScopedObjectAccess soa(env_);
440e401d146407d61eeb99f8d6176b2ac13c4df1e33Mathieu Chartier    ArtMethod* method;
44153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    mirror::Object* receiver;
44253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    ReflectionTestMakeExecutable(&method, &receiver, is_static, "sum", "(DDDD)D");
44339b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao    ScopedLocalRef<jobject> receiver_ref(soa.Env(), soa.AddLocalReference<jobject>(receiver));
44453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    jvalue args[4];
44553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
44653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[0].d = 0.0;
44753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[1].d = 0.0;
44853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[2].d = 0.0;
44953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[3].d = 0.0;
45039b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao    JValue result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args);
451647b1a86f518d8db0331b3d52a96392b7a62504bIan Rogers    EXPECT_DOUBLE_EQ(0.0, result.GetD());
45253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
45353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[0].d = 1.0;
45453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[1].d = 2.0;
45553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[2].d = 3.0;
45653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[3].d = 4.0;
45739b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao    result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args);
458647b1a86f518d8db0331b3d52a96392b7a62504bIan Rogers    EXPECT_DOUBLE_EQ(10.0, result.GetD());
45953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
46053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[0].d = 1.0;
46153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[1].d = -2.0;
46253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[2].d = 3.0;
46353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[3].d = -4.0;
46439b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao    result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args);
465647b1a86f518d8db0331b3d52a96392b7a62504bIan Rogers    EXPECT_DOUBLE_EQ(-2.0, result.GetD());
46653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  }
46753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
46853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  void InvokeSumDoubleDoubleDoubleDoubleDoubleMethod(bool is_static) {
46953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    ScopedObjectAccess soa(env_);
470e401d146407d61eeb99f8d6176b2ac13c4df1e33Mathieu Chartier    ArtMethod* method;
47153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    mirror::Object* receiver;
47253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    ReflectionTestMakeExecutable(&method, &receiver, is_static, "sum", "(DDDDD)D");
47339b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao    ScopedLocalRef<jobject> receiver_ref(soa.Env(), soa.AddLocalReference<jobject>(receiver));
47453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    jvalue args[5];
47553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
47653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[0].d = 0.0;
47753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[1].d = 0.0;
47853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[2].d = 0.0;
47953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[3].d = 0.0;
48053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[4].d = 0.0;
48139b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao    JValue result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args);
482647b1a86f518d8db0331b3d52a96392b7a62504bIan Rogers    EXPECT_DOUBLE_EQ(0.0, result.GetD());
48353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
48453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[0].d = 1.0;
48553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[1].d = 2.0;
48653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[2].d = 3.0;
48753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[3].d = 4.0;
48853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[4].d = 5.0;
48939b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao    result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args);
490647b1a86f518d8db0331b3d52a96392b7a62504bIan Rogers    EXPECT_DOUBLE_EQ(15.0, result.GetD());
49153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
49253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[0].d = 1.0;
49353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[1].d = -2.0;
49453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[2].d = 3.0;
49553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[3].d = -4.0;
49653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers    args[4].d = 5.0;
49739b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao    result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args);
498647b1a86f518d8db0331b3d52a96392b7a62504bIan Rogers    EXPECT_DOUBLE_EQ(3.0, result.GetD());
49953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  }
50053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
50153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  JavaVMExt* vm_;
50253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  JNIEnv* env_;
50353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  jclass aioobe_;
50453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  jclass ase_;
50553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  jclass sioobe_;
50653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers};
50753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
50853b8b09fc80329539585dcf43657bc5f4ecefdffIan RogersTEST_F(ReflectionTest, StaticMainMethod) {
5090d5a281c671444bfa75d63caf1427a8c0e6e1177Roland Levillain  TEST_DISABLED_FOR_READ_BARRIER_WITH_OPTIMIZING_FOR_UNSUPPORTED_INSTRUCTION_SETS();
51053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  ScopedObjectAccess soa(Thread::Current());
51153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  jobject jclass_loader = LoadDex("Main");
512eb8167a4f4d27fce0530f6724ab8032610cd146bMathieu Chartier  StackHandleScope<1> hs(soa.Self());
513eb8167a4f4d27fce0530f6724ab8032610cd146bMathieu Chartier  Handle<mirror::ClassLoader> class_loader(
514eb8167a4f4d27fce0530f6724ab8032610cd146bMathieu Chartier      hs.NewHandle(soa.Decode<mirror::ClassLoader*>(jclass_loader)));
51553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  CompileDirectMethod(class_loader, "Main", "main", "([Ljava/lang/String;)V");
51653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
51753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  mirror::Class* klass = class_linker_->FindClass(soa.Self(), "LMain;", class_loader);
5182cebb24bfc3247d3e9be138a3350106737455918Mathieu Chartier  ASSERT_TRUE(klass != nullptr);
51953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
520e401d146407d61eeb99f8d6176b2ac13c4df1e33Mathieu Chartier  ArtMethod* method = klass->FindDirectMethod("main", "([Ljava/lang/String;)V", sizeof(void*));
5212cebb24bfc3247d3e9be138a3350106737455918Mathieu Chartier  ASSERT_TRUE(method != nullptr);
52253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
52353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  // Start runtime.
52453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  bool started = runtime_->Start();
52553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  CHECK(started);
52653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  soa.Self()->TransitionFromSuspendedToRunnable();
52753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
52853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  jvalue args[1];
52953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  args[0].l = nullptr;
53053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  InvokeWithJValues(soa, nullptr, soa.EncodeMethod(method), args);
53153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers}
53253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
53353b8b09fc80329539585dcf43657bc5f4ecefdffIan RogersTEST_F(ReflectionTest, StaticNopMethod) {
53453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  InvokeNopMethod(true);
53553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers}
53653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
53753b8b09fc80329539585dcf43657bc5f4ecefdffIan RogersTEST_F(ReflectionTest, NonStaticNopMethod) {
53853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  InvokeNopMethod(false);
53953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers}
54053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
54153b8b09fc80329539585dcf43657bc5f4ecefdffIan RogersTEST_F(ReflectionTest, StaticIdentityByteMethod) {
54253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  InvokeIdentityByteMethod(true);
54353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers}
54453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
54553b8b09fc80329539585dcf43657bc5f4ecefdffIan RogersTEST_F(ReflectionTest, NonStaticIdentityByteMethod) {
54653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  InvokeIdentityByteMethod(false);
54753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers}
54853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
54953b8b09fc80329539585dcf43657bc5f4ecefdffIan RogersTEST_F(ReflectionTest, StaticIdentityIntMethod) {
55053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  InvokeIdentityIntMethod(true);
55153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers}
55253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
55353b8b09fc80329539585dcf43657bc5f4ecefdffIan RogersTEST_F(ReflectionTest, NonStaticIdentityIntMethod) {
55453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  InvokeIdentityIntMethod(false);
55553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers}
55653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
55753b8b09fc80329539585dcf43657bc5f4ecefdffIan RogersTEST_F(ReflectionTest, StaticIdentityDoubleMethod) {
55853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  InvokeIdentityDoubleMethod(true);
55953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers}
56053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
56153b8b09fc80329539585dcf43657bc5f4ecefdffIan RogersTEST_F(ReflectionTest, NonStaticIdentityDoubleMethod) {
56253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  InvokeIdentityDoubleMethod(false);
56353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers}
56453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
56553b8b09fc80329539585dcf43657bc5f4ecefdffIan RogersTEST_F(ReflectionTest, StaticSumIntIntMethod) {
56653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  InvokeSumIntIntMethod(true);
56753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers}
56853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
56953b8b09fc80329539585dcf43657bc5f4ecefdffIan RogersTEST_F(ReflectionTest, NonStaticSumIntIntMethod) {
57053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  InvokeSumIntIntMethod(false);
57153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers}
57253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
57353b8b09fc80329539585dcf43657bc5f4ecefdffIan RogersTEST_F(ReflectionTest, StaticSumIntIntIntMethod) {
57453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  InvokeSumIntIntIntMethod(true);
57553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers}
57653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
57753b8b09fc80329539585dcf43657bc5f4ecefdffIan RogersTEST_F(ReflectionTest, NonStaticSumIntIntIntMethod) {
57853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  InvokeSumIntIntIntMethod(false);
57953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers}
58053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
58153b8b09fc80329539585dcf43657bc5f4ecefdffIan RogersTEST_F(ReflectionTest, StaticSumIntIntIntIntMethod) {
58253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  InvokeSumIntIntIntIntMethod(true);
58353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers}
58453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
58553b8b09fc80329539585dcf43657bc5f4ecefdffIan RogersTEST_F(ReflectionTest, NonStaticSumIntIntIntIntMethod) {
58653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  InvokeSumIntIntIntIntMethod(false);
58753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers}
58853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
58953b8b09fc80329539585dcf43657bc5f4ecefdffIan RogersTEST_F(ReflectionTest, StaticSumIntIntIntIntIntMethod) {
59053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  InvokeSumIntIntIntIntIntMethod(true);
59153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers}
59253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
59353b8b09fc80329539585dcf43657bc5f4ecefdffIan RogersTEST_F(ReflectionTest, NonStaticSumIntIntIntIntIntMethod) {
59453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  InvokeSumIntIntIntIntIntMethod(false);
59553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers}
59653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
59753b8b09fc80329539585dcf43657bc5f4ecefdffIan RogersTEST_F(ReflectionTest, StaticSumDoubleDoubleMethod) {
59853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  InvokeSumDoubleDoubleMethod(true);
59953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers}
60053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
60153b8b09fc80329539585dcf43657bc5f4ecefdffIan RogersTEST_F(ReflectionTest, NonStaticSumDoubleDoubleMethod) {
60253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  InvokeSumDoubleDoubleMethod(false);
60353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers}
60453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
60553b8b09fc80329539585dcf43657bc5f4ecefdffIan RogersTEST_F(ReflectionTest, StaticSumDoubleDoubleDoubleMethod) {
60653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  InvokeSumDoubleDoubleDoubleMethod(true);
60753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers}
60853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
60953b8b09fc80329539585dcf43657bc5f4ecefdffIan RogersTEST_F(ReflectionTest, NonStaticSumDoubleDoubleDoubleMethod) {
61053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  InvokeSumDoubleDoubleDoubleMethod(false);
61153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers}
61253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
61353b8b09fc80329539585dcf43657bc5f4ecefdffIan RogersTEST_F(ReflectionTest, StaticSumDoubleDoubleDoubleDoubleMethod) {
61453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  InvokeSumDoubleDoubleDoubleDoubleMethod(true);
61553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers}
61653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
61753b8b09fc80329539585dcf43657bc5f4ecefdffIan RogersTEST_F(ReflectionTest, NonStaticSumDoubleDoubleDoubleDoubleMethod) {
61853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  InvokeSumDoubleDoubleDoubleDoubleMethod(false);
61953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers}
62053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
62153b8b09fc80329539585dcf43657bc5f4ecefdffIan RogersTEST_F(ReflectionTest, StaticSumDoubleDoubleDoubleDoubleDoubleMethod) {
62253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  InvokeSumDoubleDoubleDoubleDoubleDoubleMethod(true);
62353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers}
62453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
62553b8b09fc80329539585dcf43657bc5f4ecefdffIan RogersTEST_F(ReflectionTest, NonStaticSumDoubleDoubleDoubleDoubleDoubleMethod) {
62653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers  InvokeSumDoubleDoubleDoubleDoubleDoubleMethod(false);
62753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers}
62853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers
62953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers}  // namespace art
630