Пример #1
0
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)));
}
Пример #2
0
/**
 * 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);
}