// Construye una fórmula, la recorre y escribe su tabla de verdad.
#include <stdio.h>

#include "logic.h"

int main(void) {
    // (a and not b) or c
    Logic *formula = logic_or(logic_and(logic_input('a'), logic_not(logic_input('b'))),
                              logic_input('c'));
    if (formula == NULL) {
        fprintf(stderr, "no hay memoria\n");
        return 1;
    }

    logic_print(formula, stdout);
    printf("\nnodos: %d\n", logic_count(formula));
    printf("profundidad: %d\n", logic_depth(formula));

    printf("a b c | resultado\n");
    int inputs[26] = {0};
    for (int a = 0; a <= 1; a++) {
        for (int b = 0; b <= 1; b++) {
            for (int c = 0; c <= 1; c++) {
                inputs['a' - 'a'] = a;
                inputs['b' - 'a'] = b;
                inputs['c' - 'a'] = c;
                printf("%d %d %d | %d\n", a, b, c, logic_eval(formula, inputs));
            }
        }
    }

    logic_free(formula);
    return 0;
}
