annotate src/solver.tp @ 33:b00904b36aca

More solver work
author Mike Pavone <pavone@retrodev.com>
date Sat, 10 Aug 2013 22:25:49 -0700
parents 2b5357b13e2d
children cde3f5943cd4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
33
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
1 {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
2 _classifNode <- :vals prog startIdx child? {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
3 if: startIdx < (vals length) {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
4 _dict <- dict linear
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
5 _const <- #[]
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
6 _first <- false
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
7 _hasFirst? <- false
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
8 _val <- vals get: startIdx
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
9 #{
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
10 input <- { _val }
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
11 valmap <- { _dict }
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
12 constantProgs <- { _const }
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
13 append <- :tree {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
14 if: child? && (tree constant?) {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
15 _const append: tree
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
16 } else: {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
17 if: (_dict length) > 0 {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
18 prog root!: tree
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
19 res <- prog run: _val
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
20 node <- _dict get: res elseSet: {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
21 _classifNode: vals prog startIdx + 1 true
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
22 }
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
23 node append: tree
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
24 } else: {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
25 if: _hasFirst? {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
26 prog root!: _first
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
27 res <- prog run: _val
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
28 node <- _classifNode: vals prog startIdx + 1 true
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
29 _dict set: res node
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
30 node append: _first
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
31 append: tree
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
32 } else: {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
33 _first <- tree
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
34 _hasFirst? <- true
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
35 }
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
36 }
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
37 }
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
38 }
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
39 length <- {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
40 len <- _dict length
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
41 if: len = 0 && _hasFirst? {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
42 len <- 1
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
43 }
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
44 len + _const length
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
45 }
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
46 printwithIndent <- :indent {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
47 print: indent . "Input: " . (hex: _val) . "\n"
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
48 nextindent <- indent . " "
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
49 if: (_const length) > 0 {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
50 print: indent . "Constants:\n"
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
51 foreach: _const :idx val {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
52 print: nextindent . (string: val) . "\n"
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
53 }
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
54 }
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
55 if: (_dict length) > 0 {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
56 foreach: _dict :key val {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
57 print: indent . (hex: key) . " ->\n"
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
58 val printwithIndent: nextindent
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
59 }
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
60 } else: {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
61 if: _hasFirst? {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
62 print: nextindent . (string: _first) . "\n"
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
63 }
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
64 }
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
65 }
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
66 print <- {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
67 printwithIndent: ""
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
68 }
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
69 }
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
70 } else: {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
71 _arr <- #[]
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
72 #{
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
73 append <- :tree {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
74 _arr append: tree
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
75 }
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
76 length <- { _arr length }
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
77 printwithIndent <- :indent {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
78 print: indent . "No more values for these:\n"
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
79 indent <- indent . " "
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
80 foreach: _arr :idx val {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
81 print: indent . (string: val) . "\n"
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
82 }
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
83 }
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
84 print <- {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
85 printwithIndent: ""
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
86 }
32
2b5357b13e2d Initial work on solver
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
87 }
2b5357b13e2d Initial work on solver
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
88 }
2b5357b13e2d Initial work on solver
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
89 }
33
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
90 #{
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
91 classify <- :prog trees numTests {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
92 testvals <- #[]
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
93 i <- 0
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
94 (os srand: (os time))
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
95 while: {i < numTests} do: {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
96 i <- i + 1
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
97 testvals append: (uint64: (os rand64))
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
98 }
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
99 root <- _classifNode: testvals prog 0 false
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
100 foreach: trees :idx tree {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
101 root append: tree
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
102 }
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
103 root
32
2b5357b13e2d Initial work on solver
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
104 }
33
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
105
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
106 main <- :args {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
107 size <- 3
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
108 if: (args length) > 1 {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
109 size <- int32: (args get: 1)
32
2b5357b13e2d Initial work on solver
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
110 }
33
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
111 prog <- bv program
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
112 if: size >= 2 {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
113 trees <- (prog allOfSize: size)
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
114 numTests <- 0
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
115 if: (args length) > 2 {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
116 numTests <- int32: (args get: 2)
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
117 }
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
118 if: numTests <= 0 {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
119 numTests <- 16
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
120 }
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
121 if: (args length) > 3 {
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
122 ops <- (args get: 3) splitOn: ","
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
123 trees <- prog filterTrees: trees ops
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
124 }
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
125 info <- classify: prog trees numTests
b00904b36aca More solver work
Mike Pavone <pavone@retrodev.com>
parents: 32
diff changeset
126 print: info
32
2b5357b13e2d Initial work on solver
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
127 }
2b5357b13e2d Initial work on solver
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
128 }
2b5357b13e2d Initial work on solver
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
129 }
2b5357b13e2d Initial work on solver
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
130 }