static void test_similar(void) { GPR_ASSERT(1 == gpr_time_similar(gpr_inf_future(GPR_TIMESPAN), gpr_inf_future(GPR_TIMESPAN), gpr_time_0(GPR_TIMESPAN))); GPR_ASSERT(1 == gpr_time_similar(gpr_inf_past(GPR_TIMESPAN), gpr_inf_past(GPR_TIMESPAN), gpr_time_0(GPR_TIMESPAN))); GPR_ASSERT(0 == gpr_time_similar(gpr_inf_past(GPR_TIMESPAN), gpr_inf_future(GPR_TIMESPAN), gpr_time_0(GPR_TIMESPAN))); GPR_ASSERT(0 == gpr_time_similar(gpr_inf_future(GPR_TIMESPAN), gpr_inf_past(GPR_TIMESPAN), gpr_time_0(GPR_TIMESPAN))); GPR_ASSERT(1 == gpr_time_similar(gpr_time_from_micros(10, GPR_TIMESPAN), gpr_time_from_micros(10, GPR_TIMESPAN), gpr_time_0(GPR_TIMESPAN))); GPR_ASSERT(1 == gpr_time_similar(gpr_time_from_micros(10, GPR_TIMESPAN), gpr_time_from_micros(15, GPR_TIMESPAN), gpr_time_from_micros(10, GPR_TIMESPAN))); GPR_ASSERT(1 == gpr_time_similar(gpr_time_from_micros(15, GPR_TIMESPAN), gpr_time_from_micros(10, GPR_TIMESPAN), gpr_time_from_micros(10, GPR_TIMESPAN))); GPR_ASSERT(0 == gpr_time_similar(gpr_time_from_micros(10, GPR_TIMESPAN), gpr_time_from_micros(25, GPR_TIMESPAN), gpr_time_from_micros(10, GPR_TIMESPAN))); GPR_ASSERT(0 == gpr_time_similar(gpr_time_from_micros(25, GPR_TIMESPAN), gpr_time_from_micros(10, GPR_TIMESPAN), gpr_time_from_micros(10, GPR_TIMESPAN))); }
/** * Checks whether the two times are within $threshold of each other * @param Timeval $a The first time to compare * @param Timeval $b The second time to compare * @param Timeval $threshold The threshold to check against * @return bool True if $a and $b are within $threshold, False otherwise */ PHP_METHOD(Timeval, similar) { zval *a_obj; zval *b_obj; zval *thresh_obj; /* "OOO" == 3 Objects */ #ifndef FAST_ZPP if (zend_parse_parameters(ZEND_NUM_ARGS(), "OOO", &a_obj, grpc_ce_timeval, &b_obj, grpc_ce_timeval, &thresh_obj, grpc_ce_timeval) == FAILURE) { zend_throw_exception(spl_ce_InvalidArgumentException, "compare expects three Timevals", 1); return; } #else ZEND_PARSE_PARAMETERS_START(3, 3) Z_PARAM_OBJECT_OF_CLASS(a_obj, grpc_ce_timeval) Z_PARAM_OBJECT_OF_CLASS(b_obj, grpc_ce_timeval) Z_PARAM_OBJECT_OF_CLASS(thresh_obj, grpc_ce_timeval) ZEND_PARSE_PARAMETERS_END(); #endif wrapped_grpc_timeval *a = Z_WRAPPED_GRPC_TIMEVAL_P(a_obj); wrapped_grpc_timeval *b = Z_WRAPPED_GRPC_TIMEVAL_P(b_obj); wrapped_grpc_timeval *thresh = Z_WRAPPED_GRPC_TIMEVAL_P(thresh_obj); int result = gpr_time_similar(a->wrapped, b->wrapped, thresh->wrapped); RETURN_BOOL(result); }