Exemplo n.º 1
0
TEST(tagged, score_successor) {
  ASSERT_SAME(new_score(scEq, 1), get_score_successor(new_score(scEq, 0)));
  ASSERT_SAME(new_score(scEq, 2), get_score_successor(new_score(scEq, 1)));
  ASSERT_SAME(new_score(scEq, 0xFFFFFFFF), get_score_successor(new_score(scEq, 0xFFFFFFFE)));
  ASSERT_SAME(new_score(scIs, 1), get_score_successor(new_score(scIs, 0)));
  ASSERT_SAME(new_score(scIs, 2), get_score_successor(new_score(scIs, 1)));
  ASSERT_SAME(new_score(scIs, 0xFFFFFFFF), get_score_successor(new_score(scIs, 0xFFFFFFFE)));
}
Exemplo n.º 2
0
static value_t find_best_match(runtime_t *runtime, value_t current,
    value_t target, value_t current_score, value_t space, value_t *score_out) {
  if (value_identity_compare(current, target)) {
    *score_out = current_score;
    return success();
  } else {
    TRY_DEF(parents, get_type_parents(runtime, space, current));
    int64_t length = get_array_buffer_length(parents);
    value_t score = new_no_match_score();
    for (int64_t i = 0; i < length; i++) {
      value_t parent = get_array_buffer_at(parents, i);
      value_t next_score = whatever();
      TRY(find_best_match(runtime, parent, target, get_score_successor(current_score),
          space, &next_score));
      score = best_score(score, next_score);
    }
    *score_out = score;
    return success();
  }
}