Packages

A model management framework supporting multi-layered abstraction structures, pluggable data layers, and arbitrary command-line transform tools.

Current section

Files

Jump to
paradigm lib testing conformance_test_suite multiplicity.ex
Raw

lib/testing/conformance_test_suite/multiplicity.ex

defmodule Paradigm.Conformance.TestSuite.Multiplicity do
defmacro __using__(_opts) do
quote do
test "validates property cardinality" do
paradigm = %Paradigm{
primitive_types: %{"string" => %Paradigm.PrimitiveType{name: "String"}},
classes: %{
"class1" => %Paradigm.Class{
name: "TestClass",
properties: %{
"testProp" => %Paradigm.Property{
name: "testProp",
lower_bound: 2,
upper_bound: 3,
type: "string"
}
}
}
}
}
# Test too few values
node1 = %Paradigm.Graph.Node{
id: "node1",
class: "class1",
data: %{"testProp" => ["value1"]}
}
graph1 = build_graph(node1)
assert %Paradigm.Conformance.Result{
issues: [
%Paradigm.Conformance.Issue{
property: "testProp",
kind: :cardinality_too_low,
details: %{count: 1, minimum: 2},
node_id: "node1"
}
]
} =
Paradigm.Conformance.check_graph(graph1, paradigm)
# Test too many values
node2 = %Paradigm.Graph.Node{
id: "node1",
class: "class1",
data: %{"testProp" => ["value1", "value2", "value3", "value4"]}
}
graph2 = build_graph(node2)
assert %Paradigm.Conformance.Result{
issues: [
%Paradigm.Conformance.Issue{
property: "testProp",
kind: :cardinality_too_high,
details: %{count: 4, maximum: 3},
node_id: "node1"
}
]
} =
Paradigm.Conformance.check_graph(graph2, paradigm)
end
test "validates property cardinality edge cases" do
paradigm = %Paradigm{
primitive_types: %{"string" => %Paradigm.PrimitiveType{name: "String"}},
classes: %{
"class1" => %Paradigm.Class{
name: "TestClass",
properties: %{
"zeroProp" => %Paradigm.Property{
name: "zeroProp",
lower_bound: 0,
upper_bound: 0,
type: "string"
},
"optionalProp" => %Paradigm.Property{
name: "optionalProp",
lower_bound: 0,
upper_bound: 1,
type: "string"
},
"infiniteProp" => %Paradigm.Property{
name: "infiniteProp",
lower_bound: 1,
upper_bound: :infinity,
type: "string"
}
}
}
}
}
# Test zero cardinality
node1 = %Paradigm.Graph.Node{
id: "node1",
class: "class1",
data: %{
"zeroProp" => [],
"optionalProp" => [],
"infiniteProp" => ["value1"]
}
}
graph1 = build_graph(node1)
Paradigm.Conformance.assert_conforms(graph1, paradigm)
# Test optional property
node2 = %Paradigm.Graph.Node{
id: "node1",
class: "class1",
data: %{
"zeroProp" => [],
"optionalProp" => ["value"],
"infiniteProp" => ["value1"]
}
}
graph2 = build_graph(node2)
Paradigm.Conformance.assert_conforms(graph2, paradigm)
# Test infinite upper bound
node3 = %Paradigm.Graph.Node{
id: "node1",
class: "class1",
data: %{
"zeroProp" => [],
"optionalProp" => [],
"infiniteProp" => List.duplicate("value", 100)
}
}
graph3 = build_graph(node3)
Paradigm.Conformance.assert_conforms(graph3, paradigm)
end
end
end
end