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 233d21bdf8894e780d349c481e5c9e29fe1556051cMathieu 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 843d21bdf8894e780d349c481e5c9e29fe1556051cMathieu 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) 8853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers SHARED_LOCKS_REQUIRED(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 1103d21bdf8894e780d349c481e5c9e29fe1556051cMathieu Chartier *method = is_static ? c->FindDirectMethod(method_name, method_signature, sizeof(void*)) 1113d21bdf8894e780d349c481e5c9e29fe1556051cMathieu 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_); 1333d21bdf8894e780d349c481e5c9e29fe1556051cMathieu Chartier ArtMethod* method; 13453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers mirror::Object* receiver; 13553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers ReflectionTestMakeExecutable(&method, &receiver, is_static, "nop", "()V"); 13615e9ad1d028d7f12cb598b075453173532a00d91Jeff Hao ScopedLocalRef<jobject> receiver_ref(soa.Env(), soa.AddLocalReference<jobject>(receiver)); 13715e9ad1d028d7f12cb598b075453173532a00d91Jeff 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_); 1423d21bdf8894e780d349c481e5c9e29fe1556051cMathieu Chartier ArtMethod* method; 14353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers mirror::Object* receiver; 14453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers ReflectionTestMakeExecutable(&method, &receiver, is_static, "identity", "(B)B"); 14515e9ad1d028d7f12cb598b075453173532a00d91Jeff Hao ScopedLocalRef<jobject> receiver_ref(soa.Env(), soa.AddLocalReference<jobject>(receiver)); 14653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers jvalue args[1]; 14753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 14853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[0].b = 0; 14915e9ad1d028d7f12cb598b075453173532a00d91Jeff 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; 15315e9ad1d028d7f12cb598b075453173532a00d91Jeff 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; 15715e9ad1d028d7f12cb598b075453173532a00d91Jeff Hao result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args); 15853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers EXPECT_EQ(SCHAR_MAX, result.GetB()); 15953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 16053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[0].b = (SCHAR_MIN << 24) >> 24; 16115e9ad1d028d7f12cb598b075453173532a00d91Jeff Hao result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args); 16253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers EXPECT_EQ(SCHAR_MIN, result.GetB()); 16353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers } 16453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 16553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers void InvokeIdentityIntMethod(bool is_static) { 16653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers ScopedObjectAccess soa(env_); 1673d21bdf8894e780d349c481e5c9e29fe1556051cMathieu Chartier ArtMethod* method; 16853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers mirror::Object* receiver; 16953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers ReflectionTestMakeExecutable(&method, &receiver, is_static, "identity", "(I)I"); 17015e9ad1d028d7f12cb598b075453173532a00d91Jeff Hao ScopedLocalRef<jobject> receiver_ref(soa.Env(), soa.AddLocalReference<jobject>(receiver)); 17153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers jvalue args[1]; 17253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 17353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[0].i = 0; 17415e9ad1d028d7f12cb598b075453173532a00d91Jeff Hao JValue result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args); 17553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers EXPECT_EQ(0, result.GetI()); 17653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 17753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[0].i = -1; 17815e9ad1d028d7f12cb598b075453173532a00d91Jeff Hao result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args); 17953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers EXPECT_EQ(-1, result.GetI()); 18053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 18153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[0].i = INT_MAX; 18215e9ad1d028d7f12cb598b075453173532a00d91Jeff Hao result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args); 18353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers EXPECT_EQ(INT_MAX, result.GetI()); 18453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 18553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[0].i = INT_MIN; 18615e9ad1d028d7f12cb598b075453173532a00d91Jeff Hao result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args); 18753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers EXPECT_EQ(INT_MIN, result.GetI()); 18853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers } 18953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 19053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers void InvokeIdentityDoubleMethod(bool is_static) { 19153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers ScopedObjectAccess soa(env_); 1923d21bdf8894e780d349c481e5c9e29fe1556051cMathieu Chartier ArtMethod* method; 19353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers mirror::Object* receiver; 19453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers ReflectionTestMakeExecutable(&method, &receiver, is_static, "identity", "(D)D"); 19515e9ad1d028d7f12cb598b075453173532a00d91Jeff Hao ScopedLocalRef<jobject> receiver_ref(soa.Env(), soa.AddLocalReference<jobject>(receiver)); 19653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers jvalue args[1]; 19753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 19853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[0].d = 0.0; 19915e9ad1d028d7f12cb598b075453173532a00d91Jeff Hao JValue result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args); 200647b1a86f518d8db0331b3d52a96392b7a62504bIan Rogers EXPECT_DOUBLE_EQ(0.0, result.GetD()); 20153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 20253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[0].d = -1.0; 20315e9ad1d028d7f12cb598b075453173532a00d91Jeff Hao result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args); 204647b1a86f518d8db0331b3d52a96392b7a62504bIan Rogers EXPECT_DOUBLE_EQ(-1.0, result.GetD()); 20553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 20653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[0].d = DBL_MAX; 20715e9ad1d028d7f12cb598b075453173532a00d91Jeff Hao result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args); 208647b1a86f518d8db0331b3d52a96392b7a62504bIan Rogers EXPECT_DOUBLE_EQ(DBL_MAX, result.GetD()); 20953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 21053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[0].d = DBL_MIN; 21115e9ad1d028d7f12cb598b075453173532a00d91Jeff Hao result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args); 212647b1a86f518d8db0331b3d52a96392b7a62504bIan Rogers EXPECT_DOUBLE_EQ(DBL_MIN, result.GetD()); 21353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers } 21453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 21553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers void InvokeSumIntIntMethod(bool is_static) { 21653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers ScopedObjectAccess soa(env_); 2173d21bdf8894e780d349c481e5c9e29fe1556051cMathieu Chartier ArtMethod* method; 21853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers mirror::Object* receiver; 21953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers ReflectionTestMakeExecutable(&method, &receiver, is_static, "sum", "(II)I"); 22015e9ad1d028d7f12cb598b075453173532a00d91Jeff Hao ScopedLocalRef<jobject> receiver_ref(soa.Env(), soa.AddLocalReference<jobject>(receiver)); 22153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers jvalue args[2]; 22253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 22353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[0].i = 1; 22453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[1].i = 2; 22515e9ad1d028d7f12cb598b075453173532a00d91Jeff Hao JValue result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args); 22653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers EXPECT_EQ(3, result.GetI()); 22753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 22853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[0].i = -2; 22953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[1].i = 5; 23015e9ad1d028d7f12cb598b075453173532a00d91Jeff Hao result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args); 23153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers EXPECT_EQ(3, result.GetI()); 23253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 23353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[0].i = INT_MAX; 23453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[1].i = INT_MIN; 23515e9ad1d028d7f12cb598b075453173532a00d91Jeff Hao result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args); 23653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers EXPECT_EQ(-1, result.GetI()); 23753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 23853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[0].i = INT_MAX; 23953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[1].i = INT_MAX; 24015e9ad1d028d7f12cb598b075453173532a00d91Jeff Hao result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args); 24153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers EXPECT_EQ(-2, result.GetI()); 24253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers } 24353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 24453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers void InvokeSumIntIntIntMethod(bool is_static) { 24553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers ScopedObjectAccess soa(env_); 2463d21bdf8894e780d349c481e5c9e29fe1556051cMathieu Chartier ArtMethod* method; 24753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers mirror::Object* receiver; 24853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers ReflectionTestMakeExecutable(&method, &receiver, is_static, "sum", "(III)I"); 24915e9ad1d028d7f12cb598b075453173532a00d91Jeff Hao ScopedLocalRef<jobject> receiver_ref(soa.Env(), soa.AddLocalReference<jobject>(receiver)); 25053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers jvalue args[3]; 25153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 25253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[0].i = 0; 25353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[1].i = 0; 25453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[2].i = 0; 25515e9ad1d028d7f12cb598b075453173532a00d91Jeff Hao JValue result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args); 25653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers EXPECT_EQ(0, result.GetI()); 25753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 25853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[0].i = 1; 25953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[1].i = 2; 26053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[2].i = 3; 26115e9ad1d028d7f12cb598b075453173532a00d91Jeff Hao result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args); 26253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers EXPECT_EQ(6, result.GetI()); 26353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 26453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[0].i = -1; 26553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[1].i = 2; 26653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[2].i = -3; 26715e9ad1d028d7f12cb598b075453173532a00d91Jeff Hao result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args); 26853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers EXPECT_EQ(-2, result.GetI()); 26953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 27053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[0].i = INT_MAX; 27153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[1].i = INT_MIN; 27253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[2].i = INT_MAX; 27315e9ad1d028d7f12cb598b075453173532a00d91Jeff Hao result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args); 27453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers EXPECT_EQ(2147483646, result.GetI()); 27553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 27653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[0].i = INT_MAX; 27753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[1].i = INT_MAX; 27853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[2].i = INT_MAX; 27915e9ad1d028d7f12cb598b075453173532a00d91Jeff Hao result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args); 28053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers EXPECT_EQ(2147483645, result.GetI()); 28153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers } 28253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 28353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers void InvokeSumIntIntIntIntMethod(bool is_static) { 28453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers ScopedObjectAccess soa(env_); 2853d21bdf8894e780d349c481e5c9e29fe1556051cMathieu Chartier ArtMethod* method; 28653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers mirror::Object* receiver; 28753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers ReflectionTestMakeExecutable(&method, &receiver, is_static, "sum", "(IIII)I"); 28815e9ad1d028d7f12cb598b075453173532a00d91Jeff Hao ScopedLocalRef<jobject> receiver_ref(soa.Env(), soa.AddLocalReference<jobject>(receiver)); 28953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers jvalue args[4]; 29053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 29153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[0].i = 0; 29253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[1].i = 0; 29353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[2].i = 0; 29453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[3].i = 0; 29515e9ad1d028d7f12cb598b075453173532a00d91Jeff Hao JValue result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args); 29653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers EXPECT_EQ(0, result.GetI()); 29753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 29853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[0].i = 1; 29953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[1].i = 2; 30053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[2].i = 3; 30153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[3].i = 4; 30215e9ad1d028d7f12cb598b075453173532a00d91Jeff Hao result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args); 30353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers EXPECT_EQ(10, result.GetI()); 30453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 30553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[0].i = -1; 30653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[1].i = 2; 30753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[2].i = -3; 30853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[3].i = 4; 30915e9ad1d028d7f12cb598b075453173532a00d91Jeff Hao result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args); 31053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers EXPECT_EQ(2, result.GetI()); 31153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 31253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[0].i = INT_MAX; 31353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[1].i = INT_MIN; 31453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[2].i = INT_MAX; 31553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[3].i = INT_MIN; 31615e9ad1d028d7f12cb598b075453173532a00d91Jeff Hao result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args); 31753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers EXPECT_EQ(-2, result.GetI()); 31853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 31953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[0].i = INT_MAX; 32053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[1].i = INT_MAX; 32153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[2].i = INT_MAX; 32253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[3].i = INT_MAX; 32315e9ad1d028d7f12cb598b075453173532a00d91Jeff Hao result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args); 32453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers EXPECT_EQ(-4, result.GetI()); 32553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers } 32653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 32753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers void InvokeSumIntIntIntIntIntMethod(bool is_static) { 32853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers ScopedObjectAccess soa(env_); 3293d21bdf8894e780d349c481e5c9e29fe1556051cMathieu Chartier ArtMethod* method; 33053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers mirror::Object* receiver; 33153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers ReflectionTestMakeExecutable(&method, &receiver, is_static, "sum", "(IIIII)I"); 33215e9ad1d028d7f12cb598b075453173532a00d91Jeff Hao ScopedLocalRef<jobject> receiver_ref(soa.Env(), soa.AddLocalReference<jobject>(receiver)); 33353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers jvalue args[5]; 33453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 33553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[0].i = 0; 33653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[1].i = 0; 33753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[2].i = 0; 33853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[3].i = 0; 33953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[4].i = 0; 34015e9ad1d028d7f12cb598b075453173532a00d91Jeff Hao JValue result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args); 34153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers EXPECT_EQ(0, result.GetI()); 34253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 34353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[0].i = 1; 34453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[1].i = 2; 34553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[2].i = 3; 34653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[3].i = 4; 34753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[4].i = 5; 34815e9ad1d028d7f12cb598b075453173532a00d91Jeff Hao result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args); 34953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers EXPECT_EQ(15, result.GetI()); 35053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 35153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[0].i = -1; 35253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[1].i = 2; 35353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[2].i = -3; 35453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[3].i = 4; 35553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[4].i = -5; 35615e9ad1d028d7f12cb598b075453173532a00d91Jeff Hao result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args); 35753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers EXPECT_EQ(-3, result.GetI()); 35853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 35953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[0].i = INT_MAX; 36053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[1].i = INT_MIN; 36153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[2].i = INT_MAX; 36253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[3].i = INT_MIN; 36353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[4].i = INT_MAX; 36415e9ad1d028d7f12cb598b075453173532a00d91Jeff Hao result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args); 36553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers EXPECT_EQ(2147483645, result.GetI()); 36653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 36753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[0].i = INT_MAX; 36853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[1].i = INT_MAX; 36953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[2].i = INT_MAX; 37053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[3].i = INT_MAX; 37153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[4].i = INT_MAX; 37215e9ad1d028d7f12cb598b075453173532a00d91Jeff Hao result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args); 37353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers EXPECT_EQ(2147483643, result.GetI()); 37453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers } 37553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 37653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers void InvokeSumDoubleDoubleMethod(bool is_static) { 37753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers ScopedObjectAccess soa(env_); 3783d21bdf8894e780d349c481e5c9e29fe1556051cMathieu Chartier ArtMethod* method; 37953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers mirror::Object* receiver; 38053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers ReflectionTestMakeExecutable(&method, &receiver, is_static, "sum", "(DD)D"); 38115e9ad1d028d7f12cb598b075453173532a00d91Jeff Hao ScopedLocalRef<jobject> receiver_ref(soa.Env(), soa.AddLocalReference<jobject>(receiver)); 38253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers jvalue args[2]; 38353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 38453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[0].d = 0.0; 38553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[1].d = 0.0; 38615e9ad1d028d7f12cb598b075453173532a00d91Jeff Hao JValue result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args); 387647b1a86f518d8db0331b3d52a96392b7a62504bIan Rogers EXPECT_DOUBLE_EQ(0.0, result.GetD()); 38853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 38953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[0].d = 1.0; 39053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[1].d = 2.0; 39115e9ad1d028d7f12cb598b075453173532a00d91Jeff Hao result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args); 392647b1a86f518d8db0331b3d52a96392b7a62504bIan Rogers EXPECT_DOUBLE_EQ(3.0, result.GetD()); 39353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 39453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[0].d = 1.0; 39553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[1].d = -2.0; 39615e9ad1d028d7f12cb598b075453173532a00d91Jeff Hao result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args); 397647b1a86f518d8db0331b3d52a96392b7a62504bIan Rogers EXPECT_DOUBLE_EQ(-1.0, result.GetD()); 39853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 39953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[0].d = DBL_MAX; 40053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[1].d = DBL_MIN; 40115e9ad1d028d7f12cb598b075453173532a00d91Jeff Hao result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args); 402647b1a86f518d8db0331b3d52a96392b7a62504bIan Rogers EXPECT_DOUBLE_EQ(1.7976931348623157e308, result.GetD()); 40353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 40453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[0].d = DBL_MAX; 40553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[1].d = DBL_MAX; 40615e9ad1d028d7f12cb598b075453173532a00d91Jeff Hao result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args); 407647b1a86f518d8db0331b3d52a96392b7a62504bIan Rogers EXPECT_DOUBLE_EQ(INFINITY, result.GetD()); 40853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers } 40953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 41053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers void InvokeSumDoubleDoubleDoubleMethod(bool is_static) { 41153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers ScopedObjectAccess soa(env_); 4123d21bdf8894e780d349c481e5c9e29fe1556051cMathieu Chartier ArtMethod* method; 41353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers mirror::Object* receiver; 41453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers ReflectionTestMakeExecutable(&method, &receiver, is_static, "sum", "(DDD)D"); 41515e9ad1d028d7f12cb598b075453173532a00d91Jeff Hao ScopedLocalRef<jobject> receiver_ref(soa.Env(), soa.AddLocalReference<jobject>(receiver)); 41653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers jvalue args[3]; 41753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 41853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[0].d = 0.0; 41953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[1].d = 0.0; 42053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[2].d = 0.0; 42115e9ad1d028d7f12cb598b075453173532a00d91Jeff Hao JValue result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args); 422647b1a86f518d8db0331b3d52a96392b7a62504bIan Rogers EXPECT_DOUBLE_EQ(0.0, result.GetD()); 42353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 42453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[0].d = 1.0; 42553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[1].d = 2.0; 42653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[2].d = 3.0; 42715e9ad1d028d7f12cb598b075453173532a00d91Jeff Hao result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args); 428647b1a86f518d8db0331b3d52a96392b7a62504bIan Rogers EXPECT_DOUBLE_EQ(6.0, result.GetD()); 42953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 43053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[0].d = 1.0; 43153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[1].d = -2.0; 43253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[2].d = 3.0; 43315e9ad1d028d7f12cb598b075453173532a00d91Jeff Hao result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args); 434647b1a86f518d8db0331b3d52a96392b7a62504bIan Rogers EXPECT_DOUBLE_EQ(2.0, result.GetD()); 43553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers } 43653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 43753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers void InvokeSumDoubleDoubleDoubleDoubleMethod(bool is_static) { 43853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers ScopedObjectAccess soa(env_); 4393d21bdf8894e780d349c481e5c9e29fe1556051cMathieu Chartier ArtMethod* method; 44053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers mirror::Object* receiver; 44153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers ReflectionTestMakeExecutable(&method, &receiver, is_static, "sum", "(DDDD)D"); 44215e9ad1d028d7f12cb598b075453173532a00d91Jeff Hao ScopedLocalRef<jobject> receiver_ref(soa.Env(), soa.AddLocalReference<jobject>(receiver)); 44353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers jvalue args[4]; 44453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 44553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[0].d = 0.0; 44653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[1].d = 0.0; 44753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[2].d = 0.0; 44853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[3].d = 0.0; 44915e9ad1d028d7f12cb598b075453173532a00d91Jeff Hao JValue result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args); 450647b1a86f518d8db0331b3d52a96392b7a62504bIan Rogers EXPECT_DOUBLE_EQ(0.0, result.GetD()); 45153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 45253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[0].d = 1.0; 45353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[1].d = 2.0; 45453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[2].d = 3.0; 45553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[3].d = 4.0; 45615e9ad1d028d7f12cb598b075453173532a00d91Jeff Hao result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args); 457647b1a86f518d8db0331b3d52a96392b7a62504bIan Rogers EXPECT_DOUBLE_EQ(10.0, result.GetD()); 45853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 45953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[0].d = 1.0; 46053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[1].d = -2.0; 46153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[2].d = 3.0; 46253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[3].d = -4.0; 46315e9ad1d028d7f12cb598b075453173532a00d91Jeff Hao result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args); 464647b1a86f518d8db0331b3d52a96392b7a62504bIan Rogers EXPECT_DOUBLE_EQ(-2.0, result.GetD()); 46553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers } 46653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 46753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers void InvokeSumDoubleDoubleDoubleDoubleDoubleMethod(bool is_static) { 46853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers ScopedObjectAccess soa(env_); 4693d21bdf8894e780d349c481e5c9e29fe1556051cMathieu Chartier ArtMethod* method; 47053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers mirror::Object* receiver; 47153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers ReflectionTestMakeExecutable(&method, &receiver, is_static, "sum", "(DDDDD)D"); 47215e9ad1d028d7f12cb598b075453173532a00d91Jeff Hao ScopedLocalRef<jobject> receiver_ref(soa.Env(), soa.AddLocalReference<jobject>(receiver)); 47353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers jvalue args[5]; 47453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 47553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[0].d = 0.0; 47653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[1].d = 0.0; 47753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[2].d = 0.0; 47853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[3].d = 0.0; 47953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[4].d = 0.0; 48015e9ad1d028d7f12cb598b075453173532a00d91Jeff Hao JValue result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args); 481647b1a86f518d8db0331b3d52a96392b7a62504bIan Rogers EXPECT_DOUBLE_EQ(0.0, result.GetD()); 48253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 48353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[0].d = 1.0; 48453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[1].d = 2.0; 48553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[2].d = 3.0; 48653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[3].d = 4.0; 48753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[4].d = 5.0; 48815e9ad1d028d7f12cb598b075453173532a00d91Jeff Hao result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args); 489647b1a86f518d8db0331b3d52a96392b7a62504bIan Rogers EXPECT_DOUBLE_EQ(15.0, result.GetD()); 49053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 49153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[0].d = 1.0; 49253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[1].d = -2.0; 49353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[2].d = 3.0; 49453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[3].d = -4.0; 49553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[4].d = 5.0; 49615e9ad1d028d7f12cb598b075453173532a00d91Jeff Hao result = InvokeWithJValues(soa, receiver_ref.get(), soa.EncodeMethod(method), args); 497647b1a86f518d8db0331b3d52a96392b7a62504bIan Rogers EXPECT_DOUBLE_EQ(3.0, result.GetD()); 49853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers } 49953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 50053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers JavaVMExt* vm_; 50153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers JNIEnv* env_; 50253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers jclass aioobe_; 50353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers jclass ase_; 50453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers jclass sioobe_; 50553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers}; 50653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 50753b8b09fc80329539585dcf43657bc5f4ecefdffIan RogersTEST_F(ReflectionTest, StaticMainMethod) { 50853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers ScopedObjectAccess soa(Thread::Current()); 50953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers jobject jclass_loader = LoadDex("Main"); 510eb8167a4f4d27fce0530f6724ab8032610cd146bMathieu Chartier StackHandleScope<1> hs(soa.Self()); 511eb8167a4f4d27fce0530f6724ab8032610cd146bMathieu Chartier Handle<mirror::ClassLoader> class_loader( 512eb8167a4f4d27fce0530f6724ab8032610cd146bMathieu Chartier hs.NewHandle(soa.Decode<mirror::ClassLoader*>(jclass_loader))); 51353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers CompileDirectMethod(class_loader, "Main", "main", "([Ljava/lang/String;)V"); 51453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 51553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers mirror::Class* klass = class_linker_->FindClass(soa.Self(), "LMain;", class_loader); 5162cebb24bfc3247d3e9be138a3350106737455918Mathieu Chartier ASSERT_TRUE(klass != nullptr); 51753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 5183d21bdf8894e780d349c481e5c9e29fe1556051cMathieu Chartier ArtMethod* method = klass->FindDirectMethod("main", "([Ljava/lang/String;)V", sizeof(void*)); 5192cebb24bfc3247d3e9be138a3350106737455918Mathieu Chartier ASSERT_TRUE(method != nullptr); 52053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 52153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers // Start runtime. 52253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers bool started = runtime_->Start(); 52353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers CHECK(started); 52453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers soa.Self()->TransitionFromSuspendedToRunnable(); 52553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 52653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers jvalue args[1]; 52753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers args[0].l = nullptr; 52853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers InvokeWithJValues(soa, nullptr, soa.EncodeMethod(method), args); 52953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers} 53053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 53153b8b09fc80329539585dcf43657bc5f4ecefdffIan RogersTEST_F(ReflectionTest, StaticNopMethod) { 53253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers InvokeNopMethod(true); 53353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers} 53453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 53553b8b09fc80329539585dcf43657bc5f4ecefdffIan RogersTEST_F(ReflectionTest, NonStaticNopMethod) { 53653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers InvokeNopMethod(false); 53753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers} 53853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 53953b8b09fc80329539585dcf43657bc5f4ecefdffIan RogersTEST_F(ReflectionTest, StaticIdentityByteMethod) { 54053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers InvokeIdentityByteMethod(true); 54153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers} 54253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 54353b8b09fc80329539585dcf43657bc5f4ecefdffIan RogersTEST_F(ReflectionTest, NonStaticIdentityByteMethod) { 54453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers InvokeIdentityByteMethod(false); 54553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers} 54653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 54753b8b09fc80329539585dcf43657bc5f4ecefdffIan RogersTEST_F(ReflectionTest, StaticIdentityIntMethod) { 54853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers InvokeIdentityIntMethod(true); 54953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers} 55053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 55153b8b09fc80329539585dcf43657bc5f4ecefdffIan RogersTEST_F(ReflectionTest, NonStaticIdentityIntMethod) { 55253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers InvokeIdentityIntMethod(false); 55353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers} 55453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 55553b8b09fc80329539585dcf43657bc5f4ecefdffIan RogersTEST_F(ReflectionTest, StaticIdentityDoubleMethod) { 55653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers InvokeIdentityDoubleMethod(true); 55753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers} 55853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 55953b8b09fc80329539585dcf43657bc5f4ecefdffIan RogersTEST_F(ReflectionTest, NonStaticIdentityDoubleMethod) { 56053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers InvokeIdentityDoubleMethod(false); 56153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers} 56253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 56353b8b09fc80329539585dcf43657bc5f4ecefdffIan RogersTEST_F(ReflectionTest, StaticSumIntIntMethod) { 56453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers InvokeSumIntIntMethod(true); 56553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers} 56653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 56753b8b09fc80329539585dcf43657bc5f4ecefdffIan RogersTEST_F(ReflectionTest, NonStaticSumIntIntMethod) { 56853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers InvokeSumIntIntMethod(false); 56953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers} 57053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 57153b8b09fc80329539585dcf43657bc5f4ecefdffIan RogersTEST_F(ReflectionTest, StaticSumIntIntIntMethod) { 57253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers InvokeSumIntIntIntMethod(true); 57353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers} 57453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 57553b8b09fc80329539585dcf43657bc5f4ecefdffIan RogersTEST_F(ReflectionTest, NonStaticSumIntIntIntMethod) { 57653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers InvokeSumIntIntIntMethod(false); 57753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers} 57853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 57953b8b09fc80329539585dcf43657bc5f4ecefdffIan RogersTEST_F(ReflectionTest, StaticSumIntIntIntIntMethod) { 58053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers InvokeSumIntIntIntIntMethod(true); 58153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers} 58253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 58353b8b09fc80329539585dcf43657bc5f4ecefdffIan RogersTEST_F(ReflectionTest, NonStaticSumIntIntIntIntMethod) { 58453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers InvokeSumIntIntIntIntMethod(false); 58553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers} 58653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 58753b8b09fc80329539585dcf43657bc5f4ecefdffIan RogersTEST_F(ReflectionTest, StaticSumIntIntIntIntIntMethod) { 58853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers InvokeSumIntIntIntIntIntMethod(true); 58953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers} 59053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 59153b8b09fc80329539585dcf43657bc5f4ecefdffIan RogersTEST_F(ReflectionTest, NonStaticSumIntIntIntIntIntMethod) { 59253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers InvokeSumIntIntIntIntIntMethod(false); 59353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers} 59453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 59553b8b09fc80329539585dcf43657bc5f4ecefdffIan RogersTEST_F(ReflectionTest, StaticSumDoubleDoubleMethod) { 59653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers InvokeSumDoubleDoubleMethod(true); 59753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers} 59853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 59953b8b09fc80329539585dcf43657bc5f4ecefdffIan RogersTEST_F(ReflectionTest, NonStaticSumDoubleDoubleMethod) { 60053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers InvokeSumDoubleDoubleMethod(false); 60153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers} 60253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 60353b8b09fc80329539585dcf43657bc5f4ecefdffIan RogersTEST_F(ReflectionTest, StaticSumDoubleDoubleDoubleMethod) { 60453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers InvokeSumDoubleDoubleDoubleMethod(true); 60553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers} 60653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 60753b8b09fc80329539585dcf43657bc5f4ecefdffIan RogersTEST_F(ReflectionTest, NonStaticSumDoubleDoubleDoubleMethod) { 60853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers InvokeSumDoubleDoubleDoubleMethod(false); 60953b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers} 61053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 61153b8b09fc80329539585dcf43657bc5f4ecefdffIan RogersTEST_F(ReflectionTest, StaticSumDoubleDoubleDoubleDoubleMethod) { 61253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers InvokeSumDoubleDoubleDoubleDoubleMethod(true); 61353b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers} 61453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 61553b8b09fc80329539585dcf43657bc5f4ecefdffIan RogersTEST_F(ReflectionTest, NonStaticSumDoubleDoubleDoubleDoubleMethod) { 61653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers InvokeSumDoubleDoubleDoubleDoubleMethod(false); 61753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers} 61853b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 61953b8b09fc80329539585dcf43657bc5f4ecefdffIan RogersTEST_F(ReflectionTest, StaticSumDoubleDoubleDoubleDoubleDoubleMethod) { 62053b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers InvokeSumDoubleDoubleDoubleDoubleDoubleMethod(true); 62153b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers} 62253b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 62353b8b09fc80329539585dcf43657bc5f4ecefdffIan RogersTEST_F(ReflectionTest, NonStaticSumDoubleDoubleDoubleDoubleDoubleMethod) { 62453b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers InvokeSumDoubleDoubleDoubleDoubleDoubleMethod(false); 62553b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers} 62653b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers 62753b8b09fc80329539585dcf43657bc5f4ecefdffIan Rogers} // namespace art 628