1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
|
describe Scientist::Result do
before do
@experiment = Scientist::Experiment.new "experiment"
end
it "is immutable" do
control = Scientist::Observation.new("control", @experiment)
candidate = Scientist::Observation.new("candidate", @experiment)
result = Scientist::Result.new @experiment, [control, candidate], control
assert result.frozen?
end
it "evaluates its observations" do
a = Scientist::Observation.new("a", @experiment) { 1 }
b = Scientist::Observation.new("b", @experiment) { 1 }
assert a.equivalent_to?(b)
result = Scientist::Result.new @experiment, [a, b], a
assert result.matched?
refute result.mismatched?
assert_equal [], result.mismatched
x = Scientist::Observation.new("x", @experiment) { 1 }
y = Scientist::Observation.new("y", @experiment) { 2 }
z = Scientist::Observation.new("z", @experiment) { 3 }
result = Scientist::Result.new @experiment, [x, y, z], x
refute result.matched?
assert result.mismatched?
assert_equal [y, z], result.mismatched
end
it "has no mismatches if there is only a control observation" do
a = Scientist::Observation.new("a", @experiment) { 1 }
result = Scientist::Result.new @experiment, [a], a
assert result.matched?
end
it "evaluates observations using the experiment's compare block" do
a = Scientist::Observation.new("a", @experiment) { "1" }
b = Scientist::Observation.new("b", @experiment) { 1 }
@experiment.compare { |x, y| x == y.to_s }
result = Scientist::Result.new @experiment, [a, b], a
assert result.matched?, result.mismatched
end
it "does not ignore any mismatches when nothing's ignored" do
x = Scientist::Observation.new("x", @experiment) { 1 }
y = Scientist::Observation.new("y", @experiment) { 2 }
result = Scientist::Result.new @experiment, [x, y], x
assert result.mismatched?
refute result.ignored?
end
it "uses the experiment's ignore block to ignore mismatched observations" do
x = Scientist::Observation.new("x", @experiment) { 1 }
y = Scientist::Observation.new("y", @experiment) { 2 }
called = false
@experiment.ignore { called = true }
result = Scientist::Result.new @experiment, [x, y], x
refute result.mismatched?
refute result.matched?
assert result.ignored?
assert_equal [], result.mismatched
assert_equal [y], result.ignored
assert called
end
it "partitions observations into mismatched and ignored when applicable" do
x = Scientist::Observation.new("x", @experiment) { :x }
y = Scientist::Observation.new("y", @experiment) { :y }
z = Scientist::Observation.new("z", @experiment) { :z }
@experiment.ignore { |control, candidate| candidate == :y }
result = Scientist::Result.new @experiment, [x, y, z], x
assert result.mismatched?
assert result.ignored?
assert_equal [y], result.ignored
assert_equal [z], result.mismatched
end
it "knows the experiment's name" do
a = Scientist::Observation.new("a", @experiment) { 1 }
b = Scientist::Observation.new("b", @experiment) { 1 }
result = Scientist::Result.new @experiment, [a, b], a
assert_equal @experiment.name, result.experiment_name
end
it "has the context from an experiment" do
@experiment.context :foo => :bar
a = Scientist::Observation.new("a", @experiment) { 1 }
b = Scientist::Observation.new("b", @experiment) { 1 }
result = Scientist::Result.new @experiment, [a, b], a
assert_equal({:foo => :bar}, result.context)
end
end
|