nera 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. data/History.txt +4 -0
  2. data/Manifest.txt +37 -0
  3. data/README.rdoc +47 -0
  4. data/Rakefile +27 -0
  5. data/bin/nera +29 -0
  6. data/bin/nera_addsim +30 -0
  7. data/lib/nera/nera_cui.rb +417 -0
  8. data/lib/nera/nera_database.rb +281 -0
  9. data/lib/nera/nera_db_folders.rb +226 -0
  10. data/lib/nera/nera_dialog.rb +205 -0
  11. data/lib/nera/nera_job_layer_controller.rb +237 -0
  12. data/lib/nera/nera_job_records.rb +111 -0
  13. data/lib/nera/nera_job_script.rb +202 -0
  14. data/lib/nera/nera_parameter_layer_controller.rb +157 -0
  15. data/lib/nera/nera_parameter_records.rb +186 -0
  16. data/lib/nera/nera_run_layer_controller.rb +192 -0
  17. data/lib/nera/nera_run_records.rb +184 -0
  18. data/lib/nera/nera_simulator.rb +26 -0
  19. data/lib/nera/nera_simulator_layer_controller.rb +66 -0
  20. data/lib/nera/nera_simulator_records.rb +84 -0
  21. data/lib/nera.rb +25 -0
  22. data/lib/nera_addsim/make_simulator.rb +307 -0
  23. data/scripts/make_manifest.rb +21 -0
  24. data/test/runner.rb +3 -0
  25. data/test/test_helper.rb +52 -0
  26. data/test/test_nera_database.rb +221 -0
  27. data/test/test_nera_db_folders.rb +209 -0
  28. data/test/test_nera_dialog.rb +134 -0
  29. data/test/test_nera_job_layer_controller.rb +132 -0
  30. data/test/test_nera_job_records.rb +260 -0
  31. data/test/test_nera_parameter_layer_controller.rb +188 -0
  32. data/test/test_nera_parameter_records.rb +285 -0
  33. data/test/test_nera_run_layer_controller.rb +171 -0
  34. data/test/test_nera_run_records.rb +290 -0
  35. data/test/test_nera_simulator.rb +26 -0
  36. data/test/test_nera_simulator_layer_controller.rb +54 -0
  37. data/test/test_nera_simulator_records.rb +140 -0
  38. metadata +125 -0
