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
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
module Finitio
|
3
|
+
describe MultiTupleType, "initialize" do
|
4
|
+
|
5
|
+
let(:heading){
|
6
|
+
Heading.new([Attribute.new(:a, intType)])
|
7
|
+
}
|
8
|
+
|
9
|
+
context 'with a valid heading' do
|
10
|
+
subject{ MultiTupleType.new(heading) }
|
11
|
+
|
12
|
+
it{ should be_a(MultiTupleType) }
|
13
|
+
|
14
|
+
it 'correctly sets the instance variable' do
|
15
|
+
expect(subject.heading).to eq(heading)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
context 'with an invalid heading' do
|
20
|
+
subject{ MultiTupleType.new("foo") }
|
21
|
+
|
22
|
+
it 'should raise an error' do
|
23
|
+
expect{
|
24
|
+
subject
|
25
|
+
}.to raise_error(ArgumentError, "Heading expected, got `foo`")
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
module Finitio
|
3
|
+
describe MultiTupleType, "name" do
|
4
|
+
|
5
|
+
let(:heading){
|
6
|
+
Heading.new([Attribute.new(:a, byte, false)])
|
7
|
+
}
|
8
|
+
|
9
|
+
subject{ type.name }
|
10
|
+
|
11
|
+
context 'when not provided' do
|
12
|
+
let(:type){ MultiTupleType.new(heading) }
|
13
|
+
|
14
|
+
it{ should eq("{a :? Byte}") }
|
15
|
+
end
|
16
|
+
|
17
|
+
context 'when provided' do
|
18
|
+
let(:type){ MultiTupleType.new(heading, "Color") }
|
19
|
+
|
20
|
+
it{ should eq("Color") }
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
module Finitio
|
3
|
+
describe ProxyType, "delegation pattern" do
|
4
|
+
|
5
|
+
let(:proxy){ ProxyType.new('Int', intType) }
|
6
|
+
|
7
|
+
it 'should delegate name' do
|
8
|
+
expect(proxy.name).to eq(intType.name)
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'should delegate default_name' do
|
12
|
+
expect(proxy.default_name).to eq(intType.default_name)
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'should delegate hash' do
|
16
|
+
expect(proxy.hash).to eq(intType.hash)
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'should delegate ==' do
|
20
|
+
expect(intType == proxy).to eq(true)
|
21
|
+
expect(proxy == intType).to eq(true)
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'should delegate dress' do
|
25
|
+
expect(proxy.dress(12)).to eq(12)
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'should delegate include?' do
|
29
|
+
expect(proxy.include?(12)).to eq(true)
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'should delegate to_s' do
|
33
|
+
expect(proxy.to_s).to eq(intType.to_s)
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
module Finitio
|
3
|
+
describe ProxyType, "delegation pattern" do
|
4
|
+
|
5
|
+
let(:proxy){ ProxyType.new('Int') }
|
6
|
+
|
7
|
+
subject{ proxy.resolve(system) }
|
8
|
+
|
9
|
+
context 'when type exists' do
|
10
|
+
let(:system){ {'Int' => intType} }
|
11
|
+
|
12
|
+
it 'resolves fine' do
|
13
|
+
subject
|
14
|
+
expect(proxy.target).to eq(intType)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
context 'when type does not exist' do
|
19
|
+
let(:system){ {} }
|
20
|
+
|
21
|
+
it 'raises an error' do
|
22
|
+
expect{
|
23
|
+
subject
|
24
|
+
}.to raise_error(Finitio::Error, "No such type `Int`")
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
File without changes
|
@@ -29,8 +29,8 @@ module Finitio
|
|
29
29
|
}
|
30
30
|
|
31
31
|
it 'should coerce to an Enumerable of tuples' do
|
32
|
-
subject.
|
33
|
-
subject.to_a.
|
32
|
+
expect(subject).to be_a(Enumerable)
|
33
|
+
expect(subject.to_a).to eq(expected)
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
@@ -43,8 +43,8 @@ module Finitio
|
|
43
43
|
}
|
44
44
|
|
45
45
|
it 'should coerce to an Enumerable of tuples' do
|
46
|
-
subject.
|
47
|
-
subject.to_a.
|
46
|
+
expect(subject).to be_a(Enumerable)
|
47
|
+
expect(subject.to_a).to eq(expected)
|
48
48
|
end
|
49
49
|
end
|
50
50
|
|
@@ -60,16 +60,16 @@ module Finitio
|
|
60
60
|
}
|
61
61
|
|
62
62
|
it 'should raise a TypeError' do
|
63
|
-
subject.
|
64
|
-
subject.message.
|
63
|
+
expect(subject).to be_a(TypeError)
|
64
|
+
expect(subject.message).to eq("Invalid colors `foo`")
|
65
65
|
end
|
66
66
|
|
67
67
|
it 'should have no cause' do
|
68
|
-
subject.cause.
|
68
|
+
expect(subject.cause).to be_nil
|
69
69
|
end
|
70
70
|
|
71
71
|
it 'should have an empty location' do
|
72
|
-
subject.location.
|
72
|
+
expect(subject.location).to eq('')
|
73
73
|
end
|
74
74
|
end
|
75
75
|
|
@@ -79,16 +79,16 @@ module Finitio
|
|
79
79
|
}
|
80
80
|
|
81
81
|
it 'should raise a TypeError' do
|
82
|
-
subject.
|
83
|
-
subject.message.
|
82
|
+
expect(subject).to be_a(TypeError)
|
83
|
+
expect(subject.message).to eq("Invalid {r: Byte, g: Byte, b: Byte} `foo`")
|
84
84
|
end
|
85
85
|
|
86
86
|
it 'should have no cause' do
|
87
|
-
subject.cause.
|
87
|
+
expect(subject.cause).to be_nil
|
88
88
|
end
|
89
89
|
|
90
90
|
it 'should have the correct location' do
|
91
|
-
subject.location.
|
91
|
+
expect(subject.location).to eq('0')
|
92
92
|
end
|
93
93
|
end
|
94
94
|
|
@@ -101,16 +101,16 @@ module Finitio
|
|
101
101
|
}
|
102
102
|
|
103
103
|
it 'should raise a TypeError' do
|
104
|
-
subject.
|
105
|
-
subject.message.
|
104
|
+
expect(subject).to be_a(TypeError)
|
105
|
+
expect(subject.message).to eq("Missing attribute `b`")
|
106
106
|
end
|
107
107
|
|
108
108
|
it 'should have no cause' do
|
109
|
-
subject.cause.
|
109
|
+
expect(subject.cause).to be_nil
|
110
110
|
end
|
111
111
|
|
112
112
|
it 'should have the correct location' do
|
113
|
-
subject.location.
|
113
|
+
expect(subject.location).to eq('1')
|
114
114
|
end
|
115
115
|
end
|
116
116
|
|
@@ -123,16 +123,16 @@ module Finitio
|
|
123
123
|
}
|
124
124
|
|
125
125
|
it 'should raise a TypeError' do
|
126
|
-
subject.
|
127
|
-
subject.message.
|
126
|
+
expect(subject).to be_a(TypeError)
|
127
|
+
expect(subject.message).to eq("Invalid Byte `12.0`")
|
128
128
|
end
|
129
129
|
|
130
130
|
it 'should have a cause' do
|
131
|
-
subject.cause.
|
131
|
+
expect(subject.cause).not_to be_nil
|
132
132
|
end
|
133
133
|
|
134
134
|
it 'should have the correct location' do
|
135
|
-
subject.location.
|
135
|
+
expect(subject.location).to eq('1/b')
|
136
136
|
end
|
137
137
|
end
|
138
138
|
|
@@ -146,16 +146,16 @@ module Finitio
|
|
146
146
|
}
|
147
147
|
|
148
148
|
it 'should raise a TypeError' do
|
149
|
-
subject.
|
150
|
-
subject.message.
|
149
|
+
expect(subject).to be_a(TypeError)
|
150
|
+
expect(subject.message).to eq("Duplicate tuple")
|
151
151
|
end
|
152
152
|
|
153
153
|
it 'should have no cause' do
|
154
|
-
subject.cause.
|
154
|
+
expect(subject.cause).to be_nil
|
155
155
|
end
|
156
156
|
|
157
157
|
it 'should have the correct location' do
|
158
|
-
subject.location.
|
158
|
+
expect(subject.location).to eq('2')
|
159
159
|
end
|
160
160
|
end
|
161
161
|
end
|
@@ -11,21 +11,21 @@ module Finitio
|
|
11
11
|
let(:type3) { RelationType.new(h3) }
|
12
12
|
|
13
13
|
it 'should apply structural equality' do
|
14
|
-
(type1 == type2).
|
15
|
-
(type2 == type1).
|
14
|
+
expect(type1 == type2).to eq(true)
|
15
|
+
expect(type2 == type1).to eq(true)
|
16
16
|
end
|
17
17
|
|
18
18
|
it 'should apply distinguish different types' do
|
19
|
-
(type1 == type3).
|
20
|
-
(type2 == type3).
|
19
|
+
expect(type1 == type3).to eq(false)
|
20
|
+
expect(type2 == type3).to eq(false)
|
21
21
|
end
|
22
22
|
|
23
23
|
it 'should be a total function, with nil for non types' do
|
24
|
-
(type1 == 12).
|
24
|
+
expect(type1 == 12).to eq(false)
|
25
25
|
end
|
26
26
|
|
27
27
|
it 'should implement hash accordingly' do
|
28
|
-
[type1, type2].map(&:hash).uniq.size.
|
28
|
+
expect([type1, type2].map(&:hash).uniq.size).to eq(1)
|
29
29
|
end
|
30
30
|
|
31
31
|
end
|
@@ -13,7 +13,7 @@ module Finitio
|
|
13
13
|
context 'when a empty set' do
|
14
14
|
let(:arg){ Set.new }
|
15
15
|
|
16
|
-
it{ should
|
16
|
+
it{ should eq(true) }
|
17
17
|
end
|
18
18
|
|
19
19
|
context 'when a valid, non empty set' do
|
@@ -23,13 +23,13 @@ module Finitio
|
|
23
23
|
arg << {a: 12} << {a: 15}
|
24
24
|
end
|
25
25
|
|
26
|
-
it{ should
|
26
|
+
it{ should eq(true) }
|
27
27
|
end
|
28
28
|
|
29
29
|
context 'when not a set' do
|
30
30
|
let(:arg){ "foo" }
|
31
31
|
|
32
|
-
it{ should
|
32
|
+
it{ should eq(false) }
|
33
33
|
end
|
34
34
|
|
35
35
|
context 'when a set containing invalid tuples' do
|
@@ -39,7 +39,7 @@ module Finitio
|
|
39
39
|
arg << {a: 12.0}
|
40
40
|
end
|
41
41
|
|
42
|
-
it{ should
|
42
|
+
it{ should eq(false) }
|
43
43
|
end
|
44
44
|
|
45
45
|
end
|
@@ -16,9 +16,9 @@ module Finitio
|
|
16
16
|
subject{ RelationType.new("foo", "bar") }
|
17
17
|
|
18
18
|
it 'should raise an error' do
|
19
|
-
|
19
|
+
expect{
|
20
20
|
subject
|
21
|
-
}.
|
21
|
+
}.to raise_error(ArgumentError, "Heading expected, got `foo`")
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
File without changes
|
File without changes
|
@@ -22,9 +22,9 @@ module Finitio
|
|
22
22
|
let(:arg){ "foo" }
|
23
23
|
|
24
24
|
it 'should raise an error' do
|
25
|
-
|
25
|
+
expect{
|
26
26
|
subject
|
27
|
-
}.
|
27
|
+
}.to raise_error("Invalid [Byte] `foo`")
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
@@ -36,12 +36,12 @@ module Finitio
|
|
36
36
|
}
|
37
37
|
|
38
38
|
it 'should raise an error' do
|
39
|
-
subject.
|
40
|
-
subject.message.
|
39
|
+
expect(subject).to be_a(TypeError)
|
40
|
+
expect(subject.message).to eq("Invalid Byte `-12`")
|
41
41
|
end
|
42
42
|
|
43
43
|
it 'should have correct location' do
|
44
|
-
subject.location.
|
44
|
+
expect(subject.location).to eq("2")
|
45
45
|
end
|
46
46
|
end
|
47
47
|
|
@@ -7,19 +7,19 @@ module Finitio
|
|
7
7
|
let(:type3){ SeqType.new(floatType) }
|
8
8
|
|
9
9
|
it 'should apply structural equality' do
|
10
|
-
(type == type2).
|
10
|
+
expect(type == type2).to eq(true)
|
11
11
|
end
|
12
12
|
|
13
13
|
it 'should apply distinguish different types' do
|
14
|
-
(type == type3).
|
14
|
+
expect(type == type3).to eq(false)
|
15
15
|
end
|
16
16
|
|
17
17
|
it 'should be a total function, with false for non types' do
|
18
|
-
(type == 12).
|
18
|
+
expect(type == 12).to eq(false)
|
19
19
|
end
|
20
20
|
|
21
21
|
it 'should implement hash accordingly' do
|
22
|
-
(type.hash == type2.hash).
|
22
|
+
expect(type.hash == type2.hash).to eq(true)
|
23
23
|
end
|
24
24
|
|
25
25
|
end
|
@@ -9,7 +9,7 @@ module Finitio
|
|
9
9
|
context 'when included on empty array' do
|
10
10
|
let(:arg){ [] }
|
11
11
|
|
12
|
-
it{ should
|
12
|
+
it{ should eq(true) }
|
13
13
|
end
|
14
14
|
|
15
15
|
context 'when included on non empty array' do
|
@@ -19,13 +19,13 @@ module Finitio
|
|
19
19
|
arg << 12
|
20
20
|
end
|
21
21
|
|
22
|
-
it{ should
|
22
|
+
it{ should eq(true) }
|
23
23
|
end
|
24
24
|
|
25
25
|
context 'when not an array' do
|
26
26
|
let(:arg){ Set.new }
|
27
27
|
|
28
|
-
it{ should
|
28
|
+
it{ should eq(false) }
|
29
29
|
end
|
30
30
|
|
31
31
|
context 'when an array with non ints' do
|
@@ -36,7 +36,7 @@ module Finitio
|
|
36
36
|
arg << "foo"
|
37
37
|
end
|
38
38
|
|
39
|
-
it{ should
|
39
|
+
it{ should eq(false) }
|
40
40
|
end
|
41
41
|
|
42
42
|
end
|
@@ -10,7 +10,7 @@ module Finitio
|
|
10
10
|
it{ should be_a(SeqType) }
|
11
11
|
|
12
12
|
it 'should set the instance variables' do
|
13
|
-
subject.elm_type.
|
13
|
+
expect(subject.elm_type).to eq(intType)
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
@@ -18,9 +18,9 @@ module Finitio
|
|
18
18
|
subject{ SeqType.new("foo") }
|
19
19
|
|
20
20
|
it 'should raise an error' do
|
21
|
-
|
21
|
+
expect{
|
22
22
|
subject
|
23
|
-
}.
|
23
|
+
}.to raise_error(ArgumentError, 'Finitio::Type expected, got `foo`')
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
File without changes
|
File without changes
|
@@ -22,9 +22,9 @@ module Finitio
|
|
22
22
|
let(:arg){ "foo" }
|
23
23
|
|
24
24
|
it 'should raise an error' do
|
25
|
-
|
25
|
+
expect{
|
26
26
|
subject
|
27
|
-
}.
|
27
|
+
}.to raise_error("Invalid {Byte} `foo`")
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
@@ -36,12 +36,12 @@ module Finitio
|
|
36
36
|
}
|
37
37
|
|
38
38
|
it 'should raise an error' do
|
39
|
-
subject.
|
40
|
-
subject.message.
|
39
|
+
expect(subject).to be_a(TypeError)
|
40
|
+
expect(subject.message).to eq("Invalid Byte `-12`")
|
41
41
|
end
|
42
42
|
|
43
43
|
it 'should have correct location' do
|
44
|
-
subject.location.
|
44
|
+
expect(subject.location).to eq("2")
|
45
45
|
end
|
46
46
|
end
|
47
47
|
|
@@ -53,12 +53,12 @@ module Finitio
|
|
53
53
|
}
|
54
54
|
|
55
55
|
it 'should raise an error' do
|
56
|
-
subject.
|
57
|
-
subject.message.
|
56
|
+
expect(subject).to be_a(TypeError)
|
57
|
+
expect(subject.message).to eq("Duplicate value `2`")
|
58
58
|
end
|
59
59
|
|
60
60
|
it 'should have correct location' do
|
61
|
-
subject.location.
|
61
|
+
expect(subject.location).to eq("2")
|
62
62
|
end
|
63
63
|
end
|
64
64
|
|