1/* 2 * Copyright (c) 2021 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16#include <stdlib.h> 17 18#include "gtest/gtest.h" 19#include "log.h" 20#include "utils.h" 21 22using namespace testing::ext; 23 24class ActsUtilMathApiTest : public testing::Test { 25protected: 26 // SetUpTestCase: Testsuit setup, run before 1st testcase 27 static void SetUpTestCase(void) 28 { 29 } 30 // TearDownTestCase: Testsuit teardown, run after last testcase 31 static void TearDownTestCase(void) 32 { 33 } 34 // Testcase setup 35 virtual void SetUp() 36 { 37 } 38 // Testcase teardown 39 virtual void TearDown() 40 { 41 } 42}; 43 44/** 45* @tc.number SUB_KERNEL_UTIL_MATH_DRAND48_0100 46* @tc.name test drand48 api 47* @tc.desc [C- SOFTWARE -0200] 48*/ 49HWTEST_F(ActsUtilMathApiTest, testDrand480100, Function | MediumTest | Level1) { 50 double returnVal; 51 long seedVal; 52 53 seedVal = 12345; 54 srand48(seedVal); 55 returnVal = drand48(); 56 LOGD(" drand48 returnVal:='%f'\n", returnVal); 57 ASSERT_TRUE(returnVal >= 0.0 && returnVal < 1.0) << "ErrInfo: drand48 returnVal:='" << returnVal << "'"; 58} 59 60/** 61* @tc.number SUB_KERNEL_UTIL_MATH_ERAND48_0200 62* @tc.name test erand48 api 63* @tc.desc [C- SOFTWARE -0200] 64*/ 65HWTEST_F(ActsUtilMathApiTest, testErand480200, Function | MediumTest | Level1) { 66 double returnVal; 67 unsigned short xsubi[3] = {0, 1, 2}; 68 69 returnVal = erand48(xsubi); 70 LOGD(" erand48 returnVal:='%f'\n", returnVal); 71 ASSERT_TRUE(returnVal >= 0.0 && returnVal < 1.0) << "ErrInfo: erand48 returnVal:='" << returnVal << "'"; 72} 73 74/** 75* @tc.number SUB_KERNEL_UTIL_MATH_JRAND48_0300 76* @tc.name test jrand48 api 77* @tc.desc [C- SOFTWARE -0200] 78*/ 79HWTEST_F(ActsUtilMathApiTest, testJrand480300, Function | MediumTest | Level1) { 80 long long returnVal; 81 unsigned short xsubi[3] = {0, 1, 2}; 82 83 returnVal = jrand48(xsubi); 84 LOGD(" jrand48 returnVal:='%ld'\n", returnVal); 85 ASSERT_TRUE(returnVal >= -2147483648 && returnVal < 2147483648) 86 << "ErrInfo: jrand48 returnVal:='" << returnVal << "'"; 87} 88 89/** 90* @tc.number SUB_KERNEL_UTIL_MATH_MRAND48_0400 91* @tc.name test mrand48 api 92* @tc.desc [C- SOFTWARE -0200] 93*/ 94HWTEST_F(ActsUtilMathApiTest, testMrand480400, Function | MediumTest | Level1) { 95 long long returnVal; 96 unsigned short paraVal[7] = {0, 1, 2, 3, 4, 5, 6}; 97 98 lcong48(paraVal); 99 returnVal = mrand48(); 100 LOGD(" mrand48 returnVal:='%ld'\n", returnVal); 101 ASSERT_TRUE(returnVal >= -2147483648 && returnVal < 2147483648) 102 << "ErrInfo: mrand48 returnVal:='" << returnVal << "'"; 103} 104 105/** 106* @tc.number SUB_KERNEL_UTIL_MATH_LRAND48_0500 107* @tc.name test lrand48 api 108* @tc.desc [C- SOFTWARE -0200] 109*/ 110HWTEST_F(ActsUtilMathApiTest, testLrand480500, Function | MediumTest | Level1) { 111 long long returnVal; 112 unsigned short paraVal[3] = {0, 1, 2}; 113 114 seed48(paraVal); 115 returnVal = lrand48(); 116 LOGD(" lrand48 returnVal:='%ld'\n", returnVal); 117 ASSERT_TRUE(returnVal >= 0 && returnVal < 2147483648) << "ErrInfo: lrand48 returnVal:='" << returnVal << "'"; 118} 119 120/** 121* @tc.number SUB_KERNEL_UTIL_MATH_SRANDOM_0600 122* @tc.name test srandom api 123* @tc.desc [C- SOFTWARE -0200] 124*/ 125HWTEST_F(ActsUtilMathApiTest, testSrandom0600, Function | MediumTest | Level1) { 126 char *returnVal = nullptr; 127 unsigned int seedVal; 128 char stateVal[8]; 129 size_t stateSize; 130 131 seedVal = 1; 132 stateSize = 8; 133 srandom(seedVal); 134 returnVal = initstate(seedVal, stateVal, stateSize); 135 LOGD(" initstate returnVal:='%x'\n", returnVal); 136 ASSERT_TRUE(returnVal != nullptr) << "ErrInfo: srandom returnVal:='" << returnVal << "'"; 137 returnVal = setstate(stateVal); 138 LOGD(" setstate returnVal:='%x'\n", returnVal); 139 ASSERT_TRUE(returnVal != nullptr) << "ErrInfo: srandom returnVal:='" << returnVal << "'"; 140} 141 142/** 143* @tc.number SUB_KERNEL_UTIL_MATH_NRAND48_0700 144* @tc.name test nrand48 api 145* @tc.desc [C- SOFTWARE -0200] 146*/ 147HWTEST_F(ActsUtilMathApiTest, testNrand480700, Function | MediumTest | Level1) { 148 long long returnVal; 149 unsigned short paraVal[3] = {0, 1, 2}; 150 151 returnVal = nrand48(paraVal); 152 LOGD(" nrand48 returnVal:='%ld'\n", returnVal); 153 ASSERT_TRUE(returnVal >= 0 && returnVal < 2147483648) << "ErrInfo: nrand48 returnVal:='" << returnVal << "'"; 154} 155 156/** 157* @tc.number SUB_KERNEL_UTIL_MATH_RAND_R_0800 158* @tc.name test rand_r api 159* @tc.desc [C- SOFTWARE -0200] 160*/ 161HWTEST_F(ActsUtilMathApiTest, testNrand480800, Function | MediumTest | Level1) { 162 int returnVal; 163 unsigned int paraVal; 164 165 returnVal = rand_r(¶Val); 166 LOGD(" rand_r returnVal:='%ld'\n", returnVal); 167 ASSERT_TRUE(returnVal >= 0 && returnVal <= RAND_MAX) << "ErrInfo: rand_r returnVal:='" << returnVal << "'"; 168} 169