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