cauldron 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +6 -0
- data/Gemfile.lock +63 -0
- data/History.md +5 -0
- data/Rakefile +62 -16
- data/VERSION +1 -1
- data/cauldron.gemspec +463 -0
- data/cauldron/lib/cauldron.rb +1 -1
- data/features/cauldron_generates_runtime_method.feature +7 -4
- data/features/cauldron_generates_single_paramter_methods.feature +25 -0
- data/features/cauldron_interactive_start_terminal.feature +17 -0
- data/features/cauldron_quit_terminal.feature +9 -0
- data/features/cauldron_start_terminal.feature +0 -1
- data/features/step_definitions/cauldron_steps.rb +10 -5
- data/features/step_definitions/terminal_steps.rb +27 -0
- data/features/support/env.rb +2 -0
- data/features/support/hooks.rb +15 -0
- data/lib/Chain.rb +3 -3
- data/lib/Mapping.rb +1 -0
- data/lib/PartialChain.rb +253 -0
- data/lib/Theory.rb +28 -4
- data/lib/UnifiedChain.rb +94 -125
- data/lib/cauldron.rb +3 -0
- data/lib/cauldron/demos.rb +4 -4
- data/lib/cauldron/env.rb +1 -0
- data/lib/cauldron/pot.rb +42 -38
- data/lib/cauldron/terminal.rb +19 -3
- data/lib/cauldron/util/home.rb +21 -0
- data/lib/cauldron/util/saver.rb +45 -0
- data/lib/core/Container.rb +1 -1
- data/lib/core/runtime_method/ActsAsRuntimeMethod.rb +28 -28
- data/lib/core/runtime_method/RuntimeMethod.rb +6 -23
- data/lib/core/statement/ActsAsStatement.rb +0 -96
- data/lib/core/statement/BlockStatement.rb +1 -1
- data/lib/core/statement/OpenStatement.rb +1 -1
- data/lib/core/statement/Statement.rb +39 -94
- data/lib/core/statement/TheoryStatement.rb +1 -1
- data/lib/core/syntax/BlockContainer.rb +0 -28
- data/lib/core/variable/MethodParameter.rb +1 -1
- data/lib/required.rb +2 -14
- data/lib/theories.rb +0 -1
- data/lib/theory/ActionImplementation.rb +1 -1
- data/lib/theory/TheoryAction.rb +2 -2
- data/lib/theory/TheoryConnector.rb +11 -14
- data/lib/theory/TheoryImplementation.rb +10 -9
- data/lib/util/MethodWriter.rb +10 -10
- data/sandbox.rb +23 -0
- data/spec/cauldron/pot_spec.rb +62 -10
- data/spec/cauldron/runtime_method_spec.rb +31 -17
- data/spec/cauldron/saver_spec.rb +45 -0
- data/spec/cauldron/terminal_spec.rb +10 -1
- data/spec/cauldron/theory_spec.rb +4 -4
- data/spec/cauldron/unified_chain_spec.rb +38 -0
- data/spec/spec_helper.rb +3 -1
- data/tasks/development_tasks.rake +4 -0
- data/tasks/theory_tasks.rake +16 -20
- data/test/fixtures/theories/0/desc +6 -6
- data/test/fixtures/theories/0/dump +0 -0
- data/test/fixtures/theories/1/desc +7 -7
- data/test/fixtures/theories/1/dump +0 -0
- data/test/fixtures/theories/10/desc +13 -13
- data/test/fixtures/theories/10/dump +0 -0
- data/test/fixtures/theories/11/desc +10 -10
- data/test/fixtures/theories/11/dump +0 -0
- data/test/fixtures/theories/12/desc +9 -9
- data/test/fixtures/theories/12/dump +0 -0
- data/test/fixtures/theories/13/desc +16 -16
- data/test/fixtures/theories/13/dump +0 -0
- data/test/fixtures/theories/14/desc +16 -16
- data/test/fixtures/theories/14/dump +0 -0
- data/test/fixtures/theories/15/desc +10 -10
- data/test/fixtures/theories/15/dump +0 -0
- data/test/fixtures/theories/16/desc +10 -10
- data/test/fixtures/theories/16/dump +0 -0
- data/test/fixtures/theories/17/desc +7 -7
- data/test/fixtures/theories/17/dump +0 -0
- data/test/fixtures/theories/18/desc +7 -7
- data/test/fixtures/theories/18/dump +0 -0
- data/test/fixtures/theories/19/desc +7 -7
- data/test/fixtures/theories/19/dump +0 -0
- data/test/fixtures/theories/2/desc +6 -6
- data/test/fixtures/theories/2/dump +0 -0
- data/test/fixtures/theories/20/desc +13 -13
- data/test/fixtures/theories/20/dump +0 -0
- data/test/fixtures/theories/3/desc +7 -7
- data/test/fixtures/theories/3/dump +0 -0
- data/test/fixtures/theories/4/desc +7 -7
- data/test/fixtures/theories/4/dump +0 -0
- data/test/fixtures/theories/5/desc +6 -6
- data/test/fixtures/theories/5/dump +0 -0
- data/test/fixtures/theories/6/desc +7 -7
- data/test/fixtures/theories/6/dump +0 -0
- data/test/fixtures/theories/7/desc +7 -7
- data/test/fixtures/theories/7/dump +0 -0
- data/test/fixtures/theories/8/desc +7 -7
- data/test/fixtures/theories/8/dump +0 -0
- data/test/fixtures/theories/9/desc +16 -16
- data/test/fixtures/theories/9/dump +0 -0
- data/test/fixtures/theory_implementations/0/dump +0 -0
- data/test/fixtures/theory_implementations/2/dump +0 -0
- data/test/ts_complete.rb +1 -10
- data/test/unit/core/runtime_method/tc_realised_runtime_method.rb +1 -0
- data/test/unit/core/runtime_method/tc_runtime_method.rb +16 -39
- data/test/unit/core/statement/tc_block_statement.rb +3 -3
- data/test/unit/core/statement/tc_open_statement.rb +4 -4
- data/test/unit/core/statement/tc_statement.rb +2 -147
- data/test/unit/core/statement/tc_theory_statement.rb +1 -1
- data/test/unit/theory/tc_theory_dependent.rb +3 -3
- data/test/unit/theory/tc_theory_result.rb +5 -5
- data/test/unit/util/tc_method_validation.rb +45 -45
- data/test/unit/util/tc_parser.rb +1 -1
- data/test/unit/util/tc_string_to_theory.rb +2 -2
- metadata +74 -48
- data/lib/ScopeDependencies.rb +0 -8
- data/lib/core/statement/StatementDependencies.rb +0 -271
- data/lib/core/structure/DeclareNewInstanceStructure.rb +0 -49
- data/lib/core/structure/DeclareRuntimeMethodStructure.rb +0 -34
- data/lib/core/structure/DeclareVariableAsLiteralStructure.rb +0 -31
- data/lib/core/structure/DeclareVariableAsVariableStructure.rb +0 -52
- data/lib/core/structure/FixnumAdditionStructure.rb +0 -56
- data/lib/core/structure/InstanceCallContainerStructure.rb +0 -50
- data/lib/core/structure/InstanceCallStructure.rb +0 -53
- data/lib/core/structure/InstanceMethodCallStructure.rb +0 -21
- data/lib/core/structure/ReturnStructure.rb +0 -20
- data/lib/core/structure/StatementStructure.rb +0 -11
- data/test/unit/core/statement/tc_statement_dependencies.rb +0 -147
- data/test/unit/core/structure/tc_declare_new_instance_structure.rb +0 -41
- data/test/unit/core/structure/tc_declare_variable_as_literal_structure.rb +0 -41
- data/test/unit/core/structure/tc_declare_variable_as_variable_structure.rb +0 -66
- data/test/unit/core/structure/tc_instance_call_container_structure.rb +0 -41
- data/test/unit/core/structure/tc_return_structure.rb +0 -32
- data/test/unit/tc_instance_call_structure.rb +0 -35
- data/test/unit/tc_statement_structure_2.rb +0 -43
@@ -1,56 +0,0 @@
|
|
1
|
-
# Example
|
2
|
-
# e.g. var_a = var_b + var_c
|
3
|
-
#
|
4
|
-
class FixnumAdditionStructure < StatementStructure
|
5
|
-
|
6
|
-
def initialize()
|
7
|
-
super([Unknown,Equal,FixnumVariable,Addition,FixnumVariable])
|
8
|
-
end
|
9
|
-
|
10
|
-
# Returns an array of statements using the available variables that
|
11
|
-
# follow the structure var = 8 + 6
|
12
|
-
#
|
13
|
-
# @param available An array of runtime variables that can be used in the statements
|
14
|
-
# construction.
|
15
|
-
#
|
16
|
-
def statements(available=[])
|
17
|
-
|
18
|
-
# If there aren't any fixnum variables there is nothing to return
|
19
|
-
return [] unless available.any? {|x| x.pass_as?(FixnumVariable)}
|
20
|
-
|
21
|
-
# First find just varaibles that can pass as FixnumVariables
|
22
|
-
# NOTE: Currently I am not allowing method calls to be used
|
23
|
-
fixnum_variables = available.find_all {|x| x.pass_as?(FixnumVariable) and !x.kind_of?(DefCall)}
|
24
|
-
|
25
|
-
# Using the variables constuct statements
|
26
|
-
possible_statements = []
|
27
|
-
fixnum_variables.length.times do |x|
|
28
|
-
fixnum_variables.length.times do |y|
|
29
|
-
new_statement = Statement.new(Unknown.new,Equal.new,fixnum_variables[x].copy,Addition.new,fixnum_variables[y].copy)
|
30
|
-
#new_statement.statement_type = DECLARATION_STATEMENT
|
31
|
-
possible_statements.push(new_statement)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
# Remove mirror statements - these are additions that are essentially the
|
36
|
-
# same statement written backwards.
|
37
|
-
# e.g. var_c = var_a+var_b
|
38
|
-
# var_d = var_b+var_a
|
39
|
-
possible_statements.copy.each do |x|
|
40
|
-
possible_statements.copy.each do |y|
|
41
|
-
next if x.statement_id == y.statement_id
|
42
|
-
if y.same_not_declared_variables?(x)
|
43
|
-
|
44
|
-
# If the first variable id is lower than the secound remove it.
|
45
|
-
if y[2].variable_id < y[4].variable_id
|
46
|
-
possible_statements.delete_if {|z| z.statement_id == y.statement_id}
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
return possible_statements
|
53
|
-
|
54
|
-
end
|
55
|
-
|
56
|
-
end
|
@@ -1,50 +0,0 @@
|
|
1
|
-
# Example
|
2
|
-
# e.g. 'test'.chop
|
3
|
-
# e.g. 'test'.chop!
|
4
|
-
#
|
5
|
-
class InstanceCallContainerStructure < StatementStructure
|
6
|
-
|
7
|
-
def initialize()
|
8
|
-
super()
|
9
|
-
end
|
10
|
-
|
11
|
-
# Returns an array of possible statements that make an instance
|
12
|
-
# call. They don't declare a new variables so to be in any way
|
13
|
-
# relevant they must be destructive e.g.
|
14
|
-
#
|
15
|
-
# 'test'.chop # essential does nothing
|
16
|
-
# 'test'.chop! # Changes the value ('test' represents a variable with that value)
|
17
|
-
#
|
18
|
-
def statements(available=[])
|
19
|
-
|
20
|
-
# Exclude method calls for now - avoiding too complex statements
|
21
|
-
available.delete_if {|x| x.kind_of?(DefCall)}
|
22
|
-
|
23
|
-
# Go through each method call available to each of the variables
|
24
|
-
results = []
|
25
|
-
available.copy.each do |subject_var|
|
26
|
-
|
27
|
-
# Duplicate the available variables and exclude the current one
|
28
|
-
# to avoid less predicatable statements.
|
29
|
-
current_available = available.copy.delete_if do |x|
|
30
|
-
unless(x.kind_of?(Variable) and subject_var.kind_of?(Variable))
|
31
|
-
next false
|
32
|
-
end
|
33
|
-
x.variable_id == subject_var.variable_id
|
34
|
-
end
|
35
|
-
|
36
|
-
# Create statements that use the specified instance calls
|
37
|
-
subject_var.destructive_instance_calls(current_available).each do |inst_call|
|
38
|
-
new_statement = Statement.new(inst_call)
|
39
|
-
|
40
|
-
# TODO I'm not sure if all the instance calls are modifying - I should may have a StatementTemplate
|
41
|
-
# class that foces the {:review} to be false.
|
42
|
-
#new_statement.statement_type = MODIFYING_STATEMENT
|
43
|
-
results.push(new_statement)
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
return results
|
48
|
-
end
|
49
|
-
|
50
|
-
end
|
@@ -1,53 +0,0 @@
|
|
1
|
-
# TODO I think this class might have been replaced with InstanceCallContainerStructure
|
2
|
-
class InstanceCallStructure < Array
|
3
|
-
attr_reader :instance_class, :method_call
|
4
|
-
|
5
|
-
#
|
6
|
-
# @param instance_class The class of the instance that should be called e.g. StringVariable
|
7
|
-
# @param method_call An instance of the method_call
|
8
|
-
# @param parameters The parameters that the instance method call excepts
|
9
|
-
#
|
10
|
-
def initialize(instance_class,method_call,*parameters)
|
11
|
-
# TODO What are the two parameters an array expects
|
12
|
-
super()
|
13
|
-
|
14
|
-
# Declare the elements that make up the instance call
|
15
|
-
@instance_class = instance_class
|
16
|
-
@method_call = method_call
|
17
|
-
|
18
|
-
# Add the parameters to the array
|
19
|
-
parameters.each do |code|
|
20
|
-
self.push(code)
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
#
|
25
|
-
def instance_calls(available=[])
|
26
|
-
|
27
|
-
# Create an array of potential instance calls
|
28
|
-
potential_instance_calls = []
|
29
|
-
|
30
|
-
# Find a variable thats class is @instance_class
|
31
|
-
available.each do |avail|
|
32
|
-
|
33
|
-
if avail.class == @instance_class
|
34
|
-
|
35
|
-
# We have a possible instance class
|
36
|
-
# TODO Try with class and method call mismatch
|
37
|
-
if self.length == 0
|
38
|
-
potential_instance_calls.push(InstanceCallContainer.new(avail.copy,@method_call.copy))
|
39
|
-
next
|
40
|
-
end
|
41
|
-
|
42
|
-
# Retrieve appropriate values for each of the intance calls parameters
|
43
|
-
|
44
|
-
|
45
|
-
end
|
46
|
-
|
47
|
-
end
|
48
|
-
|
49
|
-
return potential_instance_calls
|
50
|
-
|
51
|
-
end
|
52
|
-
|
53
|
-
end
|
@@ -1,21 +0,0 @@
|
|
1
|
-
# This a generic structure that can be used to create any number of
|
2
|
-
# instance method calls. For example if it was meant to represent
|
3
|
-
# an array instance it might be able to produce the statement:
|
4
|
-
#
|
5
|
-
# array.push(some_value)
|
6
|
-
#
|
7
|
-
# TODO This might duplicate the functionality of the InstanceCallContainerStructure
|
8
|
-
# although I can't remember what I created that for.
|
9
|
-
#
|
10
|
-
class InstanceMethodCallStructure < StatementStructure
|
11
|
-
|
12
|
-
#
|
13
|
-
# @param instance_class The class of the instance that has a method call
|
14
|
-
# @param method_call A method call instance that can be called from
|
15
|
-
# instances of the supplied instance_class.
|
16
|
-
#
|
17
|
-
def initialize(instance_class,method_call)
|
18
|
-
|
19
|
-
end
|
20
|
-
|
21
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
# Returns statements that return values
|
2
|
-
#
|
3
|
-
# Example:
|
4
|
-
# return 7
|
5
|
-
# return var
|
6
|
-
#
|
7
|
-
class ReturnStructure < StatementStructure
|
8
|
-
|
9
|
-
def initialize()
|
10
|
-
super()
|
11
|
-
end
|
12
|
-
|
13
|
-
def statements(available=[])
|
14
|
-
|
15
|
-
# Create return statements using the passed variables
|
16
|
-
return available.collect {|x| Statement.new(Return.new,x.copy)}
|
17
|
-
|
18
|
-
end
|
19
|
-
|
20
|
-
end
|
@@ -1,11 +0,0 @@
|
|
1
|
-
class StatementStructure < Array
|
2
|
-
|
3
|
-
DECLARATION_STATEMENT = 'declaration_statement'
|
4
|
-
MODIFYING_STATEMENT = 'modifying_statement'
|
5
|
-
RETURN_STATEMENT = 'return_statement'
|
6
|
-
USAGE_STATEMENT = 'usage_statement'
|
7
|
-
MISC_STATEMENT = 'misc_statement'
|
8
|
-
BLANK_STATEMENT = 'blank_statement'
|
9
|
-
IF_STATEMENT = 'if_statement'
|
10
|
-
|
11
|
-
end
|
@@ -1,147 +0,0 @@
|
|
1
|
-
$LOAD_PATH << File.expand_path('../../../../../lib',__FILE__)
|
2
|
-
|
3
|
-
require 'required'
|
4
|
-
require 'test/unit'
|
5
|
-
|
6
|
-
class TestStatementDependencies < Test::Unit::TestCase
|
7
|
-
|
8
|
-
def setup
|
9
|
-
|
10
|
-
#
|
11
|
-
# var_a = 'Wally'.chop
|
12
|
-
# var_b = var_a.length
|
13
|
-
# var_c = var_a.chop
|
14
|
-
|
15
|
-
# Create some statements with dependencies
|
16
|
-
@wally = Literal.new('Wally')
|
17
|
-
@chopped_wally = Unknown.new
|
18
|
-
@chop_wally = Statement.new(@chopped_wally,Equal.new,InstanceCallContainer.new(@wally,Chop.new))
|
19
|
-
@chopped_length = Unknown.new
|
20
|
-
@chop_length = Statement.new(@chopped_length,Equal.new,InstanceCallContainer.new(@chopped_wally,StringLength.new))
|
21
|
-
@wall = Unknown.new
|
22
|
-
@statement_c = Statement.new(@wall,Equal.new,InstanceCallContainer.new(@chopped_wally,Chop.new))
|
23
|
-
@hermot = Literal.new('Hermot')
|
24
|
-
@hermot_var = Unknown.new
|
25
|
-
@declared_hermot = Statement.new(@hermot_var,Equal.new,@hermot)
|
26
|
-
@hermo_wall = Unknown.new
|
27
|
-
@hermo_wall_statement = Statement.new(@hermo_wall,Equal.new,InstanceCallContainer.new(@hermot_var,Chop.new),Addition.new,InstanceCallContainer.new(@chopped_wally,Chop.new))
|
28
|
-
|
29
|
-
# This statement uses variables that haven't been declared in a statement
|
30
|
-
@bad_statement = Statement.new(Unknown.new,Equal.new,InstanceCallContainer.new(StringVariable.new('badboy'),Chop.new))
|
31
|
-
|
32
|
-
# Chopping wall
|
33
|
-
@wal = Unknown.new
|
34
|
-
@statement_d = Statement.new(@wal,Equal.new,InstanceCallContainer.new(@wall,Chop.new))
|
35
|
-
|
36
|
-
# Create a simple set of statement dependencies that use params
|
37
|
-
# var_a = MethodUsage.new
|
38
|
-
# var_b = RuntimeMethod.new(var_a)
|
39
|
-
@dependency_set_1 = StatementDependencies.new
|
40
|
-
@var_a = Unknown.new
|
41
|
-
@var_b = Unknown.new
|
42
|
-
@statement_a = Statement.new(@var_a,Equal.new,ClassMethodCallContainer.new(MethodUsageClass.new,New.new))
|
43
|
-
@statement_b = Statement.new(@var_b,Equal.new,ClassMethodCallContainer.new(RuntimeMethodClass.new,New.new,@var_a))
|
44
|
-
@dependency_set_1.push(@statement_a)
|
45
|
-
@dependency_set_1.push(@statement_b)
|
46
|
-
|
47
|
-
|
48
|
-
end
|
49
|
-
|
50
|
-
def teardown
|
51
|
-
System.reset
|
52
|
-
end
|
53
|
-
|
54
|
-
def test_push
|
55
|
-
|
56
|
-
# Check statements can be added
|
57
|
-
statement_depenencies = StatementDependencies.new(@chop_wally)
|
58
|
-
assert_equal(1,statement_depenencies.length)
|
59
|
-
|
60
|
-
# Check pushing new statements
|
61
|
-
statement_depenencies.push(@chop_length)
|
62
|
-
assert_equal(2,statement_depenencies.length)
|
63
|
-
|
64
|
-
# Check that an error is thrown if the statement dependencies can't be found
|
65
|
-
assert_raises(StandardError){statement_depenencies.push(@bad_statement)}
|
66
|
-
|
67
|
-
# Here we are check depenceys are found for statements with multiple variables in
|
68
|
-
|
69
|
-
|
70
|
-
end
|
71
|
-
|
72
|
-
def test_dependencies_for
|
73
|
-
|
74
|
-
statement_depenencies = StatementDependencies.new()
|
75
|
-
# hermot = 'Hermot'
|
76
|
-
statement_depenencies.push(@declared_hermot)
|
77
|
-
|
78
|
-
# This statement shouldn't have any depenencies
|
79
|
-
assert_equal(1,statement_depenencies.dependencies_for(@declared_hermot.statement_id).length)
|
80
|
-
|
81
|
-
# Add a statement dependent on the first statement
|
82
|
-
# chopped_wally = 'Wally'.chop
|
83
|
-
statement_depenencies.push(@chop_wally)
|
84
|
-
assert_equal(1,statement_depenencies.dependencies_for(@chop_wally.statement_id).length)
|
85
|
-
statement_chop_chop_wally = Statement.new(Unknown.new,Equal.new,InstanceCallContainer.new(@chopped_wally,Chop.new))
|
86
|
-
statement_depenencies.push(statement_chop_chop_wally)
|
87
|
-
assert_equal(2,statement_depenencies.dependencies_for(statement_chop_chop_wally.statement_id).length)
|
88
|
-
|
89
|
-
# Now add a string+string statement that uses the above statement
|
90
|
-
statement_depenencies.push(@hermo_wall_statement)
|
91
|
-
assert_equal(3,statement_depenencies.dependencies_for(@hermo_wall_statement.statement_id).length)
|
92
|
-
|
93
|
-
assert_equal(1,@dependency_set_1.dependencies_for(@statement_a.statement_id).length)
|
94
|
-
assert_equal(@statement_a.statement_id,@dependency_set_1.dependencies_for(@statement_a.statement_id).first)
|
95
|
-
assert_equal(2,@dependency_set_1.dependencies_for(@statement_b.statement_id).length)
|
96
|
-
|
97
|
-
# Create the statement with dependencies
|
98
|
-
statement_depenencies = StatementDependencies.new(@chop_wally,@chop_length,@statement_c)
|
99
|
-
|
100
|
-
# Find the needed variables for the statements
|
101
|
-
assert_equal(1,@chop_length.not_declared_variables.length)
|
102
|
-
|
103
|
-
# First statement doesn't have any dependecies
|
104
|
-
assert_equal(1,statement_depenencies.dependencies_for(@chop_wally.statement_id).length)
|
105
|
-
|
106
|
-
# The secound statement has one dependency
|
107
|
-
assert_equal(2,statement_depenencies.dependencies_for(@chop_length.statement_id).length)
|
108
|
-
assert_equal(@chop_wally.statement_id,statement_depenencies.dependencies_for(@chop_length.statement_id).first)
|
109
|
-
|
110
|
-
# The third statement also only has one dependency
|
111
|
-
assert_equal(@chop_wally.statement_id,statement_depenencies.dependencies_for(@statement_c.statement_id).first)
|
112
|
-
|
113
|
-
# Add a fourth statement with 2 dependencies 'Wally' then 'Wall'
|
114
|
-
statement_depenencies.push(@statement_d)
|
115
|
-
assert_equal(3,statement_depenencies.dependencies_for(@statement_d.statement_id).length)
|
116
|
-
|
117
|
-
# Check that an error is raised when looking for depencies for a variable that doesn't exist
|
118
|
-
assert_raises(StandardError){statement_depenencies.dependencies_for(@bad_statement.statement_id)}
|
119
|
-
|
120
|
-
end
|
121
|
-
|
122
|
-
def test_find_dependencies_for
|
123
|
-
assert_equal(0,@dependency_set_1.find_dependencies_for(@statement_a).length)
|
124
|
-
assert_equal(1,@dependency_set_1.find_dependencies_for(@statement_b).length)
|
125
|
-
|
126
|
-
# Check that dependies are found for modified statements
|
127
|
-
# var_a = 8
|
128
|
-
# var_b = []
|
129
|
-
# var_b.push(9)
|
130
|
-
# var_b.push(10)
|
131
|
-
statement_a_1 = Statement.new(Unknown.new,Equal.new,8.to_literal)
|
132
|
-
statement_a_2 = Statement.new(Unknown.new,Equal.new,[].to_literal)
|
133
|
-
statement_a_3 = Statement.new(InstanceCallContainer.new(statement_a_2.first.copy,Push.new,9.to_literal))
|
134
|
-
statement_a_4 = Statement.new(InstanceCallContainer.new(statement_a_3.first.subject.copy,Push.new,10.to_literal))
|
135
|
-
runtime_a = RuntimeMethod.new(MethodUsage.new)
|
136
|
-
runtime_a.push(statement_a_1)
|
137
|
-
runtime_a.push(statement_a_2)
|
138
|
-
runtime_a.push(statement_a_3)
|
139
|
-
runtime_a.push(statement_a_4)
|
140
|
-
|
141
|
-
# Realise the method and add each of statements
|
142
|
-
assert_nothing_raised(){runtime_a.realise2(ParametersContainer.new)}
|
143
|
-
|
144
|
-
|
145
|
-
end
|
146
|
-
|
147
|
-
end
|
@@ -1,41 +0,0 @@
|
|
1
|
-
require 'required'
|
2
|
-
require 'test/unit'
|
3
|
-
|
4
|
-
class TestDeclareNewInstanceStructure < Test::Unit::TestCase
|
5
|
-
|
6
|
-
def setup
|
7
|
-
|
8
|
-
# Create the structure instance that generates the appropriate statement
|
9
|
-
@statement_generator = DeclareNewInstanceStructure.new(MethodUsageClass.new,RuntimeMethodClass.new)
|
10
|
-
|
11
|
-
end
|
12
|
-
|
13
|
-
def teardown
|
14
|
-
System.reset
|
15
|
-
end
|
16
|
-
|
17
|
-
def test_statements
|
18
|
-
|
19
|
-
# Test that "var = MethodUsage.new" can be created
|
20
|
-
assert_equal(true,@statement_generator.statements().all? {|x| x.kind_of?(Statement)})
|
21
|
-
assert_equal(true,(@statement_generator.statements().select_all {|x| x.kind_of?(MethodUsageClass) }.length > 0))
|
22
|
-
|
23
|
-
# Test that "var = RuntimeMethod.new(<#method_usage>")
|
24
|
-
method_usage = MethodUsageVariable.new()
|
25
|
-
assert_equal(1,@statement_generator.statements([method_usage]).select_all {|x| x.kind_of?(RuntimeMethodClass)}.length)
|
26
|
-
|
27
|
-
# Test that a statement that declares a new fixnum as variable can be created
|
28
|
-
new_statement_statement_generator = DeclareNewInstanceStructure.new(StatementClass.new)
|
29
|
-
assert_equal(
|
30
|
-
1,
|
31
|
-
new_statement_statement_generator.statements([5.to_literal]).select_all {|x| x.kind_of?(StatementClass)}.length
|
32
|
-
)
|
33
|
-
assert_equal(
|
34
|
-
'var_6 = Statement.new(Unknown.new, Equal.new, 5.to_declaration)',
|
35
|
-
new_statement_statement_generator.statements([5.to_literal]).first.write
|
36
|
-
)
|
37
|
-
|
38
|
-
|
39
|
-
end
|
40
|
-
|
41
|
-
end
|
@@ -1,41 +0,0 @@
|
|
1
|
-
require 'required'
|
2
|
-
require 'test/unit'
|
3
|
-
|
4
|
-
class TestDeclareVariableAsLiteralStructure < Test::Unit::TestCase
|
5
|
-
|
6
|
-
def setup
|
7
|
-
|
8
|
-
# Create the structure instance that generates the appropriate statement
|
9
|
-
@statement_generator = DeclareVariableAsLiteralStructure.new
|
10
|
-
|
11
|
-
|
12
|
-
end
|
13
|
-
|
14
|
-
def teardown
|
15
|
-
CodeHandler.reset_global_id
|
16
|
-
System.reset
|
17
|
-
RuntimeMethod.reset_global_id
|
18
|
-
end
|
19
|
-
|
20
|
-
def test_statements
|
21
|
-
|
22
|
-
# Test that "var = 7" can be created
|
23
|
-
assert_equal(true,@statement_generator.statements([7.to_literal]).all? {|x| x.kind_of?(Statement)})
|
24
|
-
assert_equal(1,@statement_generator.statements([7.to_literal]).length)
|
25
|
-
assert_equal('var_2 = 7',@statement_generator.statements([7.to_literal]).first.write())
|
26
|
-
|
27
|
-
# Test that "var = 8", "var = 'Grogg'" and 'var = []'
|
28
|
-
assert_equal(true,
|
29
|
-
@statement_generator.statements([
|
30
|
-
8.to_literal,'Grogg'.to_literal,[].to_literal
|
31
|
-
]).all? {|x| x.kind_of?(Statement)}
|
32
|
-
)
|
33
|
-
assert_equal(true,
|
34
|
-
@statement_generator.statements([
|
35
|
-
8.to_literal,'Grogg'.to_literal,[].to_literal
|
36
|
-
]).contains? {|x| x.kind_of?(Literal)}
|
37
|
-
)
|
38
|
-
|
39
|
-
end
|
40
|
-
|
41
|
-
end
|