Name | Total Lines | Lines of Code | Total Coverage | Code Coverage |
---|---|---|---|---|
lib/gecoder/bindings.rb | 98 | 32 | 100.00%
|
100.00%
|
Code reported as executed by Ruby looks like this...and this: this line is also marked as covered.Lines considered as run by rcov, but not reported by Ruby, look like this,and this: these lines were inferred by rcov (using simple heuristics).Finally, here's a line marked as not executed.
1 # Problems can be formulated and solved either through defining a new |
2 # class that mixes in Gecode::Mixin or by using Gecode.solve et al. |
3 # Gecode::Mixin describes how to formulate problems. |
4 # |
5 # ==== Examples |
6 # |
7 # The following two examples show how to solve the following equation |
8 # system, using both ways to define and solve a problem. |
9 # |
10 # Equation system: |
11 # x + y = z |
12 # x = y - 3 |
13 # 0 <= x,y,z <= 9 |
14 # |
15 # === Mixing in Gecode::Mixin |
16 # |
17 # class EquationProblem |
18 # include Gecode::Mixin |
19 # |
20 # def initialize |
21 # variables_is_an int_var_array(3, 0..9) |
22 # x, y, z = variables |
23 # |
24 # (x + y).must == z |
25 # x.must == y - 3 |
26 # |
27 # branch_on variables |
28 # end |
29 # end |
30 # puts EquationProblem.new.solve!.variables.join(' ') |
31 # |
32 # === Using Gecode.solve |
33 # |
34 # solution = Gecode.solve do |
35 # variables_is_an int_var_array(3, 0..9) |
36 # x, y, z = variables |
37 # |
38 # (x + y).must == z |
39 # x.must == y - 3 |
40 # |
41 # branch_on variables |
42 # end |
43 # puts solution.variables.values.join(' ') |
44 # |
45 module Gecode |
46 # Loads the binding libraries. This is done as a method in order to be easier |
47 # to test. |
48 def self.load_bindings_lib #:nodoc: |
49 # Workaround to get the precompiled DLLs into the DLL search path on |
50 # Windows. |
51 dll_dir = File.dirname(__FILE__) + '/../../vendor/gecode/win32/lib' |
52 if RUBY_PLATFORM =~ /mswin/ and File.exists? dll_dir |
53 # Switch directory while loading libraries so that the DLLs are in the |
54 # work directory. |
55 require 'fileutils' |
56 FileUtils.cd dll_dir do |
57 require 'gecode' |
58 end |
59 else |
60 require 'gecode' |
61 end |
62 end |
63 |
64 # Load the bindings library. |
65 load_bindings_lib |
66 |
67 # The Gecode::Raw module is what the interface should use to access methods |
68 # in Gecode. The actual bindings are located in ::GecodeRaw. |
69 |
70 # Describes a layer that delegates to GecodeRaw only after having logged the |
71 # call. |
72 module LoggingLayer #:nodoc: |
73 require 'logger' |
74 |
75 def self.method_missing(name, *args) |
76 logger.info{ "#{name}(#{args.join(', ')})" } |
77 ::GecodeRaw.send(name, *args) |
78 end |
79 |
80 def self.const_missing(name) |
81 ::GecodeRaw.const_get(name) |
82 end |
83 |
84 # Gets the logger, or creates one if none exists. |
85 def self.logger |
86 return @logger unless @logger.nil? |
87 file = open('gecoder.log', File::WRONLY | File::APPEND | File::CREAT) |
88 @logger = ::Logger.new(file) |
89 @logger.datetime_format = "%Y-%m-%d %H:%M:%S" |
90 @logger |
91 end |
92 end |
93 |
94 # We just make Gecode::Raw an alias of the real module. |
95 Raw = ::GecodeRaw |
96 # Log all calls via Gecode::Raw. |
97 #Raw = LoggingLayer |
98 end |
Generated on Thu Jan 08 13:27:02 +0100 2015 with rcov 1.0.0