Make problem value NOT NULL
authorMarius Gavrilescu <marius@ieval.ro>
Mon, 1 Dec 2014 12:42:46 +0000 (14:42 +0200)
committerMarius Gavrilescu <marius@ieval.ro>
Mon, 1 Dec 2014 12:42:46 +0000 (14:42 +0200)
db.sql
gruntmaster-problem
lib/Gruntmaster/Data.pm
lib/Gruntmaster/Data/Result/Problem.pm
t/Gruntmaster-Data.t
t/tools.t

diff --git a/db.sql b/db.sql
index d06521796abc8adeb0df656d78490520dc21e9f7..0daf3477ae3b7a08045a56c067ef1e6c5b663d6e 100644 (file)
--- a/db.sql
+++ b/db.sql
@@ -36,7 +36,7 @@ CREATE TABLE problems (
        testcnt   INT     NOT NULL,
        tests     TEXT,
        timeout   REAL    NOT NULL,
-       value     INT,
+       value     INT     NOT NULL,
        genformat TEXT,
        gensource TEXT,
        verformat TEXT,
index fa1403e71c3692a7900566a63e78b5eca50f9c39..5d18b2b7f22223c63f26ec42c70f5ff9ae1398ad 100755 (executable)
@@ -9,6 +9,13 @@ use JSON qw/encode_json/;
 use Term::ANSIColor qw/RED RESET/;
 use Getopt::Long qw/:config require_order/;
 
+use constant LEVEL_VALUES => {
+       beginner => 100,
+       easy => 250,
+       medium => 500,
+       hard => 1000,
+};
+
 ##################################################
 
 my $dsn = $ENV{GRUNTMASTER_DSN} // 'dbi:Pg:';
@@ -27,6 +34,7 @@ sub cmd_add{
        my $writer = prompt 'Problem statement writer (full name)';
        my $owner = prompt 'Problem owner (username)';
        my $level = prompt 'Problem level', -menu => "beginner\neasy\nmedium\nhard";
+       my $value = LEVEL_VALUES->{$level};
        my $statement = read_file prompt 'File with problem statement', -complete => 'filenames';
        my $generator = prompt 'Generator', -menu => "File\nRun\nUndef";
        my $runner = prompt 'Runner', -menu => "File\nVerifier\nInteractive";
@@ -59,6 +67,7 @@ sub cmd_add{
                id => $id,
                name => $name,
                level => $level,
+               value => $value,
                statement => $statement,
                author => $author,
                writer => $writer,
index 9b383895cde207e9a335da9a56e401eaaf8667cc..949e1a41910b7bb3be44c8a8edd7e6a64f1f8f07 100644 (file)
@@ -42,13 +42,6 @@ BEGIN {
        }
 }
 
-use constant LEVEL_VALUES => {
-       beginner => 100,
-       easy => 250,
-       medium => 500,
-       hard => 1000,
-};
-
 sub calc_score{
        my ($mxscore, $time, $tries, $totaltime) = @_;
        my $score = $mxscore;
@@ -71,7 +64,7 @@ sub standings {
                        my $open = $self->opens->find($ct->id, $job->problem->id, $job->owner->id);
                        my $time = $job->date - ($open ? $open->time : $ct->start);
                        next if $time < 0;
-                       my $value = $job->problem->value // LEVEL_VALUES->{$job->problem->level};
+                       my $value = $job->problem->value;
                        my $factor = $job->result ? 0 : 1;
                        $factor = $1 / 100 if $job->result_text =~ /^(\d+ )/;
                        $scores{$job->owner->id}{$job->problem->id} = int ($factor * calc_score ($value, $time, $tries{$job->owner->id}{$job->problem->id}++, $ct->stop - $ct->start));
index 5b843919c7250507743fc5d542be7012a138aeb6..0f4667e3ccc6cc2e1c26636388b116330eb1ed5b 100644 (file)
@@ -103,7 +103,7 @@ __PACKAGE__->table("problems");
 =head2 value
 
   data_type: 'integer'
-  is_nullable: 1
+  is_nullable: 0
 
 =head2 genformat
 
@@ -159,7 +159,7 @@ __PACKAGE__->add_columns(
   "timeout",
   { data_type => "real", is_nullable => 0 },
   "value",
-  { data_type => "integer", is_nullable => 1 },
+  { data_type => "integer", is_nullable => 0 },
   "genformat",
   { data_type => "text", is_nullable => 1 },
   "gensource",
@@ -255,8 +255,8 @@ Composing rels: L</contest_problems> -> contest
 __PACKAGE__->many_to_many("contests", "contest_problems", "contest");
 
 
-# Created by DBIx::Class::Schema::Loader v0.07039 @ 2014-05-16 15:03:32
-# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:tvap77v0faSMxFiLu1uggQ
+# Created by DBIx::Class::Schema::Loader v0.07042 @ 2014-12-01 14:39:28
+# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:/p3BIfVYSG5AKSSgVgOoOQ
 
 sub is_private {
        my ($self, $time) = @_;
index b8f28d71f2996669bd1eade3d33571d30870e2bf..e9d20ac8cf7938b27d05fdd150a3c276eb0fd9c1 100644 (file)
@@ -19,7 +19,7 @@ ok $db->contest('fc')->is_finished(25), 'is_finished';
 ok !$db->contest('rc')->is_finished(25), '!is_finished';
 ok $db->contest('rc')->is_running(25), 'is_running';
 
-$db->problems->create({id => 'pb', name => 'Problem', generator => 'Undef', runner => 'File', judge => 'Absolute', level => 'beginner', owner => 'MGV', statement => '...', testcnt => 1, timeout => 1, private => 0});
+$db->problems->create({id => 'pb', name => 'Problem', generator => 'Undef', runner => 'File', judge => 'Absolute', level => 'beginner', value => 100, owner => 'MGV', statement => '...', testcnt => 1, timeout => 1, private => 0});
 
 ok !$db->problem('pb')->is_private(25), '!is_private';
 $db->problem('pb')->update({private => 1});
index e8127371475bda57a37a638475b59928bb0aae4c..3d9f52547d21d91714f1fc23d832141021a88e7a 100644 (file)
--- a/t/tools.t
+++ b/t/tools.t
@@ -102,7 +102,7 @@ is `$perl gruntmaster-problem get pb author`, "Marius Gavrilescu\n", 'gruntmaste
 system $perl, 'gruntmaster-problem', 'set', 'pb', 'owner', 'nobody';
 withdb { is $db->problem('pb')->owner->id, 'nobody', 'gruntmaster-problem set' };
 
-withdb { $db->problems->create({id => 'dummy', name => 'Dummy', generator => 'Undef', runner => 'File', judge => 'Absolute', level => 'beginner', owner => 'MGV', statement => '...', testcnt => 1, timeout => 1}) };
+withdb { $db->problems->create({id => 'dummy', name => 'Dummy', generator => 'Undef', runner => 'File', judge => 'Absolute', level => 'beginner', value => 100, owner => 'MGV', statement => '...', testcnt => 1, timeout => 1}) };
 
 @list = sort `$perl gruntmaster-problem list`;
 chomp @list;
This page took 0.016788 seconds and 4 git commands to generate.