Example #1
0
void TEST_should_resize_integer_stack_on_push_to_full_integer_stack()
{
	struct integer_stack_head * integer_stack = init_integer_stack(3);
	printf("\nRunning: TEST_should_resize_integer_stack_on_push_to_full_integer_stack.");
	printf("\nCurrent integer_stack size: %d,", integer_stack->size);
	push(integer_stack, 1);
	push(integer_stack, 2);
	push(integer_stack, 3);
	push(integer_stack, 4);
	printf("\nStack size after 4th push: %d,", integer_stack->size);
}
Example #2
0
void TEST_should_push_and_pop_three_integers_to_integer_stack()
{
	struct integer_stack_head * integer_stack = init_integer_stack(3);
	printf("\nRunning: TEST_should_push_and_pop_three_integers_to_integer_stack.");
	push(integer_stack, 1);
	push(integer_stack, 2);
	push(integer_stack, 3);
	printf("\nStack pop: %d,", pop(integer_stack));
	printf("\nStack pop: %d,", pop(integer_stack));
	printf("\nStack pop: %d,", pop(integer_stack));
}
Example #3
0
int32_t choose_clause_var(samp_table_t *table, samp_clause_t *clause,
		double rvar_probability) {
	rule_inst_table_t *rule_inst_table = &table->rule_inst_table;
	atom_table_t *atom_table = &table->atom_table;
	integer_stack_t *clause_var_stack = &table->clause_var_stack;
	uint32_t i, sidx, vidx;

	if (clause_var_stack->size == 0) {
		init_integer_stack(clause_var_stack, 0);
	} else {
		clear_integer_stack(clause_var_stack);
	}

	double choice = choose();
	if (choice < rvar_probability) { /* flip a random unfixed variable */
		for (i = 0; i < clause->num_lits; i++) {
			if (unfixed_tval(atom_table->assignment[var_of(clause->disjunct[i])]))
				push_integer_stack(i, clause_var_stack);
		} 
		if (unfixed_tval(rule_inst_table->assignment[clause->rule_index]))
			push_integer_stack(clause->num_lits, clause_var_stack);
		/* all unfixed vars are now in clause_var_stack */
	} else {
		int32_t dcost = INT32_MAX, vcost = 0;
		for (i = 0; i < clause->num_lits; i++) {
			if (unfixed_tval(atom_table->assignment[var_of(clause->disjunct[i])])) {
				cost_flip_unfixed_variable(table, var_of(clause->disjunct[i]), &vcost);
				if (dcost >= vcost) {
					if (dcost > vcost) {
						dcost = vcost;
						clear_integer_stack(clause_var_stack);
					}
					push_integer_stack(i, clause_var_stack);
				}
			}
		}
		if (unfixed_tval(rule_inst_table->assignment[clause->rule_index])) {
			cost_flip_unfixed_rule(table, clause->rule_index, &vcost);
			if (dcost > vcost) {
				dcost = vcost;
				clear_integer_stack(clause_var_stack);
				push_integer_stack(clause->num_lits, clause_var_stack);
			}
		}
	}
	//sidx = random_uint(length_integer_stack(clause_var_stack));
	sidx = genrand_uint(length_integer_stack(clause_var_stack));
	vidx = nth_integer_stack(sidx, clause_var_stack);

	return vidx;
}
Example #4
0
void TEST_should_abort_when_empty_integer_stack_popped()
{
	struct integer_stack_head * head = init_integer_stack(1);
	pop(head);
}