10d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks// This file is automatically generated from 20d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks// frameworks/rs/tests/java_api/RSUnitTests/RSUnitTests.py 30d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks/* 40d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks * Copyright (C) 2017 The Android Open Source Project 50d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks * 60d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks * Licensed under the Apache License, Version 2.0 (the "License"); 70d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks * you may not use this file except in compliance with the License. 80d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks * You may obtain a copy of the License at 90d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks * 100d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks * http://www.apache.org/licenses/LICENSE-2.0 110d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks * 120d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks * Unless required by applicable law or agreed to in writing, software 130d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks * distributed under the License is distributed on an "AS IS" BASIS, 140d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 150d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks * See the License for the specific language governing permissions and 160d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks * limitations under the License. 170d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks */ 180d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks 190d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks#pragma version(1) 200d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks 210d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks#pragma rs java_package_name(com.android.rs.unittest) 220d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks 230d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubankstypedef struct TestResult_s { 240d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks rs_allocation name; 250d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks bool pass; 260d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks float score; 270d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks int64_t time; 280d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks} TestResult; 290d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks//TestResult *g_results; 300d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks 310d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanksstatic int64_t g_time; 320d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks 330d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanksstatic inline void start(void) { 340d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks g_time = rsUptimeMillis(); 350d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks} 360d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks 370d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanksstatic inline float end(uint32_t idx) { 380d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks int64_t t = rsUptimeMillis() - g_time; 390d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks //g_results[idx].time = t; 400d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks //rsDebug("test time", (int)t); 410d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks return ((float)t) / 1000.f; 420d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks} 430d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks 440d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks#define _RS_ASSERT(b) \ 450d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanksdo { \ 460d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks if (!(b)) { \ 470d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks failed = true; \ 480d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks rsDebug(#b " FAILED", 0); \ 490d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks } \ 500d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks\ 510d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks} while (0) 520d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks 530d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks#define _RS_ASSERT_EQU(e1, e2) \ 540d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks (((e1) != (e2)) ? (failed = true, rsDebug(#e1 " != " #e2, (e1), (e2)), false) : true) 550d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks 560d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanksstatic const int iposinf = 0x7f800000; 570d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanksstatic const int ineginf = 0xff800000; 580d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks 590d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanksstatic inline const float posinf() { 600d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks float f = *((float*)&iposinf); 610d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks return f; 620d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks} 630d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks 640d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanksstatic inline const float neginf() { 650d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks float f = *((float*)&ineginf); 660d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks return f; 670d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks} 680d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks 690d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanksstatic inline bool isposinf(float f) { 700d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks int i = *((int*)(void*)&f); 710d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks return (i == iposinf); 720d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks} 730d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks 740d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanksstatic inline bool isneginf(float f) { 750d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks int i = *((int*)(void*)&f); 760d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks return (i == ineginf); 770d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks} 780d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks 790d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanksstatic inline bool isnan(float f) { 800d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks int i = *((int*)(void*)&f); 810d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks return (((i & 0x7f800000) == 0x7f800000) && (i & 0x007fffff)); 820d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks} 830d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks 840d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanksstatic inline bool isposzero(float f) { 850d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks int i = *((int*)(void*)&f); 860d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks return (i == 0x00000000); 870d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks} 880d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks 890d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanksstatic inline bool isnegzero(float f) { 900d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks int i = *((int*)(void*)&f); 910d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks return (i == 0x80000000); 920d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks} 930d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks 940d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanksstatic inline bool iszero(float f) { 950d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks return isposzero(f) || isnegzero(f); 960d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks} 970d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks 980d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks/* Absolute epsilon used for floats. Value is similar to float.h. */ 990d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks#ifndef FLT_EPSILON 1000d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks#define FLT_EPSILON 1.19e7f 1010d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks#endif 1020d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks/* Max ULPs while still being considered "equal". Only used when this number 1030d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks of ULPs is of a greater size than FLT_EPSILON. */ 1040d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks#define FLT_MAX_ULP 1 1050d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks 1060d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks/* Calculate the difference in ULPs between the two values. (Return zero on 1070d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks perfect equality.) */ 1080d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanksstatic inline int float_dist(float f1, float f2) { 1090d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks return *((int *)(&f1)) - *((int *)(&f2)); 1100d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks} 1110d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks 1120d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks/* Check if two floats are essentially equal. Will fail with some values 1130d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks due to design. (Validate using FLT_EPSILON or similar if necessary.) */ 1140d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanksstatic inline bool float_almost_equal(float f1, float f2) { 1150d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks int *i1 = (int*)(&f1); 1160d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks int *i2 = (int*)(&f2); 1170d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks 1180d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks // Check for sign equality 1190d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks if ( ((*i1 >> 31) == 0) != ((*i2 >> 31) == 0) ) { 1200d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks // Handle signed zeroes 1210d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks if (f1 == f2) 1220d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks return true; 1230d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks return false; 1240d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks } 1250d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks 1260d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks // Check with ULP distance 1270d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks if (float_dist(f1, f2) > FLT_MAX_ULP) 1280d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks return false; 1290d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks return true; 1300d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks} 1310d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks 1320d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks/* These constants must match those in UnitTest.java */ 1330d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanksstatic const int RS_MSG_TEST_PASSED = 100; 1340d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanksstatic const int RS_MSG_TEST_FAILED = 101; 1350d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks 1360d13f3929129bf7e34bde1ed3670195c37a180ebArthur Eubanks#define RSTEST_COMPAT 137