79 lines
1.8 KiB
Elixir
79 lines
1.8 KiB
Elixir
Code.require_file "../test_helper", __FILE__
|
|
|
|
module ETSTest
|
|
mixin ExUnit::Case
|
|
|
|
def setup(test)
|
|
table = ETS.create 'sometable, setup_options(test)
|
|
table.insert {"Andrew", 21, 'boy, 'minsk}
|
|
table.insert {"Mary", 19, 'girl, 'moscow}
|
|
table.insert {"Jane", 20, 'girl, 'london}
|
|
table.insert {"Jack", 21, 'boy, 'paris}
|
|
@('table, table)
|
|
end
|
|
|
|
def teardown(_)
|
|
@table.delete
|
|
end
|
|
|
|
% General tests for each table type
|
|
|
|
def ets_set_test
|
|
1 = @table.lookup("Mary").size
|
|
true = @table.update_element "Mary", 4, 'oslo
|
|
false = @table.update_element "John", 2, 18
|
|
self.assert_error 'badarg, -> @table.update_element "Mary", 1, "Suzzy"
|
|
end
|
|
|
|
def ets_ord_test
|
|
21 = @table.last
|
|
19 = @table.first
|
|
[{"Jack", _, _, _}] = @table.lookup 21
|
|
end
|
|
|
|
def ets_bag_test
|
|
[{_, year, sex, _}] = @table.lookup "Jane"
|
|
false = @table.insert_new({"Jane", year, sex, 'rome})
|
|
|
|
[{_, _, _, 'london}] = @table.lookup "Jane"
|
|
|
|
['boy] = @table.lookup_element "Andrew", 3
|
|
true = @table.member? "Andrew"
|
|
true = @table.include? "Andrew"
|
|
|
|
self.assert_error 'badarg, -> @table.lookup_element "Peter", 3
|
|
self.assert_error 'badarg, -> @table.update_element "Mary", 2, 21
|
|
|
|
@table.insert({"Jane", 20, 'girl, 'london})
|
|
@table.insert({"Jane", 20, 'girl, 'berlin})
|
|
|
|
[20, 20] = @table.lookup_element "Jane", 2
|
|
2 = @table.lookup("Jane").size
|
|
end
|
|
|
|
def ets_dup_test
|
|
@table.insert({"Jane", 20, 'girl, 'london})
|
|
@table.insert({"Jane", 22, 'girl, 'berlin})
|
|
3 = @table.lookup("Jane").size
|
|
end
|
|
|
|
% Specific tests for each method
|
|
|
|
private
|
|
|
|
def setup_options 'ets_ord_test
|
|
['ordered_set, 'keypos/2]
|
|
end
|
|
|
|
def setup_options 'ets_bag_test
|
|
['bag]
|
|
end
|
|
|
|
def setup_options 'ets_dup_test
|
|
['duplicate_bag]
|
|
end
|
|
|
|
def setup_options _
|
|
['set]
|
|
end
|
|
end |