Example #1
0
void test_rf_set_equal() {
	char a[] = "a";
	char b[] = "b";
	char c[] = "c";

	rf_SetElement *elems1[] = {
		rf_set_element_new_string(a),
		rf_set_element_new_string(b),
		rf_set_element_new_string(c),
	};
	rf_Set *set1 = rf_set_new(3, elems1);

	rf_SetElement *elems2[] = {
		rf_set_element_new_string(c),
		rf_set_element_new_string(b),
		rf_set_element_new_string(a),
	};
	rf_Set *set2 = rf_set_new(3, elems2);

	rf_SetElement *elems3[] = {
		rf_set_element_new_string(a),
		rf_set_element_new_string(b),
	};
	rf_Set *set3 = rf_set_new(2, elems3);


	CU_ASSERT_TRUE(rf_set_equal(set1, set1)) //stupid case
	CU_ASSERT_TRUE(rf_set_equal(set1, set2)) //tricky case, same set with switched order
	CU_ASSERT_FALSE(rf_set_equal(set1, set3)) //false case

	rf_set_free(set1);
	rf_set_free(set2);
	rf_set_free(set3);
}
Example #2
0
static
Value *
_eq(const Ast *expr) {
	Ast *op1 = expr->child;
	Ast *op2 = expr->child->next;

	Value *v1 = eval(op1);
	Value *v2 = eval(op2);
	Value *rval = v1;

	if(v1->type != v2->type) {
		value_set_bool(rval, false);
	} else {
		switch(v1->type) {
		case T_BOOL:
			value_set_bool(rval, v1->as_bool == v2->as_bool);
			break;
		case T_INT:
			value_set_bool(rval, v1->as_int == v2->as_int);
			break;
		case T_FLOAT:
			value_set_bool(rval, fabs((v1->as_float - v2->as_float)) < 0.05);
			break;
		case T_STRING:
			value_set_bool(rval, strcmp(v1->as_String, v2->as_String) == 0);
			break;
		case T_SET:
			value_set_bool(rval, rf_set_equal(v1->as_Set, v2->as_Set));
			break;
		case T_R:
			value_set_bool(rval, rf_relation_equal(v1->as_Relation, v2->as_Relation));
			break;
		}
	}
	value_free(v2);

	return rval;
}