rt300@0
|
1 //
|
rt300@0
|
2 // TestController.mm
|
rt300@0
|
3 // tweakathlon
|
rt300@0
|
4 //
|
rt300@0
|
5 // Created by Robert Tubb on 16/01/2014.
|
rt300@0
|
6 //
|
rt300@0
|
7 //
|
rt300@0
|
8
|
rt300@0
|
9 #include "TestController.h"
|
rt300@0
|
10 const int TestController::numDifferentTests = 80;
|
rt300@0
|
11 const int TestController::totalNumTests = 80;
|
rt300@0
|
12
|
rt300@0
|
13
|
rt300@0
|
14 template <typename T>
|
rt300@2
|
15 vector<T> makeVector(T a1, T a2,T a3,T a4,T a5,T a6, T a7, T a8){
|
rt300@0
|
16
|
rt300@0
|
17 vector<T> vec;
|
rt300@0
|
18 vec.push_back(a1);
|
rt300@0
|
19 vec.push_back(a2);
|
rt300@0
|
20 vec.push_back(a3);
|
rt300@0
|
21 vec.push_back(a4);
|
rt300@0
|
22 vec.push_back(a5);
|
rt300@0
|
23 vec.push_back(a6);
|
rt300@2
|
24 vec.push_back(a7);
|
rt300@2
|
25 vec.push_back(a8);
|
rt300@0
|
26 return vec;
|
rt300@0
|
27 }
|
rt300@0
|
28
|
rt300@0
|
29 void randomise(int& n){
|
rt300@0
|
30 n = ofRandom(0,127);
|
rt300@0
|
31
|
rt300@0
|
32 }
|
rt300@0
|
33
|
rt300@0
|
34 vector<vector <bool> > makeCombinations(){
|
rt300@0
|
35 // make all unordered pairs
|
rt300@0
|
36 int N = TOTAL_NUM_PARAMS;
|
rt300@0
|
37
|
rt300@0
|
38 vector<vector <bool> > table;
|
rt300@0
|
39 for(int n=0; n < N-1; n++){
|
rt300@0
|
40
|
rt300@0
|
41 vector<bool> c(6, false);
|
rt300@0
|
42 for(int m=n+1; m<N; m++){
|
rt300@0
|
43
|
rt300@0
|
44 // reset all to false
|
rt300@0
|
45 for(int i=0; i<N; i++){
|
rt300@0
|
46 c[i] = false;
|
rt300@0
|
47 }
|
rt300@0
|
48
|
rt300@0
|
49 c[n] = true;
|
rt300@0
|
50 c[m] = true;
|
rt300@0
|
51
|
rt300@0
|
52 table.push_back(c);
|
rt300@0
|
53
|
rt300@0
|
54 }
|
rt300@0
|
55
|
rt300@0
|
56 }
|
rt300@0
|
57 return table;
|
rt300@0
|
58 }
|
rt300@0
|
59 //----------------------------------------------------------------------------------------
|
rt300@0
|
60
|
rt300@0
|
61 void TestController::generate2DRandomTests(){
|
rt300@0
|
62
|
rt300@0
|
63 controlPanelType panelType;
|
rt300@0
|
64 int numDimensions = 2;
|
rt300@0
|
65
|
rt300@0
|
66 vector<vector <bool> > ap = makeCombinations();
|
rt300@0
|
67 // 4 tests for each
|
rt300@0
|
68 int testsPerSpace = 2;
|
rt300@0
|
69 int numTests = 2 * testsPerSpace * ap.size();
|
rt300@0
|
70 int testNum = testList.size();
|
rt300@0
|
71 panelType = REVISITABLE;
|
rt300@0
|
72 for(int i=0;i<numTests/2; i++){
|
rt300@0
|
73 char letter = char(testNum+65);
|
rt300@0
|
74
|
rt300@0
|
75 testList.push_back(Test(letter,20, panelType, numDimensions, ap[floor(i/testsPerSpace)]));
|
rt300@0
|
76 testNum++;
|
rt300@0
|
77 }
|
rt300@0
|
78 panelType = SIMULTANEOUS;
|
rt300@0
|
79 for(int i=numTests/2+1;i<numTests; i++){
|
rt300@0
|
80 char letter = char(i+65);
|
rt300@0
|
81
|
rt300@0
|
82 testList.push_back(Test(letter,20, panelType, numDimensions, ap[floor((i-numTests/2)/testsPerSpace)]));
|
rt300@0
|
83
|
rt300@0
|
84 }
|
rt300@0
|
85 };
|
rt300@0
|
86 //------------------------------------------
|
rt300@0
|
87 // much better contruction!
|
rt300@0
|
88 void TestController::generateSomeTests(int howManyTests,
|
rt300@0
|
89 int numDimensions,
|
rt300@0
|
90 controlPanelType panelType,
|
rt300@0
|
91 int whichSpace,
|
rt300@0
|
92 bool scored,
|
rt300@0
|
93 bool aHint,
|
rt300@0
|
94 bool aMemoryTest){
|
rt300@0
|
95 int testNum = testList.size();
|
rt300@0
|
96
|
rt300@2
|
97 vector<bool> adjustables = makeVector(false, false, false, false, false, false, false, false);
|
rt300@2
|
98 vector<int> target = makeVector(40,64, 10, 74, 21, 80,45 ,45 ); // the default target
|
rt300@0
|
99
|
rt300@0
|
100 // big if - good spaces for each num of dimensions
|
rt300@0
|
101 if(numDimensions == 1){
|
rt300@0
|
102 // def 64,64, 30, 55, 42, 43;
|
rt300@0
|
103
|
rt300@0
|
104 adjustables[whichSpace-1] = true;
|
rt300@0
|
105
|
rt300@0
|
106 }else if(numDimensions == 2){
|
rt300@0
|
107
|
rt300@0
|
108 if (whichSpace == 1){
|
rt300@2
|
109 target = makeVector(64,64, 30, 55, 40, 43, 0, 0);
|
rt300@0
|
110 adjustables[0] = true; // pitch
|
rt300@0
|
111 adjustables[3] = true; // decay
|
rt300@0
|
112 }else if(whichSpace == 2){
|
rt300@0
|
113
|
rt300@0
|
114
|
rt300@2
|
115 target = makeVector(64,64, 0, 90, 20, 127, 0, 0);
|
rt300@0
|
116 adjustables[3] = true; // decay
|
rt300@0
|
117 adjustables[5] = true; // cutoff
|
rt300@0
|
118 }else if(whichSpace == 3){
|
rt300@2
|
119 target = makeVector(56,64, 20, 64, 10, 90, 0, 0);
|
rt300@0
|
120
|
rt300@0
|
121 adjustables[1] = true; // pulse
|
rt300@0
|
122 adjustables[2] = true; // attack
|
rt300@0
|
123 }else if(whichSpace == 4){
|
rt300@2
|
124 target = makeVector(64,64, 0, 55, 40, 43, 0, 0);
|
rt300@0
|
125 adjustables[1] = true; // pulse
|
rt300@0
|
126 adjustables[4] = true; // ftype
|
rt300@0
|
127 }
|
rt300@0
|
128 }else if(numDimensions == 3){
|
rt300@0
|
129 if(whichSpace == 1){
|
rt300@2
|
130 target = makeVector(64,64, 10, 64, 41, 43, 0, 0);
|
rt300@0
|
131 adjustables[0] = true; // pitch
|
rt300@0
|
132 adjustables[3] = true; // decay
|
rt300@0
|
133 adjustables[5] = true; // cutoff
|
rt300@0
|
134 }else if(whichSpace == 2){
|
rt300@2
|
135 target = makeVector(12,64, 10, 67, 41, 64, 0, 0);
|
rt300@0
|
136 adjustables[1] = true; // pulse
|
rt300@0
|
137 adjustables[2] = true; // attack
|
rt300@0
|
138 adjustables[4] = true; // ftype
|
rt300@0
|
139 }
|
rt300@2
|
140 }else {
|
rt300@2
|
141 for (int i = 0; i < numDimensions; i++){
|
rt300@2
|
142 adjustables[i] = true; // pitch
|
rt300@2
|
143 }
|
rt300@0
|
144 }
|
rt300@2
|
145
|
rt300@2
|
146
|
rt300@0
|
147
|
rt300@0
|
148 for(int i=0; i < howManyTests; i++){
|
rt300@0
|
149 char letter = char(testNum+65);
|
rt300@0
|
150 testList.push_back(Test(letter,20, panelType, numDimensions, adjustables, target, scored, aHint, aMemoryTest));
|
rt300@0
|
151 }
|
rt300@0
|
152 }
|
rt300@0
|
153
|
rt300@0
|
154
|
rt300@0
|
155 //-------------------------------------------
|
rt300@0
|
156 void TestController::generate4DTests(){
|
rt300@0
|
157 // 4d seq - learnable??
|
rt300@0
|
158 } |