diff --git a/networks.rkt b/networks.rkt index f7c8d68..5f59387 100644 --- a/networks.rkt +++ b/networks.rkt @@ -150,7 +150,12 @@ [sbn? contract?])) (module+ test - (require rackunit)) + (require rackunit) + ;; When this variable is set to #t, some particularly expensive test + ;; cases are omitted. + (define skip-expensive-tests? #t) + (unless skip-expensive-tests? + (displayln "Running the complete test suite..."))) ;;; ================= @@ -526,23 +531,27 @@ (module+ test (test-case "build-interaction-graph" - (define n-bool - (hash 'x '(not y) - 'y 'x - 'z '(and y z) - 't '(or (and (not x) y) - (and x (not y))))) - (define bool-doms (make-boolean-domains '(x y z t))) - (check-equal? (graphviz (build-interaction-graph/form n-bool bool-doms)) - "digraph G {\n\tnode0 [label=\"y\"];\n\tnode1 [label=\"z\"];\n\tnode2 [label=\"x\"];\n\tnode3 [label=\"t\"];\n\tsubgraph U {\n\t\tedge [dir=none];\n\t\tnode0 -> node2;\n\t\tnode1 -> node1;\n\t}\n\tsubgraph D {\n\t\tnode0 -> node3;\n\t\tnode0 -> node1;\n\t\tnode2 -> node3;\n\t}\n}\n") - (define n-multi - (hash 'x '(min (+ y 1) 2) - 'y '(max (- y 1) 0) - 'z '(- 2 y) - 't '(abs (- y 1)))) - (define 123-doms (make-same-domains '(x y z t) '(0 1 2))) - (check-equal? (graphviz (build-interaction-graph/form n-multi 123-doms)) - "digraph G {\n\tnode0 [label=\"y\"];\n\tnode1 [label=\"z\"];\n\tnode2 [label=\"x\"];\n\tnode3 [label=\"t\"];\n\tsubgraph U {\n\t\tedge [dir=none];\n\t\tnode0 -> node0;\n\t}\n\tsubgraph D {\n\t\tnode0 -> node2;\n\t\tnode0 -> node3;\n\t\tnode0 -> node1;\n\t}\n}\n"))) + (cond + [skip-expensive-tests? + (displayln "Skipping test case build-interaction-graph.")] + [else + (define n-bool + (hash 'x '(not y) + 'y 'x + 'z '(and y z) + 't '(or (and (not x) y) + (and x (not y))))) + (define bool-doms (make-boolean-domains '(x y z t))) + (check-equal? (graphviz (build-interaction-graph/form n-bool bool-doms)) + "digraph G {\n\tnode0 [label=\"y\"];\n\tnode1 [label=\"z\"];\n\tnode2 [label=\"x\"];\n\tnode3 [label=\"t\"];\n\tsubgraph U {\n\t\tedge [dir=none];\n\t\tnode0 -> node2;\n\t\tnode1 -> node1;\n\t}\n\tsubgraph D {\n\t\tnode0 -> node3;\n\t\tnode0 -> node1;\n\t\tnode2 -> node3;\n\t}\n}\n") + (define n-multi + (hash 'x '(min (+ y 1) 2) + 'y '(max (- y 1) 0) + 'z '(- 2 y) + 't '(abs (- y 1)))) + (define 123-doms (make-same-domains '(x y z t) '(0 1 2))) + (check-equal? (graphviz (build-interaction-graph/form n-multi 123-doms)) + "digraph G {\n\tnode0 [label=\"y\"];\n\tnode1 [label=\"z\"];\n\tnode2 [label=\"x\"];\n\tnode3 [label=\"t\"];\n\tsubgraph U {\n\t\tedge [dir=none];\n\t\tnode0 -> node0;\n\t}\n\tsubgraph D {\n\t\tnode0 -> node2;\n\t\tnode0 -> node3;\n\t\tnode0 -> node1;\n\t}\n}\n")]))) ;;; Given a network, builds its signed interaction graph. The graph ;;; has variables as nodes and has a directed edge from x to @@ -564,23 +573,27 @@ (module+ test (test-case "build-signed-interaction-graph" - (define n-bool - (hash 'x '(not y) - 'y 'x - 'z '(and y z) - 't '(or (and (not x) y) - (and x (not y))))) - (define bool-doms (make-boolean-domains '(x y z t))) - (check-equal? (graphviz (build-signed-interaction-graph/form n-bool bool-doms)) - "digraph G {\n\tnode0 [label=\"y\"];\n\tnode1 [label=\"z\"];\n\tnode2 [label=\"x\"];\n\tnode3 [label=\"t\"];\n\tsubgraph U {\n\t\tedge [dir=none];\n\t\tnode1 -> node1 [label=\"1\"];\n\t}\n\tsubgraph D {\n\t\tnode0 -> node2 [label=\"-1\"];\n\t\tnode0 -> node3 [label=\"0\"];\n\t\tnode0 -> node1 [label=\"1\"];\n\t\tnode2 -> node3 [label=\"0\"];\n\t\tnode2 -> node0 [label=\"1\"];\n\t}\n}\n") - (define n-multi - (hash 'x '(min (+ y 1) 2) - 'y '(max (- y 1) 0) - 'z '(- 2 y) - 't '(abs (- y 1)))) - (define 123-doms (make-same-domains '(x y z t) '(0 1 2))) - (check-equal? (graphviz (build-signed-interaction-graph/form n-multi 123-doms)) - "digraph G {\n\tnode0 [label=\"y\"];\n\tnode1 [label=\"z\"];\n\tnode2 [label=\"x\"];\n\tnode3 [label=\"t\"];\n\tsubgraph U {\n\t\tedge [dir=none];\n\t\tnode0 -> node0 [label=\"1\"];\n\t}\n\tsubgraph D {\n\t\tnode0 -> node2 [label=\"1\"];\n\t\tnode0 -> node3 [label=\"0\"];\n\t\tnode0 -> node1 [label=\"-1\"];\n\t}\n}\n"))) + (cond + [skip-expensive-tests? + (displayln "Skipping test case build-signed-interaction-graph.")] + [else + (define n-bool + (hash 'x '(not y) + 'y 'x + 'z '(and y z) + 't '(or (and (not x) y) + (and x (not y))))) + (define bool-doms (make-boolean-domains '(x y z t))) + (check-equal? (graphviz (build-signed-interaction-graph/form n-bool bool-doms)) + "digraph G {\n\tnode0 [label=\"y\"];\n\tnode1 [label=\"z\"];\n\tnode2 [label=\"x\"];\n\tnode3 [label=\"t\"];\n\tsubgraph U {\n\t\tedge [dir=none];\n\t\tnode1 -> node1 [label=\"1\"];\n\t}\n\tsubgraph D {\n\t\tnode0 -> node2 [label=\"-1\"];\n\t\tnode0 -> node3 [label=\"0\"];\n\t\tnode0 -> node1 [label=\"1\"];\n\t\tnode2 -> node3 [label=\"0\"];\n\t\tnode2 -> node0 [label=\"1\"];\n\t}\n}\n") + (define n-multi + (hash 'x '(min (+ y 1) 2) + 'y '(max (- y 1) 0) + 'z '(- 2 y) + 't '(abs (- y 1)))) + (define 123-doms (make-same-domains '(x y z t) '(0 1 2))) + (check-equal? (graphviz (build-signed-interaction-graph/form n-multi 123-doms)) + "digraph G {\n\tnode0 [label=\"y\"];\n\tnode1 [label=\"z\"];\n\tnode2 [label=\"x\"];\n\tnode3 [label=\"t\"];\n\tsubgraph U {\n\t\tedge [dir=none];\n\t\tnode0 -> node0 [label=\"1\"];\n\t}\n\tsubgraph D {\n\t\tnode0 -> node2 [label=\"1\"];\n\t\tnode0 -> node3 [label=\"0\"];\n\t\tnode0 -> node1 [label=\"-1\"];\n\t}\n}\n")]))) ;;; ==================== ;;; Dynamics of networks