def test_line_split(self): ''' not(x1) or x1 and x2 ''' comp = self.c line = self.l input = [comp(1, function_in) for i in range(2)] lines = [line(str(i)) for i in range(7)] c_neg = comp(1, function_neg) c_and = comp(2, function_and) c_or = comp(2, function_or) input[0].attach_output_line(lines[0]) input[1].attach_output_line(lines[1]) lines[0].attach_output_line(lines[2]) lines[0].attach_output_line(lines[3]) c_neg.attach_input_line(0, lines[2]) c_neg.attach_output_line(lines[4]) c_and.attach_input_line(0, lines[3]) c_and.attach_input_line(1, lines[1]) c_and.attach_output_line(lines[5]) c_or.attach_input_line(0, lines[4]) c_or.attach_input_line(1, lines[5]) c_or.attach_output_line(lines[6]) components = [c_neg, c_and, c_or] output = perform_modelling(input, lines[6], components) self.assertEqual([i[1] for i in output[0]], [1, 1, 0, 1])
def test_line_split(self): ''' not(x1) or x1 and x2 ''' comp = self.c line = self.l input = [comp(1, function_in) for i in range(2)] lines = [line(str(i)) for i in range(7)] c_neg = comp(1, function_neg) c_and = comp(2, function_and) c_or = comp(2, function_or) input[0].attach_output_line(lines[0]) input[1].attach_output_line(lines[1]) lines[0].attach_output_line(lines[2]) lines[0].attach_output_line(lines[3]) c_neg.attach_input_line(0, lines[2]) c_neg.attach_output_line(lines[4]) c_and.attach_input_line(0, lines[3]) c_and.attach_input_line(1, lines[1]) c_and.attach_output_line(lines[5]) c_or.attach_input_line(0, lines[4]) c_or.attach_input_line(1, lines[5]) c_or.attach_output_line(lines[6]) components = [c_neg, c_and, c_or] output = perform_modelling(input, lines[6], components) self.assertEqual([ i[1] for i in output[0]], [1, 1, 0, 1])
def test_base_modeling(self): comp = self.c line = self.l c_in1 = comp(1, function_in, "in1") c_in2 = comp(1, function_in, "in2") c_and = comp(2, function_and, "and") l_1 = line("l1") l_2 = line("l2") l_out = line("lout") c_in1.attach_output_line(l_1) c_in2.attach_output_line(l_2) c_and.attach_input_line(0, l_1) c_and.attach_input_line(1, l_2) c_and.attach_output_line(l_out) components = [c_and] output = perform_modelling([c_in1, c_in2], l_out, components) self.assertEqual([ i[1] for i in output[0]], [0, 0, 0, 1])
def test_base_modeling(self): comp = self.c line = self.l c_in1 = comp(1, function_in, "in1") c_in2 = comp(1, function_in, "in2") c_and = comp(2, function_and, "and") l_1 = line("l1") l_2 = line("l2") l_out = line("lout") c_in1.attach_output_line(l_1) c_in2.attach_output_line(l_2) c_and.attach_input_line(0, l_1) c_and.attach_input_line(1, l_2) c_and.attach_output_line(l_out) components = [c_and] output = perform_modelling([c_in1, c_in2], l_out, components) self.assertEqual([i[1] for i in output[0]], [0, 0, 0, 1])
def test_more_components(self): ''' not(x1) and x2 or x3 ''' comp = self.c line = self.l in1 = comp(1, function_in, "in1") in2 = comp(1, function_in, "in2") in3 = comp(1, function_in, "in3") c_neg = comp(1, function_neg, "neg") c_and = comp(2, function_and, "and") c_or = comp(2, function_or, "or") l1 = line("l1") l2 = line("l2") l3 = line("l3") l4 = line("l4") l5 = line("l5") l6 = line("l6") #out in1.attach_output_line(l1) in2.attach_output_line(l2) in3.attach_output_line(l3) c_neg.attach_input_line(0, l1) c_neg.attach_output_line(l4) c_and.attach_input_line(0, l4) c_and.attach_input_line(1, l2) c_and.attach_output_line(l5) c_or.attach_input_line(0, l5) c_or.attach_input_line(1, l3) c_or.attach_output_line(l6) components = [c_neg, c_and, c_or] output = perform_modelling([in1, in2, in3], l6, components) self.assertEqual([ i[1] for i in output[0]], [0, 1, 1, 1, 0, 1, 0, 1])
def test_more_components(self): ''' not(x1) and x2 or x3 ''' comp = self.c line = self.l in1 = comp(1, function_in, "in1") in2 = comp(1, function_in, "in2") in3 = comp(1, function_in, "in3") c_neg = comp(1, function_neg, "neg") c_and = comp(2, function_and, "and") c_or = comp(2, function_or, "or") l1 = line("l1") l2 = line("l2") l3 = line("l3") l4 = line("l4") l5 = line("l5") l6 = line("l6") #out in1.attach_output_line(l1) in2.attach_output_line(l2) in3.attach_output_line(l3) c_neg.attach_input_line(0, l1) c_neg.attach_output_line(l4) c_and.attach_input_line(0, l4) c_and.attach_input_line(1, l2) c_and.attach_output_line(l5) c_or.attach_input_line(0, l5) c_or.attach_input_line(1, l3) c_or.attach_output_line(l6) components = [c_neg, c_and, c_or] output = perform_modelling([in1, in2, in3], l6, components) self.assertEqual([i[1] for i in output[0]], [0, 1, 1, 1, 0, 1, 0, 1])
# -*- coding: utf-8 -*- import sys from functions import * def print_usage(prog_name): print("Usage: " + prog_name + " [parallel|concurrent] json_file html_file") if __name__ == '__main__': if len(sys.argv) != 4: print_usage(sys.argv[0]) sys.exit(1) if sys.argv[1] == "parallel": from parallel_modelling import perform_modelling from components import BaseComponent, BaseLine elif sys.argv[1] == "concurrent": from concurrent_modelling import perform_modelling from concurrent_modelling import ConcurrentComponent as BaseComponent, ConcurrentLine as BaseLine else: print_usage(sys.argv[0]) sys.exit(1) html_file_name = sys.argv[3] [all_inputs, output_line, all_components] = generate_scheme_from_json(sys.argv[2], BaseLine, BaseComponent) output = perform_modelling(all_inputs, output_line, all_components) if sys.argv[1] == "parallel": make_html_output_parallel(output, html_file_name) elif sys.argv[1] == "concurrent": make_html_output_concurrent(output, html_file_name, len(all_inputs))