finitio 0.4.1 → 0.5.0
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.
- checksums.yaml +7 -0
- data/CHANGELOG.md +66 -0
- data/Gemfile +1 -1
- data/Gemfile.lock +34 -30
- data/finitio.gemspec +1 -1
- data/lib/finitio.rb +7 -39
- data/lib/finitio/errors.rb +14 -0
- data/lib/finitio/support.rb +4 -1
- data/lib/finitio/support/attribute.rb +13 -7
- data/lib/finitio/support/compilation.rb +55 -0
- data/lib/finitio/support/constraint.rb +46 -0
- data/lib/finitio/support/contract.rb +33 -0
- data/lib/finitio/support/dress_helper.rb +3 -2
- data/lib/finitio/support/heading.rb +57 -17
- data/lib/finitio/support/metadata.rb +20 -0
- data/lib/finitio/support/type_factory.rb +154 -41
- data/lib/finitio/syntax.rb +16 -31
- data/lib/finitio/syntax/expr.rb +56 -0
- data/lib/finitio/syntax/expr/arith_op.rb +22 -0
- data/lib/finitio/syntax/expr/comparison.rb +22 -0
- data/lib/finitio/syntax/expr/fn_call.rb +24 -0
- data/lib/finitio/syntax/expr/identifier.rb +18 -0
- data/lib/finitio/syntax/expr/literal.rb +19 -0
- data/lib/finitio/syntax/expr/logic_dyadic.rb +22 -0
- data/lib/finitio/syntax/expr/logic_not.rb +21 -0
- data/lib/finitio/syntax/expr/oo_call.rb +24 -0
- data/lib/finitio/syntax/expr/parenthesized.rb +20 -0
- data/lib/finitio/syntax/expr/unary_minus_op.rb +21 -0
- data/lib/finitio/syntax/expressions.citrus +129 -0
- data/lib/finitio/syntax/finitio.citrus +10 -208
- data/lib/finitio/syntax/finitio.sexp +5 -1
- data/lib/finitio/syntax/lexer.citrus +91 -0
- data/lib/finitio/syntax/literal.rb +16 -0
- data/lib/finitio/syntax/literal/boolean.rb +22 -0
- data/lib/finitio/syntax/literal/integer.rb +14 -0
- data/lib/finitio/syntax/literal/real.rb +14 -0
- data/lib/finitio/syntax/literal/string.rb +14 -0
- data/lib/finitio/syntax/literals.citrus +44 -0
- data/lib/finitio/syntax/node.rb +53 -0
- data/lib/finitio/syntax/type.rb +28 -0
- data/lib/finitio/syntax/type/ad_type.rb +29 -0
- data/lib/finitio/syntax/{any_type.rb → type/any_type.rb} +1 -1
- data/lib/finitio/syntax/type/attribute.rb +33 -0
- data/lib/finitio/syntax/{builtin_type.rb → type/builtin_type.rb} +3 -1
- data/lib/finitio/syntax/{constraint_def.rb → type/constraint_def.rb} +4 -3
- data/lib/finitio/syntax/type/constraints.rb +17 -0
- data/lib/finitio/syntax/{contract.rb → type/contract.rb} +9 -3
- data/lib/finitio/syntax/{definitions.rb → type/definitions.rb} +1 -0
- data/lib/finitio/syntax/{expression.rb → type/expression.rb} +2 -1
- data/lib/finitio/syntax/{external_pair.rb → type/external_pair.rb} +3 -1
- data/lib/finitio/syntax/type/heading.rb +30 -0
- data/lib/finitio/syntax/{inline_pair.rb → type/inline_pair.rb} +3 -1
- data/lib/finitio/syntax/{lambda_expr.rb → type/lambda_expr.rb} +3 -0
- data/lib/finitio/syntax/type/main_type.rb +18 -0
- data/lib/finitio/syntax/type/metadata.rb +18 -0
- data/lib/finitio/syntax/type/metadata_attr.rb +15 -0
- data/lib/finitio/syntax/{named_constraint.rb → type/named_constraint.rb} +10 -3
- data/lib/finitio/syntax/type/relation_type.rb +24 -0
- data/lib/finitio/syntax/{seq_type.rb → type/seq_type.rb} +3 -0
- data/lib/finitio/syntax/{set_type.rb → type/set_type.rb} +3 -0
- data/lib/finitio/syntax/type/struct_type.rb +17 -0
- data/lib/finitio/syntax/{sub_type.rb → type/sub_type.rb} +3 -0
- data/lib/finitio/syntax/{system.rb → type/system.rb} +5 -4
- data/lib/finitio/syntax/type/tuple_type.rb +24 -0
- data/lib/finitio/syntax/{type_def.rb → type/type_def.rb} +8 -3
- data/lib/finitio/syntax/{type_ref.rb → type/type_ref.rb} +4 -1
- data/lib/finitio/syntax/{union_type.rb → type/union_type.rb} +1 -0
- data/lib/finitio/syntax/{unnamed_constraint.rb → type/unnamed_constraint.rb} +7 -1
- data/lib/finitio/syntax/types.citrus +196 -0
- data/lib/finitio/system.rb +15 -15
- data/lib/finitio/type.rb +38 -6
- data/lib/finitio/type/ad_type.rb +41 -18
- data/lib/finitio/type/alias_type.rb +37 -0
- data/lib/finitio/type/any_type.rb +7 -3
- data/lib/finitio/type/builtin_type.rb +5 -4
- data/lib/finitio/{support → type}/collection_type.rb +3 -4
- data/lib/finitio/type/hash_based_type.rb +91 -0
- data/lib/finitio/type/heading_based_type.rb +28 -0
- data/lib/finitio/type/multi_relation_type.rb +34 -0
- data/lib/finitio/type/multi_tuple_type.rb +29 -0
- data/lib/finitio/type/proxy_type.rb +40 -0
- data/lib/finitio/type/rel_based_type.rb +42 -0
- data/lib/finitio/type/relation_type.rb +6 -47
- data/lib/finitio/type/seq_type.rb +4 -0
- data/lib/finitio/type/set_type.rb +4 -0
- data/lib/finitio/type/struct_type.rb +84 -0
- data/lib/finitio/type/sub_type.rb +25 -22
- data/lib/finitio/type/tuple_type.rb +6 -57
- data/lib/finitio/type/union_type.rb +12 -5
- data/lib/finitio/version.rb +2 -2
- data/spec/{unit/attribute → attribute}/test_equality.rb +8 -5
- data/spec/{unit/attribute → attribute}/test_fetch_on.rb +5 -5
- data/spec/attribute/test_initialize.rb +26 -0
- data/spec/attribute/test_optional.rb +18 -0
- data/spec/attribute/test_required.rb +18 -0
- data/spec/attribute/test_to_name.rb +20 -0
- data/spec/constraint/test_anonymous.rb +20 -0
- data/spec/constraint/test_equality.rb +39 -0
- data/spec/constraint/test_name.rb +20 -0
- data/spec/constraint/test_named.rb +20 -0
- data/spec/constraint/test_triple_equal.rb +13 -0
- data/spec/{unit/qrb/system.q → finitio/system.fio} +0 -0
- data/spec/{unit/qrb → finitio}/test_ast.rb +0 -0
- data/spec/finitio/test_parse.rb +23 -0
- data/spec/{unit/qrb/test_parse.rb → finitio/test_system.rb} +6 -6
- data/spec/heading/test_allow_extra.rb +24 -0
- data/spec/{unit/heading → heading}/test_each.rb +2 -2
- data/spec/heading/test_equality.rb +38 -0
- data/spec/heading/test_hash.rb +38 -0
- data/spec/heading/test_hash_get.rb +17 -0
- data/spec/{unit/heading → heading}/test_initialize.rb +2 -2
- data/spec/heading/test_multi.rb +57 -0
- data/spec/{unit/heading → heading}/test_size.rb +0 -0
- data/spec/heading/test_to_name.rb +58 -0
- data/spec/spec_helper.rb +17 -1
- data/spec/syntax/expr/test_free_variables.rb +46 -0
- data/spec/syntax/expr/test_to_proc_source.rb +43 -0
- data/spec/{unit/syntax → syntax}/nodes/test_ad_type.rb +26 -26
- data/spec/{unit/syntax → syntax}/nodes/test_any_type.rb +2 -2
- data/spec/syntax/nodes/test_attribute.rb +65 -0
- data/spec/{unit/syntax → syntax}/nodes/test_builtin_type.rb +5 -5
- data/spec/{unit/syntax → syntax}/nodes/test_comment.rb +1 -1
- data/spec/{unit/syntax → syntax}/nodes/test_constraint_def.rb +3 -8
- data/spec/{unit/syntax → syntax}/nodes/test_constraints.rb +21 -16
- data/spec/{unit/syntax → syntax}/nodes/test_contract.rb +28 -35
- data/spec/{unit/syntax → syntax}/nodes/test_expression.rb +13 -5
- data/spec/{unit/syntax → syntax}/nodes/test_heading.rb +25 -7
- data/spec/syntax/nodes/test_metadata.rb +28 -0
- data/spec/{unit/syntax → syntax}/nodes/test_named_constraint.rb +8 -8
- data/spec/syntax/nodes/test_relation_type.rb +84 -0
- data/spec/{unit/syntax → syntax}/nodes/test_seq_type.rb +4 -4
- data/spec/{unit/syntax → syntax}/nodes/test_set_type.rb +4 -4
- data/spec/{unit/syntax → syntax}/nodes/test_spacing.rb +1 -1
- data/spec/syntax/nodes/test_struct_type.rb +38 -0
- data/spec/{unit/syntax → syntax}/nodes/test_sub_type.rb +14 -14
- data/spec/{unit/syntax → syntax}/nodes/test_system.rb +3 -3
- data/spec/syntax/nodes/test_tuple_type.rb +94 -0
- data/spec/syntax/nodes/test_type_def.rb +57 -0
- data/spec/{unit/syntax → syntax}/nodes/test_type_ref.rb +3 -3
- data/spec/{unit/syntax → syntax}/nodes/test_union_type.rb +3 -3
- data/spec/{unit/syntax → syntax}/nodes/test_unnamed_constraint.rb +7 -7
- data/spec/syntax/test_compile.rb +41 -0
- data/spec/{unit/syntax → syntax}/test_compile_type.rb +1 -1
- data/spec/{unit/system → system}/test_add_type.rb +6 -6
- data/spec/{unit/system → system}/test_dsl.rb +2 -2
- data/spec/{unit/system → system}/test_dup.rb +4 -4
- data/spec/{unit/system → system}/test_fetch.rb +4 -4
- data/spec/{unit/system → system}/test_get_type.rb +2 -2
- data/spec/{unit/system → system}/test_initialize.rb +0 -0
- data/spec/test_finitio.rb +8 -0
- data/spec/{unit/type → type}/ad_type/test_default_name.rb +1 -2
- data/spec/{unit/type → type}/ad_type/test_dress.rb +19 -9
- data/spec/{unit/type → type}/ad_type/test_include.rb +3 -3
- data/spec/{unit/type → type}/ad_type/test_initialize.rb +15 -8
- data/spec/{unit/type → type}/ad_type/test_name.rb +2 -2
- data/spec/type/alias_type/test_default_name.rb +10 -0
- data/spec/type/alias_type/test_delegation.rb +29 -0
- data/spec/type/alias_type/test_name.rb +10 -0
- data/spec/{unit/type → type}/any_type/test_default_name.rb +1 -1
- data/spec/{unit/type → type}/any_type/test_dress.rb +0 -0
- data/spec/{unit/type → type}/any_type/test_equality.rb +4 -4
- data/spec/{unit/type → type}/any_type/test_include.rb +2 -2
- data/spec/{unit/type → type}/any_type/test_initialize.rb +0 -0
- data/spec/{unit/type → type}/any_type/test_name.rb +2 -2
- data/spec/{unit/type → type}/builtin_type/test_default_name.rb +1 -1
- data/spec/{unit/type → type}/builtin_type/test_dress.rb +3 -3
- data/spec/{unit/type → type}/builtin_type/test_equality.rb +4 -4
- data/spec/{unit/type → type}/builtin_type/test_include.rb +2 -2
- data/spec/{unit/type → type}/builtin_type/test_initialize.rb +1 -1
- data/spec/{unit/type → type}/builtin_type/test_name.rb +2 -2
- data/spec/type/multi_relation_type/test_default_name.rb +19 -0
- data/spec/type/multi_relation_type/test_dress.rb +206 -0
- data/spec/type/multi_relation_type/test_equality.rb +36 -0
- data/spec/type/multi_relation_type/test_include.rb +89 -0
- data/spec/type/multi_relation_type/test_initialize.rb +29 -0
- data/spec/type/multi_relation_type/test_name.rb +27 -0
- data/spec/type/multi_tuple_type/test_default_name.rb +17 -0
- data/spec/type/multi_tuple_type/test_dress.rb +146 -0
- data/spec/type/multi_tuple_type/test_equality.rb +32 -0
- data/spec/type/multi_tuple_type/test_include.rb +73 -0
- data/spec/type/multi_tuple_type/test_initialize.rb +30 -0
- data/spec/type/multi_tuple_type/test_name.rb +24 -0
- data/spec/type/proxy_type/test_delegation.rb +37 -0
- data/spec/type/proxy_type/test_resolve.rb +29 -0
- data/spec/{unit/type → type}/relation_type/test_default_name.rb +0 -0
- data/spec/{unit/type → type}/relation_type/test_dress.rb +24 -24
- data/spec/{unit/type → type}/relation_type/test_equality.rb +6 -6
- data/spec/{unit/type → type}/relation_type/test_include.rb +4 -4
- data/spec/{unit/type → type}/relation_type/test_initialize.rb +2 -2
- data/spec/{unit/type → type}/relation_type/test_name.rb +0 -0
- data/spec/{unit/type → type}/seq_type/test_default_name.rb +0 -0
- data/spec/{unit/type → type}/seq_type/test_dress.rb +5 -5
- data/spec/{unit/type → type}/seq_type/test_equality.rb +4 -4
- data/spec/{unit/type → type}/seq_type/test_include.rb +4 -4
- data/spec/{unit/type → type}/seq_type/test_initialize.rb +3 -3
- data/spec/{unit/type → type}/seq_type/test_name.rb +0 -0
- data/spec/{unit/type → type}/set_type/test_default_name.rb +0 -0
- data/spec/{unit/type → type}/set_type/test_dress.rb +8 -8
- data/spec/{unit/type → type}/set_type/test_equality.rb +4 -4
- data/spec/{unit/type → type}/set_type/test_include.rb +4 -4
- data/spec/{unit/type → type}/set_type/test_initialize.rb +3 -3
- data/spec/{unit/type → type}/set_type/test_name.rb +0 -0
- data/spec/type/struct_type/test_default_name.rb +10 -0
- data/spec/type/struct_type/test_dress.rb +105 -0
- data/spec/type/struct_type/test_equality.rb +28 -0
- data/spec/type/struct_type/test_include.rb +40 -0
- data/spec/type/struct_type/test_initialize.rb +22 -0
- data/spec/type/struct_type/test_name.rb +20 -0
- data/spec/{unit/type → type}/sub_type/test_default_name.rb +2 -2
- data/spec/{unit/type → type}/sub_type/test_dress.rb +14 -14
- data/spec/type/sub_type/test_equality.rb +46 -0
- data/spec/{unit/type → type}/sub_type/test_include.rb +6 -6
- data/spec/type/sub_type/test_initialize.rb +13 -0
- data/spec/{unit/type → type}/sub_type/test_name.rb +4 -4
- data/spec/{unit/type → type}/tuple_type/test_default_name.rb +0 -0
- data/spec/{unit/type → type}/tuple_type/test_dress.rb +18 -18
- data/spec/{unit/type → type}/tuple_type/test_equality.rb +6 -6
- data/spec/{unit/type → type}/tuple_type/test_include.rb +4 -4
- data/spec/{unit/type → type}/tuple_type/test_initialize.rb +4 -4
- data/spec/{unit/type → type}/tuple_type/test_name.rb +0 -0
- data/spec/{unit/type → type}/union_type/test_default_name.rb +0 -0
- data/spec/{unit/type → type}/union_type/test_dress.rb +7 -6
- data/spec/{unit/type → type}/union_type/test_equality.rb +7 -7
- data/spec/{unit/type → type}/union_type/test_include.rb +3 -3
- data/spec/{unit/type → type}/union_type/test_initialize.rb +3 -3
- data/spec/{unit/type → type}/union_type/test_name.rb +0 -0
- data/spec/{unit/type_factory → type_factory}/dsl/test_adt.rb +4 -4
- data/spec/{unit/type_factory → type_factory}/dsl/test_any.rb +1 -1
- data/spec/{unit/type_factory → type_factory}/dsl/test_attribute.rb +16 -2
- data/spec/{unit/type_factory → type_factory}/dsl/test_attributes.rb +1 -1
- data/spec/{unit/type_factory → type_factory}/dsl/test_builtin.rb +3 -3
- data/spec/type_factory/dsl/test_multi_relation.rb +39 -0
- data/spec/type_factory/dsl/test_multi_tuple.rb +37 -0
- data/spec/{unit/type_factory → type_factory}/dsl/test_relation.rb +6 -6
- data/spec/{unit/type_factory → type_factory}/dsl/test_seq.rb +4 -4
- data/spec/{unit/type_factory → type_factory}/dsl/test_set.rb +4 -4
- data/spec/type_factory/dsl/test_struct.rb +45 -0
- data/spec/{unit/type_factory → type_factory}/dsl/test_subtype.rb +10 -8
- data/spec/{unit/type_factory → type_factory}/dsl/test_tuple.rb +5 -5
- data/spec/{unit/type_factory → type_factory}/dsl/test_union.rb +6 -6
- data/spec/{unit/type_factory → type_factory}/factory/test_builtin.rb +1 -1
- data/spec/{unit/type_factory → type_factory}/factory/test_seq_type.rb +2 -2
- data/spec/{unit/type_factory → type_factory}/factory/test_set_type.rb +2 -2
- data/spec/type_factory/factory/test_struct_type.rb +18 -0
- data/spec/{unit/type_factory → type_factory}/factory/test_sub_type.rb +7 -7
- data/spec/{unit/type_factory → type_factory}/factory/test_tuple_type.rb +4 -4
- metadata +398 -286
- data/lib/finitio/data_type.rb +0 -29
- data/lib/finitio/syntax/ad_type.rb +0 -32
- data/lib/finitio/syntax/attribute.rb +0 -15
- data/lib/finitio/syntax/constraints.rb +0 -22
- data/lib/finitio/syntax/heading.rb +0 -19
- data/lib/finitio/syntax/relation_type.rb +0 -15
- data/lib/finitio/syntax/support.rb +0 -13
- data/lib/finitio/syntax/tuple_type.rb +0 -15
- data/spec/acceptance/Finitio/test_default.rb +0 -96
- data/spec/acceptance/Finitio/test_parsing.rb +0 -15
- data/spec/acceptance/ad_type/test_in_finitio.rb +0 -82
- data/spec/acceptance/ad_type/test_in_ruby.rb +0 -60
- data/spec/unit/attribute/test_initialize.rb +0 -13
- data/spec/unit/attribute/test_to_name.rb +0 -10
- data/spec/unit/heading/test_equality.rb +0 -28
- data/spec/unit/heading/test_to_name.rb +0 -32
- data/spec/unit/syntax/nodes/test_attribute.rb +0 -38
- data/spec/unit/syntax/nodes/test_relation_type.rb +0 -59
- data/spec/unit/syntax/nodes/test_tuple_type.rb +0 -59
- data/spec/unit/syntax/nodes/test_type_def.rb +0 -33
- data/spec/unit/test_finitio.rb +0 -15
- data/spec/unit/type/sub_type/test_equality.rb +0 -34
- data/spec/unit/type/sub_type/test_initialize.rb +0 -16
@@ -9,7 +9,7 @@ module Finitio
|
|
9
9
|
it{ should be_a(Array) }
|
10
10
|
|
11
11
|
it 'should be the correct pair' do
|
12
|
-
subject.
|
12
|
+
expect(subject).to eq([ Attribute.new(:a, intType), Attribute.new(:b, floatType) ])
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
@@ -9,7 +9,7 @@ module Finitio
|
|
9
9
|
it{ should be_a(BuiltinType) }
|
10
10
|
|
11
11
|
it 'should have the correct ruby type' do
|
12
|
-
subject.ruby_type.
|
12
|
+
expect(subject.ruby_type).to be(Integer)
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
@@ -25,7 +25,7 @@ module Finitio
|
|
25
25
|
it_should_behave_like "The Integer builtin type"
|
26
26
|
|
27
27
|
it 'should have the correct name' do
|
28
|
-
subject.name.
|
28
|
+
expect(subject.name).to eq("Integer")
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
@@ -37,7 +37,7 @@ module Finitio
|
|
37
37
|
it_should_behave_like "The Integer builtin type"
|
38
38
|
|
39
39
|
it 'should have the correct name' do
|
40
|
-
subject.name.
|
40
|
+
expect(subject.name).to eq("Int")
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
module Finitio
|
3
|
+
describe TypeFactory, "DSL#multi_relation" do
|
4
|
+
|
5
|
+
let(:factory){ TypeFactory.new }
|
6
|
+
|
7
|
+
let(:heading){
|
8
|
+
Heading.new([
|
9
|
+
Attribute.new(:a, intType, false)
|
10
|
+
])
|
11
|
+
}
|
12
|
+
|
13
|
+
shared_examples_for "The Relation[a :? Int] type" do
|
14
|
+
|
15
|
+
it{ should be_a(MultiRelationType) }
|
16
|
+
|
17
|
+
it 'should have the correct heading' do
|
18
|
+
expect(subject.heading).to eq(heading)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
before do
|
23
|
+
subject
|
24
|
+
end
|
25
|
+
|
26
|
+
context 'when used with the standard signature' do
|
27
|
+
subject{
|
28
|
+
factory.multi_relation(heading, "MyRelation")
|
29
|
+
}
|
30
|
+
|
31
|
+
it_should_behave_like "The Relation[a :? Int] type"
|
32
|
+
|
33
|
+
it 'should have the correct name' do
|
34
|
+
expect(subject.name).to eq("MyRelation")
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
module Finitio
|
3
|
+
describe TypeFactory, "DSL#multi_tuple" do
|
4
|
+
|
5
|
+
let(:factory){ TypeFactory.new }
|
6
|
+
|
7
|
+
let(:heading){
|
8
|
+
Heading.new([ Attribute.new(:a, intType, false) ])
|
9
|
+
}
|
10
|
+
|
11
|
+
shared_examples_for "The Tuple[a :? Int] type" do
|
12
|
+
|
13
|
+
it{ should be_a(MultiTupleType) }
|
14
|
+
|
15
|
+
it 'should have the correct heading' do
|
16
|
+
expect(subject.heading).to eq(heading)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
before do
|
21
|
+
subject
|
22
|
+
end
|
23
|
+
|
24
|
+
context 'when used with the standard signature' do
|
25
|
+
subject{
|
26
|
+
factory.multi_tuple(heading, "MyTuple")
|
27
|
+
}
|
28
|
+
|
29
|
+
it_should_behave_like "The Tuple[a :? Int] type"
|
30
|
+
|
31
|
+
it 'should have the correct name' do
|
32
|
+
expect(subject.name).to eq("MyTuple")
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
@@ -13,7 +13,7 @@ module Finitio
|
|
13
13
|
it{ should be_a(RelationType) }
|
14
14
|
|
15
15
|
it 'should have the correct heading' do
|
16
|
-
subject.heading.
|
16
|
+
expect(subject.heading).to eq(heading)
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
@@ -29,7 +29,7 @@ module Finitio
|
|
29
29
|
it_should_behave_like "The Relation[a: Int] type"
|
30
30
|
|
31
31
|
it 'should have the correct name' do
|
32
|
-
subject.name.
|
32
|
+
expect(subject.name).to eq("MyRelation")
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
@@ -41,7 +41,7 @@ module Finitio
|
|
41
41
|
it_should_behave_like "The Relation[a: Int] type"
|
42
42
|
|
43
43
|
it 'should have the correct name' do
|
44
|
-
subject.name.
|
44
|
+
expect(subject.name).to eq("MyRelation")
|
45
45
|
end
|
46
46
|
end
|
47
47
|
|
@@ -53,7 +53,7 @@ module Finitio
|
|
53
53
|
it_should_behave_like "The Relation[a: Int] type"
|
54
54
|
|
55
55
|
it 'should have the correct name' do
|
56
|
-
subject.name.
|
56
|
+
expect(subject.name).to eq("{{a: Integer}}")
|
57
57
|
end
|
58
58
|
end
|
59
59
|
|
@@ -65,7 +65,7 @@ module Finitio
|
|
65
65
|
it_should_behave_like "The Relation[a: Int] type"
|
66
66
|
|
67
67
|
it 'should have the correct name' do
|
68
|
-
subject.name.
|
68
|
+
expect(subject.name).to eq("MyRelation")
|
69
69
|
end
|
70
70
|
end
|
71
71
|
|
@@ -77,7 +77,7 @@ module Finitio
|
|
77
77
|
it_should_behave_like "The Relation[a: Int] type"
|
78
78
|
|
79
79
|
it 'should have the correct name' do
|
80
|
-
subject.name.
|
80
|
+
expect(subject.name).to eq("{{a: intType}}")
|
81
81
|
end
|
82
82
|
end
|
83
83
|
|
@@ -9,7 +9,7 @@ module Finitio
|
|
9
9
|
it{ should be_a(SeqType) }
|
10
10
|
|
11
11
|
it 'should have the correct element type' do
|
12
|
-
subject.elm_type.
|
12
|
+
expect(subject.elm_type).to eq(intType)
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
@@ -25,7 +25,7 @@ module Finitio
|
|
25
25
|
it_should_behave_like "The Seq[Int] type"
|
26
26
|
|
27
27
|
it 'should have the correct name' do
|
28
|
-
subject.name.
|
28
|
+
expect(subject.name).to eq("[Integer]")
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
@@ -37,7 +37,7 @@ module Finitio
|
|
37
37
|
it_should_behave_like "The Seq[Int] type"
|
38
38
|
|
39
39
|
it 'should have the correct name' do
|
40
|
-
subject.name.
|
40
|
+
expect(subject.name).to eq("[intType]")
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
@@ -49,7 +49,7 @@ module Finitio
|
|
49
49
|
it_should_behave_like "The Seq[Int] type"
|
50
50
|
|
51
51
|
it 'should have the correct name' do
|
52
|
-
subject.name.
|
52
|
+
expect(subject.name).to eq("MySeq")
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
@@ -9,7 +9,7 @@ module Finitio
|
|
9
9
|
it{ should be_a(SetType) }
|
10
10
|
|
11
11
|
it 'should have the correct element type' do
|
12
|
-
subject.elm_type.
|
12
|
+
expect(subject.elm_type).to eq(intType)
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
@@ -25,7 +25,7 @@ module Finitio
|
|
25
25
|
it_should_behave_like "The Set[Int] type"
|
26
26
|
|
27
27
|
it 'should have the correct name' do
|
28
|
-
subject.name.
|
28
|
+
expect(subject.name).to eq("{Integer}")
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
@@ -37,7 +37,7 @@ module Finitio
|
|
37
37
|
it_should_behave_like "The Set[Int] type"
|
38
38
|
|
39
39
|
it 'should have the correct name' do
|
40
|
-
subject.name.
|
40
|
+
expect(subject.name).to eq("{intType}")
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
@@ -49,7 +49,7 @@ module Finitio
|
|
49
49
|
it_should_behave_like "The Set[Int] type"
|
50
50
|
|
51
51
|
it 'should have the correct name' do
|
52
|
-
subject.name.
|
52
|
+
expect(subject.name).to eq("MySet")
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
module Finitio
|
3
|
+
describe TypeFactory, "DSL#struct" do
|
4
|
+
|
5
|
+
let(:factory){ TypeFactory.new }
|
6
|
+
|
7
|
+
shared_examples_for "The <Int, Float> type" do
|
8
|
+
|
9
|
+
it{ should be_a(StructType) }
|
10
|
+
|
11
|
+
it 'should have the correct components' do
|
12
|
+
expect(subject.component_types).to eq([intType, floatType])
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
before do
|
17
|
+
subject
|
18
|
+
end
|
19
|
+
|
20
|
+
context 'when used with the standard signature' do
|
21
|
+
subject{
|
22
|
+
factory.struct([intType, floatType], "MyTuple")
|
23
|
+
}
|
24
|
+
|
25
|
+
it_should_behave_like "The <Int, Float> type"
|
26
|
+
|
27
|
+
it 'should have the correct name' do
|
28
|
+
expect(subject.name).to eq("MyTuple")
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
context 'when used with an array of ruby classes' do
|
33
|
+
subject{
|
34
|
+
factory.struct([Integer, Float])
|
35
|
+
}
|
36
|
+
|
37
|
+
it_should_behave_like "The <Int, Float> type"
|
38
|
+
|
39
|
+
it 'should have the correct name' do
|
40
|
+
expect(subject.name).to eq("<Integer, Float>")
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
end
|
@@ -13,14 +13,14 @@ module Finitio
|
|
13
13
|
it{ should be_a(SubType) }
|
14
14
|
|
15
15
|
it 'should have the BuiltinType(Integer) super type' do
|
16
|
-
subject.super_type.
|
17
|
-
subject.super_type.ruby_type.
|
16
|
+
expect(subject.super_type).to be_a(BuiltinType)
|
17
|
+
expect(subject.super_type.ruby_type).to be(Integer)
|
18
18
|
end
|
19
19
|
|
20
20
|
it 'should have the correct constraint' do
|
21
|
-
|
21
|
+
expect{
|
22
22
|
subject.dress(-12)
|
23
|
-
}.
|
23
|
+
}.to raise_error(TypeError)
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
@@ -29,12 +29,14 @@ module Finitio
|
|
29
29
|
it{ should be_a(SubType) }
|
30
30
|
|
31
31
|
it 'should have the BuiltinType(Integer) super type' do
|
32
|
-
subject.super_type.
|
33
|
-
subject.super_type.ruby_type.
|
32
|
+
expect(subject.super_type).to be_a(BuiltinType)
|
33
|
+
expect(subject.super_type.ruby_type).to be(Integer)
|
34
34
|
end
|
35
35
|
|
36
36
|
it 'should have the correct constraints' do
|
37
|
-
subject.constraints.
|
37
|
+
subject.constraints.each do |c|
|
38
|
+
expect(c).to be_a(Constraint)
|
39
|
+
end
|
38
40
|
end
|
39
41
|
end
|
40
42
|
|
@@ -83,7 +85,7 @@ module Finitio
|
|
83
85
|
it_should_behave_like "The SmallInt structural type"
|
84
86
|
|
85
87
|
it 'should have the correct name' do
|
86
|
-
subject.name.
|
88
|
+
expect(subject.name).to eq("SmallInt")
|
87
89
|
end
|
88
90
|
end
|
89
91
|
|
@@ -13,7 +13,7 @@ module Finitio
|
|
13
13
|
it{ should be_a(TupleType) }
|
14
14
|
|
15
15
|
it 'should have the correct heading' do
|
16
|
-
subject.heading.
|
16
|
+
expect(subject.heading).to eq(heading)
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
@@ -29,7 +29,7 @@ module Finitio
|
|
29
29
|
it_should_behave_like "The Tuple[a: Int] type"
|
30
30
|
|
31
31
|
it 'should have the correct name' do
|
32
|
-
subject.name.
|
32
|
+
expect(subject.name).to eq("MyTuple")
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
@@ -41,7 +41,7 @@ module Finitio
|
|
41
41
|
it_should_behave_like "The Tuple[a: Int] type"
|
42
42
|
|
43
43
|
it 'should have the correct name' do
|
44
|
-
subject.name.
|
44
|
+
expect(subject.name).to eq("{a: Integer}")
|
45
45
|
end
|
46
46
|
end
|
47
47
|
|
@@ -53,7 +53,7 @@ module Finitio
|
|
53
53
|
it_should_behave_like "The Tuple[a: Int] type"
|
54
54
|
|
55
55
|
it 'should have the correct name' do
|
56
|
-
subject.name.
|
56
|
+
expect(subject.name).to eq("MyTuple")
|
57
57
|
end
|
58
58
|
end
|
59
59
|
|
@@ -65,7 +65,7 @@ module Finitio
|
|
65
65
|
it_should_behave_like "The Tuple[a: Int] type"
|
66
66
|
|
67
67
|
it 'should have the correct name' do
|
68
|
-
subject.name.
|
68
|
+
expect(subject.name).to eq("{a: intType}")
|
69
69
|
end
|
70
70
|
end
|
71
71
|
|
@@ -9,7 +9,7 @@ module Finitio
|
|
9
9
|
it{ should be_a(UnionType) }
|
10
10
|
|
11
11
|
it 'should have the correct candidates' do
|
12
|
-
subject.candidates.
|
12
|
+
expect(subject.candidates).to eq([intType, floatType])
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
@@ -25,7 +25,7 @@ module Finitio
|
|
25
25
|
it_should_behave_like "The Int|Float union type"
|
26
26
|
|
27
27
|
it 'should have the correct name' do
|
28
|
-
subject.name.
|
28
|
+
expect(subject.name).to eq("MyUnion")
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
@@ -37,7 +37,7 @@ module Finitio
|
|
37
37
|
it_should_behave_like "The Int|Float union type"
|
38
38
|
|
39
39
|
it 'should have the correct name' do
|
40
|
-
subject.name.
|
40
|
+
expect(subject.name).to eq("Integer|Float")
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
@@ -49,7 +49,7 @@ module Finitio
|
|
49
49
|
it_should_behave_like "The Int|Float union type"
|
50
50
|
|
51
51
|
it 'should have the correct name' do
|
52
|
-
subject.name.
|
52
|
+
expect(subject.name).to eq("Integer|Float")
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
@@ -61,7 +61,7 @@ module Finitio
|
|
61
61
|
it_should_behave_like "The Int|Float union type"
|
62
62
|
|
63
63
|
it 'should have the correct name' do
|
64
|
-
subject.name.
|
64
|
+
expect(subject.name).to eq("intType|floatType")
|
65
65
|
end
|
66
66
|
end
|
67
67
|
|
@@ -73,7 +73,7 @@ module Finitio
|
|
73
73
|
it_should_behave_like "The Int|Float union type"
|
74
74
|
|
75
75
|
it 'should have the correct name' do
|
76
|
-
subject.name.
|
76
|
+
expect(subject.name).to eq("Integer|floatType")
|
77
77
|
end
|
78
78
|
end
|
79
79
|
|
@@ -19,7 +19,7 @@ module Finitio
|
|
19
19
|
it{ should eq(expected) }
|
20
20
|
|
21
21
|
it 'should have the correct name' do
|
22
|
-
subject.name.
|
22
|
+
expect(subject.name).to eq("MySeq")
|
23
23
|
end
|
24
24
|
end
|
25
25
|
end
|
@@ -36,7 +36,7 @@ module Finitio
|
|
36
36
|
it{ should eq(expected) }
|
37
37
|
|
38
38
|
it 'should have the correct name' do
|
39
|
-
subject.name.
|
39
|
+
expect(subject.name).to eq("MySeq")
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|