schedsolver2 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.
- data/.gitignore +23 -0
- data/Gemfile +4 -0
- data/LICENCE.txt +22 -0
- data/README.md +29 -0
- data/Rakefile +1 -0
- data/features/schedsolver_T1_initializes.feature +11 -0
- data/features/schedsolver_T2_seed.feature +16 -0
- data/features/schedsolver_T3_constraint_checker.feature +29 -0
- data/features/schedsolver_T3v2_constraints.feature +8 -0
- data/features/schedsolver_T4_print_attributes.feature +19 -0
- data/features/schedsolver_T5_crud_attributes.feature +26 -0
- data/features/schedsolver_T6_generate_schedules.feature +14 -0
- data/features/schedsolver_T7_log_output.feature +9 -0
- data/features/schedsolver_T8_big_example.feature +10 -0
- data/features/schedsolver_heuristic.feature +10 -0
- data/features/step_definitions/T1_steps.rb +19 -0
- data/features/step_definitions/T3_steps.rb +97 -0
- data/features/step_definitions/T3v2_steps.rb +14 -0
- data/features/step_definitions/T4_steps.rb +19 -0
- data/features/step_definitions/T6_steps.rb +62 -0
- data/features/step_definitions/heuristic_steps.rb +49 -0
- data/features/step_definitions/shared_steps.rb +10 -0
- data/features/support/env.rb +4 -0
- data/features/support/shared_contexts.rb +47 -0
- data/lib/schedsolver2.rb +84 -0
- data/lib/schedsolver2/ClassCounter.rb +42 -0
- data/lib/schedsolver2/constraint.rb +133 -0
- data/lib/schedsolver2/schedule.rb +107 -0
- data/lib/schedsolver2/school.rb +176 -0
- data/lib/schedsolver2/teacher.rb +49 -0
- data/schedsolver2.gemspec +23 -0
- data/script/console +10 -0
- data/script/destroy +14 -0
- data/script/generate +14 -0
- data/spec/ClassCounter_spec.rb +38 -0
- data/spec/constraint_spec.rb +83 -0
- data/spec/schedsolver2_spec.rb +4 -0
- data/spec/schedule_spec.rb +53 -0
- data/spec/school_spec.rb +56 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +3 -0
- data/spec/support/masters/2ETs_8_to_14_by_1.schedule +12 -0
- data/spec/support/shared_contexts.rb +41 -0
- data/spec/teacher_spec.rb +43 -0
- metadata +151 -0
data/spec/school_spec.rb
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
require '~/schedsolver2/spec/spec_helper'
|
2
|
+
|
3
|
+
module Schedsolver2
|
4
|
+
describe School do
|
5
|
+
include_context "main"
|
6
|
+
|
7
|
+
describe "#print" do
|
8
|
+
before(:each) do
|
9
|
+
@output = mock('output', :info=>nil, :debug => nil, :warn => nil)
|
10
|
+
@school.log = @output
|
11
|
+
end
|
12
|
+
|
13
|
+
=begin
|
14
|
+
it "prints schedules to the log" do
|
15
|
+
path =
|
16
|
+
File.expand_path('../support/masters/2ETs_8_to_14_by_1.schedule',__FILE__)
|
17
|
+
printed_sched = open(path, 'r').read
|
18
|
+
@output.should_receive(:info).with(printed_sched)
|
19
|
+
@school.add :schedules, 1
|
20
|
+
@school.print :schedules
|
21
|
+
end
|
22
|
+
=end
|
23
|
+
|
24
|
+
it "prints school_info to the log" do
|
25
|
+
@output.should_receive(:info)
|
26
|
+
@school.print :school_info
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
|
31
|
+
describe "#add" do
|
32
|
+
it "adds one schedule" do
|
33
|
+
s = @school.scheds.size
|
34
|
+
@school.add :schedules, 1
|
35
|
+
@school.scheds.size.should == (s+1)
|
36
|
+
end
|
37
|
+
|
38
|
+
it "adds several schedules" do
|
39
|
+
s = @school.scheds.size
|
40
|
+
@school.add :schedules, 3
|
41
|
+
@school.scheds.size.should == (s+3)
|
42
|
+
end
|
43
|
+
|
44
|
+
it "adds one hard constraint" do
|
45
|
+
s_d = {:mon=>{8=>[:Music]}}
|
46
|
+
test = Proc.new { true }
|
47
|
+
assess = Proc.new { true }
|
48
|
+
hc = Constraint.new(:type=>:custom, :s_ds=>[s_d],
|
49
|
+
:test=>test, :assess=>assess )
|
50
|
+
sz = @cs[:h].size
|
51
|
+
@school.add :hard_constraint, hc
|
52
|
+
@school.cs[:h].size.should == (sz + 1)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
data/spec/spec.opts
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--colour
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
|
2
|
+
+----+-----+-------+--+-----+-------+--+-----+-------+--+-----+-------+--+-----+-------+--+
|
3
|
+
| | Art | Music | | Art | Music | | Art | Music | | Art | Music | | Art | Music | |
|
4
|
+
+----+-----+-------+--+-----+-------+--+-----+-------+--+-----+-------+--+-----+-------+--+
|
5
|
+
| 8 | | | | | | | | | | | | | | | |
|
6
|
+
| 9 | | | | | | | | | | | | | | | |
|
7
|
+
| 10 | | | | | | | | | | | | | | | |
|
8
|
+
| 11 | | | | | | | | | | | | | | | |
|
9
|
+
| 12 | | | | | | | | | | | | | | | |
|
10
|
+
| 13 | | | | | | | | | | | | | | | |
|
11
|
+
| 14 | | | | | | | | | | | | | | | |
|
12
|
+
+----+-----+-------+--+-----+-------+--+-----+-------+--+-----+-------+--+-----+-------+--+
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Schedsolver2
|
2
|
+
|
3
|
+
shared_context "main" do
|
4
|
+
before(:all) do
|
5
|
+
|
6
|
+
@si = {:start_time => 8,
|
7
|
+
:end_time => 15,
|
8
|
+
:num_blocks => 7,
|
9
|
+
:block_size => 1}
|
10
|
+
|
11
|
+
ets, et_ns = [], [:Art, :Music]
|
12
|
+
et_ns.each do |name|
|
13
|
+
ets << Teacher.new(name)
|
14
|
+
end
|
15
|
+
hts, ht_ns = [], [:One, :Two]
|
16
|
+
ht_ns.each do |name|
|
17
|
+
hts << Teacher.new(name)
|
18
|
+
end
|
19
|
+
@ts = {:e => ets,
|
20
|
+
:h => hts}
|
21
|
+
@cs = {:h => [],
|
22
|
+
:s => []}
|
23
|
+
|
24
|
+
|
25
|
+
mon_8 = [{:mon => {8 => [@ts[:e][0].id]}}]
|
26
|
+
test = Proc.new { true }
|
27
|
+
assess_true = Proc.new { true }
|
28
|
+
assess_false = Proc.new { false }
|
29
|
+
@c_true = Constraint.new(
|
30
|
+
:type => :custom, :s_ds => mon_8,
|
31
|
+
:test => test, :assess => assess_true)
|
32
|
+
@c_false = Constraint.new(
|
33
|
+
:type => :custom, :s_ds => mon_8,
|
34
|
+
:test => test, :assess => assess_false)
|
35
|
+
|
36
|
+
@school = School.new @si, @ts, @cs
|
37
|
+
@school.log = Logger.new("/home/ubuntu/schedsolver2/log/logfile.log")
|
38
|
+
@school.log.level = Logger::DEBUG
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper.rb'
|
2
|
+
|
3
|
+
module Schedsolver2
|
4
|
+
|
5
|
+
describe Teacher do
|
6
|
+
include_context "main"
|
7
|
+
before(:each) do
|
8
|
+
@t_list = [:One, :Two, :Three, :Four, :Five].inject([]) do |ary, name|
|
9
|
+
ary << Teacher.new(name)
|
10
|
+
end
|
11
|
+
@ids = @t_list.map {|t| t.id}
|
12
|
+
end
|
13
|
+
|
14
|
+
describe "#initialize" do
|
15
|
+
it "generateds unique ids when none given" do
|
16
|
+
@ids.uniq.should == @ids
|
17
|
+
end
|
18
|
+
|
19
|
+
it "generates integer ids" do
|
20
|
+
@ids.each {|id| id.should be_instance_of(Fixnum)}
|
21
|
+
end
|
22
|
+
|
23
|
+
it "asserts that id given as arg is unique" do
|
24
|
+
dup_id = @ids[0]
|
25
|
+
expect{ Teacher.new(:Dup, dup_id)}.to raise_error(ArgumentError)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "#self.generate_id" do
|
30
|
+
it "generates an id that is unique" do
|
31
|
+
Teacher.ids.should_not include(Teacher.generate_id)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe "#self.uniq_id?" do
|
36
|
+
it "returns true if the id is unique" do
|
37
|
+
id = 10000
|
38
|
+
Teacher.uniq_id?(id).should == true
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
metadata
ADDED
@@ -0,0 +1,151 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: schedsolver2
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Julian Irwin
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-03-13 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: pp
|
16
|
+
requirement: &15105740 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *15105740
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: text-table
|
27
|
+
requirement: &15105180 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *15105180
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: logger
|
38
|
+
requirement: &15104540 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :runtime
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *15104540
|
47
|
+
description: Create schedules for elementary schools
|
48
|
+
email:
|
49
|
+
- julian.irwin@gmail.com
|
50
|
+
executables: []
|
51
|
+
extensions: []
|
52
|
+
extra_rdoc_files: []
|
53
|
+
files:
|
54
|
+
- .gitignore
|
55
|
+
- Gemfile
|
56
|
+
- LICENCE.txt
|
57
|
+
- README.md
|
58
|
+
- Rakefile
|
59
|
+
- features/schedsolver_T1_initializes.feature
|
60
|
+
- features/schedsolver_T2_seed.feature
|
61
|
+
- features/schedsolver_T3_constraint_checker.feature
|
62
|
+
- features/schedsolver_T3v2_constraints.feature
|
63
|
+
- features/schedsolver_T4_print_attributes.feature
|
64
|
+
- features/schedsolver_T5_crud_attributes.feature
|
65
|
+
- features/schedsolver_T6_generate_schedules.feature
|
66
|
+
- features/schedsolver_T7_log_output.feature
|
67
|
+
- features/schedsolver_T8_big_example.feature
|
68
|
+
- features/schedsolver_heuristic.feature
|
69
|
+
- features/step_definitions/T1_steps.rb
|
70
|
+
- features/step_definitions/T3_steps.rb
|
71
|
+
- features/step_definitions/T3v2_steps.rb
|
72
|
+
- features/step_definitions/T4_steps.rb
|
73
|
+
- features/step_definitions/T6_steps.rb
|
74
|
+
- features/step_definitions/heuristic_steps.rb
|
75
|
+
- features/step_definitions/shared_steps.rb
|
76
|
+
- features/support/env.rb
|
77
|
+
- features/support/shared_contexts.rb
|
78
|
+
- lib/schedsolver2.rb
|
79
|
+
- lib/schedsolver2/ClassCounter.rb
|
80
|
+
- lib/schedsolver2/constraint.rb
|
81
|
+
- lib/schedsolver2/schedule.rb
|
82
|
+
- lib/schedsolver2/school.rb
|
83
|
+
- lib/schedsolver2/teacher.rb
|
84
|
+
- schedsolver2.gemspec
|
85
|
+
- script/console
|
86
|
+
- script/destroy
|
87
|
+
- script/generate
|
88
|
+
- spec/ClassCounter_spec.rb
|
89
|
+
- spec/constraint_spec.rb
|
90
|
+
- spec/schedsolver2_spec.rb
|
91
|
+
- spec/schedule_spec.rb
|
92
|
+
- spec/school_spec.rb
|
93
|
+
- spec/spec.opts
|
94
|
+
- spec/spec_helper.rb
|
95
|
+
- spec/support/masters/2ETs_8_to_14_by_1.schedule
|
96
|
+
- spec/support/shared_contexts.rb
|
97
|
+
- spec/teacher_spec.rb
|
98
|
+
homepage: ''
|
99
|
+
licenses: []
|
100
|
+
post_install_message:
|
101
|
+
rdoc_options: []
|
102
|
+
require_paths:
|
103
|
+
- lib
|
104
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
111
|
+
none: false
|
112
|
+
requirements:
|
113
|
+
- - ! '>='
|
114
|
+
- !ruby/object:Gem::Version
|
115
|
+
version: '0'
|
116
|
+
requirements: []
|
117
|
+
rubyforge_project:
|
118
|
+
rubygems_version: 1.8.11
|
119
|
+
signing_key:
|
120
|
+
specification_version: 3
|
121
|
+
summary: ''
|
122
|
+
test_files:
|
123
|
+
- features/schedsolver_T1_initializes.feature
|
124
|
+
- features/schedsolver_T2_seed.feature
|
125
|
+
- features/schedsolver_T3_constraint_checker.feature
|
126
|
+
- features/schedsolver_T3v2_constraints.feature
|
127
|
+
- features/schedsolver_T4_print_attributes.feature
|
128
|
+
- features/schedsolver_T5_crud_attributes.feature
|
129
|
+
- features/schedsolver_T6_generate_schedules.feature
|
130
|
+
- features/schedsolver_T7_log_output.feature
|
131
|
+
- features/schedsolver_T8_big_example.feature
|
132
|
+
- features/schedsolver_heuristic.feature
|
133
|
+
- features/step_definitions/T1_steps.rb
|
134
|
+
- features/step_definitions/T3_steps.rb
|
135
|
+
- features/step_definitions/T3v2_steps.rb
|
136
|
+
- features/step_definitions/T4_steps.rb
|
137
|
+
- features/step_definitions/T6_steps.rb
|
138
|
+
- features/step_definitions/heuristic_steps.rb
|
139
|
+
- features/step_definitions/shared_steps.rb
|
140
|
+
- features/support/env.rb
|
141
|
+
- features/support/shared_contexts.rb
|
142
|
+
- spec/ClassCounter_spec.rb
|
143
|
+
- spec/constraint_spec.rb
|
144
|
+
- spec/schedsolver2_spec.rb
|
145
|
+
- spec/schedule_spec.rb
|
146
|
+
- spec/school_spec.rb
|
147
|
+
- spec/spec.opts
|
148
|
+
- spec/spec_helper.rb
|
149
|
+
- spec/support/masters/2ETs_8_to_14_by_1.schedule
|
150
|
+
- spec/support/shared_contexts.rb
|
151
|
+
- spec/teacher_spec.rb
|