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.
Files changed (45) hide show
  1. data/.gitignore +23 -0
  2. data/Gemfile +4 -0
  3. data/LICENCE.txt +22 -0
  4. data/README.md +29 -0
  5. data/Rakefile +1 -0
  6. data/features/schedsolver_T1_initializes.feature +11 -0
  7. data/features/schedsolver_T2_seed.feature +16 -0
  8. data/features/schedsolver_T3_constraint_checker.feature +29 -0
  9. data/features/schedsolver_T3v2_constraints.feature +8 -0
  10. data/features/schedsolver_T4_print_attributes.feature +19 -0
  11. data/features/schedsolver_T5_crud_attributes.feature +26 -0
  12. data/features/schedsolver_T6_generate_schedules.feature +14 -0
  13. data/features/schedsolver_T7_log_output.feature +9 -0
  14. data/features/schedsolver_T8_big_example.feature +10 -0
  15. data/features/schedsolver_heuristic.feature +10 -0
  16. data/features/step_definitions/T1_steps.rb +19 -0
  17. data/features/step_definitions/T3_steps.rb +97 -0
  18. data/features/step_definitions/T3v2_steps.rb +14 -0
  19. data/features/step_definitions/T4_steps.rb +19 -0
  20. data/features/step_definitions/T6_steps.rb +62 -0
  21. data/features/step_definitions/heuristic_steps.rb +49 -0
  22. data/features/step_definitions/shared_steps.rb +10 -0
  23. data/features/support/env.rb +4 -0
  24. data/features/support/shared_contexts.rb +47 -0
  25. data/lib/schedsolver2.rb +84 -0
  26. data/lib/schedsolver2/ClassCounter.rb +42 -0
  27. data/lib/schedsolver2/constraint.rb +133 -0
  28. data/lib/schedsolver2/schedule.rb +107 -0
  29. data/lib/schedsolver2/school.rb +176 -0
  30. data/lib/schedsolver2/teacher.rb +49 -0
  31. data/schedsolver2.gemspec +23 -0
  32. data/script/console +10 -0
  33. data/script/destroy +14 -0
  34. data/script/generate +14 -0
  35. data/spec/ClassCounter_spec.rb +38 -0
  36. data/spec/constraint_spec.rb +83 -0
  37. data/spec/schedsolver2_spec.rb +4 -0
  38. data/spec/schedule_spec.rb +53 -0
  39. data/spec/school_spec.rb +56 -0
  40. data/spec/spec.opts +1 -0
  41. data/spec/spec_helper.rb +3 -0
  42. data/spec/support/masters/2ETs_8_to_14_by_1.schedule +12 -0
  43. data/spec/support/shared_contexts.rb +41 -0
  44. data/spec/teacher_spec.rb +43 -0
  45. metadata +151 -0
@@ -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
@@ -0,0 +1,3 @@
1
+ require 'rspec'
2
+ require File.expand_path('../../lib/schedsolver2', __FILE__)
3
+ require File.expand_path('../../spec/support/shared_contexts', __FILE__)
@@ -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