diff options
author | mguetlein <martin.guetlein@gmail.com> | 2010-06-09 12:13:25 +0200 |
---|---|---|
committer | mguetlein <martin.guetlein@gmail.com> | 2010-06-09 12:13:25 +0200 |
commit | 2ee258935818fa3dcc9b863216f383969807c191 (patch) | |
tree | 3c4cce04edd2e50270c5b7fbb6ee0fd3f5e8a048 /test | |
parent | bef6b090942db1e51c88b3b4063e8bf7a16bebeb (diff) |
report persistance, modify val persistance (serialize hashes, rename uri)
Diffstat (limited to 'test')
-rw-r--r-- | test/test_examples_util.rb | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/test/test_examples_util.rb b/test/test_examples_util.rb index 7fcb1ec..92cb526 100644 --- a/test/test_examples_util.rb +++ b/test/test_examples_util.rb @@ -44,6 +44,16 @@ module ValidationExamples end end + def self.validation_get(uri, accept_header='application/rdf+xml') + if $test_case + #puts "getting "+uri+","+accept_header + $test_case.get uri,nil,'HTTP_ACCEPT' => accept_header + return wait($test_case.last_response.body) + else + return OpenTox::RestClientWrapper.get(File.join(@@config[:services]["opentox-validation"],uri),{:accept => accept_header}) + end + end + def self.wait(uri) if OpenTox::Utils.task_uri?(uri) task = OpenTox::Task.find(uri) @@ -54,6 +64,85 @@ module ValidationExamples uri end + def self.verify_crossvalidation(val_yaml) + + val = YAML.load(val_yaml) + puts val.inspect + + assert_integer val["random_seed".to_sym],nil,nil,"random_seed" + assert_boolean val["stratified".to_sym],"stratified" + assert_integer val["num_folds".to_sym],0,1000,"num_folds" + num_folds = val["num_folds".to_sym].to_i + + validations = val["validations".to_sym] + assert_int_equal(num_folds, validations.size, "num_folds != validations.size") + end + + def self.verify_validation(val_yaml) + + val = YAML.load(val_yaml) + + puts val.inspect + assert_integer val["num_instances".to_sym],0,1000,"num_instances" + num_instances = val["num_instances".to_sym].to_i + + assert_integer val["num_unpredicted".to_sym],0,num_instances,"num_unpredicted" + num_unpredicted = val["num_unpredicted".to_sym].to_i + assert_float val["percent_unpredicted".to_sym],0,100 + assert_float_equal(val["percent_unpredicted".to_sym].to_f,100*num_unpredicted/num_instances.to_f,"percent_unpredicted") + + assert_integer val["num_without_class".to_sym],0,num_instances,"num_without_class" + num_without_class = val["num_without_class".to_sym].to_i + assert_float val["percent_without_class".to_sym],0,100 + assert_float_equal(val["percent_without_class".to_sym].to_f,100*num_without_class/num_instances.to_f,"percent_without_class") + + class_stats = val["classification_statistics".to_sym] + if class_stats + class_value_stats = class_stats["class_value_statistics".to_sym] + class_values = [] + class_value_stats.each do |cvs| + class_values << cvs["class_value".to_sym] + end + puts class_values.inspect + + confusion_matrix = class_stats["confusion_matrix".to_sym] + confusion_matrix_cells = confusion_matrix["confusion_matrix_cell".to_sym] + predictions = 0 + confusion_matrix_cells.each do |confusion_matrix_cell| + predictions += confusion_matrix_cell["confusion_matrix_value".to_sym].to_i + end + assert_int_equal(predictions, num_instances-num_unpredicted) + else + regr_stats = val["regression_statistics".to_sym] + assert regr_stats!=nil + end + end + + private + def self.assert_int_equal(val1,val2,msg_suffix=nil) + raise msg_suffix.to_s+" not equal: "+val1.to_s+" != "+val2.to_s unless val1==val2 + end + + def self.assert_float_equal(val1,val2,msg_suffix=nil,epsilon=0.0001) + raise msg_suffix.to_s+" not equal: "+val1.to_s+" != "+val2.to_s+", diff:"+(val1-val2).abs.to_s unless (val1-val2).abs<epsilon + end + + def self.assert_boolean(bool_val,prop=nil) + raise "'"+bool_val.to_s+"' not an boolean "+prop.to_s unless bool_val.to_s=="true" or bool_val.to_s=="false" + end + + def self.assert_integer(string_val, min=nil, max=nil, prop=nil) + raise "'"+string_val.to_s+"' not an integer "+prop.to_s unless string_val.to_i.to_s==string_val.to_s + raise unless string_val.to_i>=min if min!=nil + raise unless string_val.to_i<=max if max!=nil + end + + def self.assert_float(string_val, min=nil, max=nil) + raise string_val.to_s+" not a float (!="+string_val.to_f.to_s+")" unless (string_val.to_f.to_s==string_val.to_s || (string_val.to_f.to_s==(string_val.to_s+".0"))) + raise unless string_val.to_f>=min if min!=nil + raise unless string_val.to_f<=max if max!=nil + end + end class ValidationExample @@ -118,6 +207,16 @@ module ValidationExamples end end + def verify_yaml + if @validation_uri =~ /crossvalidation/ + Util.verify_crossvalidation(Util.validation_get("crossvalidation/"+@validation_uri.split("/")[-1],'text/x-yaml')) + Util.validation_get("crossvalidation/"+@validation_uri.split("/")[-1]+"/statistics",'text/x-yaml') + Util.verify_validation(Util.validation_get("crossvalidation/"+@validation_uri.split("/")[-1]+"/statistics",'text/x-yaml')) + else + Util.verify_validation(Util.validation_get(@validation_uri.split("/")[-1],'text/x-yaml')) + end + end + def title self.class.humanize end |