@@ -0,0 +1,260 @@
1
+ require File.dirname(__FILE__) + '/test_helper'
2
+
3
+ class TC_NERA_JOB_RECS < Test::Unit::TestCase
4
+
5
+ def setup
6
+ @testdir = 'test_job_recs'
7
+ FileUtils.mkdir(@testdir)
8
+ FileUtils.chdir(@testdir)
9
+ @path_to_db = 'job_recs_table.marshal'
10
+ NERA::JobRecords.create_table( @path_to_db)
11
+ @db = NERA::JobRecords.new( @path_to_db)
12
+ end
13
+
14
+ def teardown
15
+ FileUtils.chdir('..')
16
+ FileUtils.rm_r(@testdir)
17
+ end
18
+
19
+ def test_constructor
20
+ assert_raise( RuntimeError) {
21
+ NERA::JobRecords.new('unknown_file')
22
+ }
23
+ end
24
+
25
+ def test_create_table
26
+ f = NERA::JobRecords.create_table( @path_to_db)
27
+ assert_nil( f)
28
+ end
29
+
30
+ def test_keys
31
+ k = [ :id,:state,:simulator,:parameter_id,:run_id,
32
+ :number_of_runs,:created_at,:updated_at,:host_name ]
33
+ assert_equal( k , @db.keys)
34
+ end
35
+
36
+ def test_add
37
+ assert_raise( ArgumentError) {
38
+ @db.add( 2,3,5,3)
39
+ }
40
+ assert_raise( ArgumentError) {
41
+ @db.add( "hoge",5,3,3)
42
+ }
43
+ assert_raise( ArgumentError) {
44
+ @db.add( 8,5,3,-1)
45
+ }
46
+
47
+ given_id = @db.add( Ising,5,3,4 )
48
+ d = DateTime.now
49
+ l = @db.list_all
50
+ rec = l[0]
51
+ assert_equal(1, given_id)
52
+ assert_equal( 1, rec[:id])
53
+ assert_equal( :created, rec[:state])
54
+ assert_equal( "Ising", rec[:simulator])
55
+ assert_equal( 5, rec[:parameter_id])
56
+ assert_equal( 3, rec[:run_id])
57
+ assert_equal( 4, rec[:number_of_runs] )
58
+ assert_equal( d.year, rec[:updated_at].year )
59
+ assert_equal( d.month, rec[:updated_at].month )
60
+ assert_equal( d.day, rec[:updated_at].day )
61
+ assert_equal( d.hour , rec[:updated_at].hour )
62
+ assert_equal( d.min, rec[:updated_at].min )
63
+ assert_equal( rec[:created_at], rec[:updated_at] )
64
+ assert_nil( rec[:host_name])
65
+
66
+ sleep 2
67
+ given_id = @db.add( XY,4,2,5 )
68
+ d = DateTime.now
69
+ l = @db.list_all
70
+ rec = l[1]
71
+ assert_equal( 2, rec[:id])
72
+ assert_equal( :created, rec[:state])
73
+ assert_equal( "XY", rec[:simulator])
74
+ assert_equal( 4, rec[:parameter_id])
75
+ assert_equal( 2, rec[:run_id])
76
+ assert_equal( 5, rec[:number_of_runs] )
77
+ assert_equal( d.year, rec[:updated_at].year )
78
+ assert_equal( d.month, rec[:updated_at].month )
79
+ assert_equal( d.day, rec[:updated_at].day )
80
+ assert_equal( d.hour , rec[:updated_at].hour )
81
+ assert_equal( d.min, rec[:updated_at].min )
82
+ assert_equal( rec[:created_at], rec[:updated_at] )
83
+ assert_nil( rec[:host_name])
84
+
85
+ assert( l[0][:created_at] < l[1][:created_at])
86
+
87
+ end
88
+
89
+ def add_three
90
+ @db.add( Ising,2,3,4)
91
+ @db.add( XY,6,7,8)
92
+ @db.add( Heisenberg,10,11,12)
93
+ end
94
+
95
+ def test_list
96
+ # ------
97
+ l = @db.list_all
98
+ assert( l.is_a?(Array) )
99
+ assert( l.size == 0 )
100
+
101
+ # ------
102
+ add_three
103
+ l = @db.list_all
104
+ assert( l.is_a?(Array) )
105
+ assert_equal( 3, l.size)
106
+ l2 = l.dup
107
+ l2.sort! do |a,b|
108
+ a[:id] <=> b[:id]
109
+ end
110
+ assert_equal( l, l2)
111
+ lc = @db.list_created
112
+ assert_equal( l, lc)
113
+ end
114
+
115
+ def test_find_by_id
116
+ assert_nil( @db.find_by_id(1) )
117
+ add_three
118
+ r = @db.find_by_id(1)
119
+ assert( r.is_a?(Hash) )
120
+ assert_equal( 1, r[:id])
121
+ assert_equal( :created, r[:state])
122
+ assert_equal( "Ising", r[:simulator])
123
+ assert_equal( 2, r[:parameter_id])
124
+ assert_equal( 3, r[:run_id])
125
+ assert_equal( 4, r[:number_of_runs] )
126
+ assert_equal( r[:created_at], r[:updated_at] )
127
+ assert_nil( r[:host_name])
128
+
129
+ assert_nil( @db.find_by_id(500) )
130
+ end
131
+
132
+ def test_update_to_state_copied
133
+ add_three
134
+
135
+ r = @db.find_by_id(2)
136
+ assert_equal( :created, r[:state])
137
+ assert_nil( r[:host_name])
138
+
139
+ sleep 2
140
+ f = @db.update_to_state_copied( 2, "supacon.com")
141
+ assert_equal( true, f)
142
+ r2 = @db.find_by_id(2)
143
+ assert_equal( :copied, r2[:state])
144
+ assert_equal( r[:simulator], r2[:simulator])
145
+ assert_equal( r[:parameter_id], r2[:parameter_id])
146
+ assert_equal( r[:run_id], r2[:run_id])
147
+ assert_equal( r[:number_of_runs], r2[:number_of_runs])
148
+ assert_equal( r[:created_at], r2[:created_at])
149
+ assert( r[:updated_at] < r2[:updated_at])
150
+ assert_equal( "supacon.com", r2[:host_name])
151
+
152
+ la = @db.list_all
153
+ lc = @db.list_created
154
+ diff = la - lc
155
+ assert_equal( 1, diff.size)
156
+ assert_equal( r2, diff[0])
157
+
158
+ f = @db.update_to_state_copied( 2, "another_host")
159
+ assert_equal( true, f)
160
+ r2 = @db.find_by_id(2)
161
+ assert_equal( :copied, r2[:state])
162
+ assert_equal( "another_host", r2[:host_name])
163
+
164
+ assert_nil( @db.update_to_state_copied( 500, "unknown_host") )
165
+ assert_raise( ArgumentError) {
166
+ @db.update_to_state_copied( "hoge",2)
167
+ }
168
+ assert_raise( ArgumentError) {
169
+ @db.update_to_state_copied( 2, 2)
170
+ }
171
+
172
+ lc2 = @db.list_created
173
+ assert_equal( lc, lc2)
174
+ end
175
+
176
+ def test_update_to_state_submitted
177
+ add_three
178
+
179
+ r = @db.find_by_id(2)
180
+ assert_equal( :created, r[:state])
181
+ assert_nil( r[:host_name])
182
+
183
+ sleep 2
184
+ f = @db.update_to_state_submitted( 2, "supacon.com")
185
+ assert_equal( true, f)
186
+ r2 = @db.find_by_id(2)
187
+ assert_equal( :submitted, r2[:state])
188
+ assert_equal( r[:simulator], r2[:simulator])
189
+ assert_equal( r[:parameter_id], r2[:parameter_id])
190
+ assert_equal( r[:run_id], r2[:run_id])
191
+ assert_equal( r[:number_of_runs], r2[:number_of_runs])
192
+ assert_equal( r[:created_at], r2[:created_at])
193
+ assert( r[:updated_at] < r2[:updated_at])
194
+ assert_equal( "supacon.com", r2[:host_name])
195
+
196
+ la = @db.list_all
197
+ lc = @db.list_created
198
+ diff = la - lc
199
+ assert_equal( 1, diff.size)
200
+ assert_equal( r2, diff[0])
201
+
202
+ f = @db.update_to_state_copied( 1, "another_host")
203
+ assert_equal( true, f)
204
+ f = @db.update_to_state_submitted( 1, "supacon.com")
205
+ r1 = @db.find_by_id(1)
206
+ assert_equal( :submitted, r1[:state])
207
+ assert_equal( "supacon.com", r1[:host_name])
208
+
209
+ assert_nil( @db.update_to_state_copied( 500, "unknown_host") )
210
+ assert_raise( ArgumentError) {
211
+ @db.update_to_state_copied( "hoge",2)
212
+ }
213
+ assert_raise( ArgumentError) {
214
+ @db.update_to_state_copied( 2, 2)
215
+ }
216
+ la = @db.list_all
217
+ lc = @db.list_created
218
+ diff = la - lc
219
+ assert_equal( 2, diff.size)
220
+ end
221
+
222
+ def test_destroy
223
+ add_three
224
+ r3 = @db.find_by_id(3)
225
+ destroyed = @db.destroy(3)
226
+ assert_equal( r3, destroyed)
227
+ l = @db.list_all
228
+ assert_equal( 2, l.size)
229
+
230
+ assert_nil( @db.destroy(3) )
231
+ @db.add( Ising,14,15,16)
232
+ l = @db.list_all
233
+ assert_equal( 3, l.size)
234
+ r4 = @db.find_by_id(4)
235
+ assert_equal(4, r4[:id])
236
+
237
+ assert_nil( @db.destroy(500) )
238
+
239
+ assert_raise(ArgumentError) {
240
+ @db.destroy("4")
241
+ }
242
+ end
243
+
244
+ def test_transaction
245
+ add_three
246
+ r3 = @db.find_by_id(3)
247
+ assert_raise(RuntimeError) {
248
+ @db.transaction {
249
+ destroyed = @db.destroy(3)
250
+ assert_equal( r3, destroyed)
251
+ l = @db.list_all
252
+ assert_equal( 2, l.size)
253
+ raise
254
+ }
255
+ }
256
+ assert_equal( r3, @db.find_by_id(3) )
257
+ assert_equal( 3, @db.list_all.size)
258
+ end
259
+
260
+ end
@@ -0,0 +1,188 @@
1
+ require File.dirname(__FILE__) + '/test_helper'
2
+
3
+
4
+ class TC_NERA_PARAM_LAYER_CONTROLLER < Test::Unit::TestCase
5
+
6
+ def setup
7
+ @testdir = 'test_sim_controller'
8
+ FileUtils.mkdir(@testdir)
9
+ FileUtils.chdir(@testdir)
10
+ @db_folder = "nera_db"
11
+ NERA::DbFolders.create_db( @db_folder)
12
+ @dbf = NERA::DbFolders.new( @db_folder)
13
+ @slc = NERA::SimulatorLayerController.new( @db_folder)
14
+ @plc = NERA::ParameterLayerController.new( @db_folder, Ising)
15
+ end
16
+
17
+ def teardown
18
+ FileUtils.chdir('..')
19
+ FileUtils.rm_r(@testdir)
20
+ end
21
+
22
+ def test_constructor
23
+ assert_raise( ArgumentError) {
24
+ NERA::ParameterLayerController.new( @dbf,1)
25
+ }
26
+ assert_raise( ArgumentError) {
27
+ NERA::ParameterLayerController.new( Temp,1)
28
+ }
29
+ assert_raise( ArgumentError) {
30
+ x = NERA::ParameterLayerController.new( @dbf, "1")
31
+ }
32
+ end
33
+
34
+ def test_parameters_list_in_csv
35
+ header, list = @plc.parameters_list_in_csv
36
+ assert( header.is_a?(String) )
37
+ assert_equal( "id, created_at, updated_at, L, K, tmax", header)
38
+ assert( list.is_a?(Array) )
39
+ assert_equal( 0, list.size)
40
+
41
+ f = @plc.create_a_new_parameter_set( {:L => 96, :K => 0.25, :tmax => 128} )
42
+ assert_equal( 1, f)
43
+ header, list = @plc.parameters_list_in_csv
44
+ assert( header.is_a?(String) )
45
+ assert_equal( "id, created_at, updated_at, L, K, tmax", header)
46
+ assert( list.is_a?(Array) )
47
+ assert_equal( 1, list.size)
48
+ dstr = DateTime.now.to_s.split('T')[0]
49
+ assert_equal( "1, #{dstr}, #{dstr}, 96, 0.25, 128", list[0])
50
+
51
+ f = @plc.create_a_new_parameter_set( {:L => 32} )
52
+ assert_equal( 2, f)
53
+ header, list = @plc.parameters_list_in_csv
54
+ assert_equal( 2, list.size)
55
+ assert_equal( "1, #{dstr}, #{dstr}, 96, 0.25, 128", list[0])
56
+ dstr = DateTime.now.to_s.split('T')[0]
57
+ assert_equal( "2, #{dstr}, #{dstr}, 32, 0.223, 512", list[1])
58
+
59
+ @plc.move_a_parameter_set_into_trashbox(1)
60
+ header, list = @plc.parameters_list_in_csv
61
+ assert_equal( 1, list.size)
62
+ assert_equal( "2, #{dstr}, #{dstr}, 32, 0.223, 512", list[0])
63
+ end
64
+
65
+ def add_three
66
+ f = @plc.create_a_new_parameter_set( {:L => 32, :K => 0.01, :tmax => 1} )
67
+ f = @plc.create_a_new_parameter_set( {:L => 64, :K => 0.02, :tmax => 2} )
68
+ f = @plc.create_a_new_parameter_set( {:L => 96, :K => 0.03, :tmax => 3} )
69
+ end
70
+
71
+ def test_get_id_from_csv_string
72
+ add_three
73
+ header, list = @plc.parameters_list_in_csv
74
+ assert_equal( 1, @plc.get_id_from_csv_string( list[0]) )
75
+ assert_equal( 2, @plc.get_id_from_csv_string( list[1]) )
76
+ assert_equal( 3, @plc.get_id_from_csv_string( list[2]) )
77
+ end
78
+
79
+ def test_list_of_parameters
80
+ p1 = @plc.list_of_parameters
81
+ p2 = [ [:L, Integer, 32],
82
+ [:K, Float, 0.223],
83
+ [:tmax, Integer, 512]
84
+ ]
85
+ assert_equal( p2, p1)
86
+ end
87
+
88
+ def test_path_to_param_layer
89
+ assert_equal( "nera_db/Ising/", @plc.path_to_param_layer)
90
+ end
91
+
92
+ def test_create_a_new_parameter_set
93
+ f = @plc.create_a_new_parameter_set( {:L => 32, :K => 0.01, :tmax => 1} )
94
+ assert_equal( 1, f)
95
+ f = @plc.create_a_new_parameter_set( {:L => 64, :K => 0.02} )
96
+ assert_equal( 2, f)
97
+ f = @plc.create_a_new_parameter_set( {:L => 96, :tmax => 3} )
98
+ assert_equal( 3, f)
99
+ f = @plc.create_a_new_parameter_set( {:L => 64, :K => 0.02} )
100
+ assert_nil( f)
101
+ assert_raise( ArgumentError) {
102
+ f = @plc.create_a_new_parameter_set( {:L => 64, :unknown => 0.02} )
103
+ }
104
+ assert_raise( ArgumentError) {
105
+ f = @plc.create_a_new_parameter_set( {:L => 64, :K => 2} )
106
+ }
107
+ assert_raise( ArgumentError) {
108
+ f = @plc.create_a_new_parameter_set( [64,0.01,3] )
109
+ }
110
+ header, list = @plc.parameters_list_in_csv
111
+ d = DateTime.now.to_s.split('T')[0]
112
+ l = [ "1, #{d}, #{d}, 32, 0.01, 1",
113
+ "2, #{d}, #{d}, 64, 0.02, 512",
114
+ "3, #{d}, #{d}, 96, 0.223, 3"]
115
+ assert_equal( l, list)
116
+ end
117
+
118
+ def test_move_a_parameter_set_into_trashbox
119
+ add_three
120
+ f = @plc.move_a_parameter_set_into_trashbox(2)
121
+ assert_equal( true, f)
122
+ header, list = @plc.parameters_list_in_csv
123
+ assert_equal( 2, list.size)
124
+ f = @plc.move_a_parameter_set_into_trashbox(2)
125
+ assert_nil( f)
126
+ f = @plc.move_a_parameter_set_into_trashbox(5)
127
+ assert_nil( f)
128
+ assert_raise( ArgumentError) {
129
+ f = @plc.move_a_parameter_set_into_trashbox("1")
130
+ }
131
+ end
132
+
133
+ def test_trashbox_parameter_list_in_csv
134
+ add_three
135
+ h, l = @plc.parameters_list_in_csv
136
+ h2, l2 = @plc.trashbox_parameter_list_in_csv
137
+ assert_equal( h, h2)
138
+ assert_equal( [], l2)
139
+ @plc.move_a_parameter_set_into_trashbox(2)
140
+ h2, l2 = @plc.trashbox_parameter_list_in_csv
141
+ assert_equal( l[1], l2[0])
142
+ end
143
+
144
+ def test_revert_a_parameter_set_in_trashbox
145
+ add_three
146
+ h_org, l_org = @plc.parameters_list_in_csv
147
+ f = @plc.move_a_parameter_set_into_trashbox(2)
148
+ f = @plc.revert_a_parameter_set_in_trashbox(2)
149
+ assert(f)
150
+ h2, l2 = @plc.parameters_list_in_csv
151
+ assert_equal( l_org, l2)
152
+ h3, l3 = @plc.trashbox_parameter_list_in_csv
153
+ assert_equal( 0, l3.size)
154
+
155
+ f = @plc.revert_a_parameter_set_in_trashbox(2)
156
+ assert_nil( f)
157
+ f = @plc.revert_a_parameter_set_in_trashbox(100)
158
+ assert_nil( f)
159
+
160
+ assert_raise( ArgumentError) {
161
+ @plc.revert_a_parameter_set_in_trashbox("2")
162
+ }
163
+ end
164
+
165
+ def test_delete_a_parameter_set
166
+ add_three
167
+ h_org, l_org = @plc.parameters_list_in_csv
168
+ @plc.move_a_parameter_set_into_trashbox(2)
169
+ s = @plc.delete_a_parameter_set(2)
170
+ assert(s)
171
+ ht, lt = @plc.trashbox_parameter_list_in_csv
172
+ assert_equal( [], lt)
173
+
174
+ n = @plc.revert_a_parameter_set_in_trashbox(2)
175
+ assert_nil(n)
176
+
177
+ n = @plc.revert_a_parameter_set_in_trashbox(100)
178
+ assert_nil(n)
179
+
180
+ n = @plc.revert_a_parameter_set_in_trashbox(1)
181
+ assert_nil(n)
182
+
183
+ assert_raise( ArgumentError) {
184
+ n = @plc.revert_a_parameter_set_in_trashbox("2")
185
+ }
186
+ end
187
+
188
+ end