nera 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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