aboutsummaryrefslogtreecommitdiffstats
path: root/test/infinite_relations_test.erl
diff options
context:
space:
mode:
authorMarcos Magueta <maguetamarcos@gmail.com>2025-12-14 00:27:18 -0300
committerGitHub <noreply@github.com>2025-12-14 00:27:18 -0300
commitff5691ffb1a969e50e0bd5e4638be8e2bb342c4e (patch)
tree565346b82901f2ee26cb49b04e1e99ba1fb0e896 /test/infinite_relations_test.erl
parent0862cd7c3fe4fbb5b56a0a87c3789c8361bc022c (diff)
downloadSakura-ff5691ffb1a969e50e0bd5e4638be8e2bb342c4e.tar.gz
Sakura-ff5691ffb1a969e50e0bd5e4638be8e2bb342c4e.zip
Ephemeral relations, Refactor & Cleanup (#34)
Diffstat (limited to 'test/infinite_relations_test.erl')
-rw-r--r--test/infinite_relations_test.erl128
1 files changed, 0 insertions, 128 deletions
diff --git a/test/infinite_relations_test.erl b/test/infinite_relations_test.erl
deleted file mode 100644
index 5f87acb..0000000
--- a/test/infinite_relations_test.erl
+++ /dev/null
@@ -1,128 +0,0 @@
--module(infinite_relations_test).
--include_lib("eunit/include/eunit.hrl").
--include("operations.hrl").
-
-%%% Test Suite for Infinite Relations
-
-infinite_relations_test_() ->
- {foreach,
- fun setup/0,
- fun cleanup/1,
- [
- fun test_create_naturals/1,
- fun test_naturals_with_constraints/1,
- fun test_integers_generator/1,
- fun test_rationals_generator/1,
- fun test_take_operator/1,
- fun test_finite_relation_cardinality/1
- ]}.
-
-%%% Setup and Cleanup
-
-setup() ->
- operations:setup(),
- operations:create_database(test_db).
-
-cleanup(_DB) ->
- ok.
-
-%%% Helper Functions
-
-%% Strip metadata from tuples for comparison
-strip_meta(Tuple) when is_map(Tuple) ->
- maps:remove(meta, Tuple);
-strip_meta(Tuples) when is_list(Tuples) ->
- [strip_meta(T) || T <- Tuples].
-
-%%% Tests
-
-test_create_naturals(DB) ->
- %% Naturals are now built-in to every database
- %% Just retrieve the relation to verify it exists
- {ok, NaturalsHash} = operations:get_relation_hash(DB, natural),
- [NaturalsRel] = mnesia:dirty_read(relation, NaturalsHash),
-
- [
- ?_assert(is_record(NaturalsRel, relation)),
- ?_assertEqual(natural, NaturalsRel#relation.name),
- ?_assertEqual(aleph_zero, NaturalsRel#relation.cardinality),
- ?_assertEqual({generators, natural}, NaturalsRel#relation.generator)
- ].
-
-test_naturals_with_constraints(DB) ->
- %% Naturals are built-in, just query them
- %% Query with range constraint [0, 9]
- Iterator = operations:get_tuples_iterator(DB, natural, #{value => {range, 0, 9}}),
- Tuples = operations:collect_all(Iterator),
- DataOnly = strip_meta(Tuples),
-
- %% Should get exactly 10 tuples: {0, 1, 2, ..., 9}
- [
- ?_assertEqual(10, length(Tuples)),
- ?_assert(lists:member(#{value => 0}, DataOnly)),
- ?_assert(lists:member(#{value => 5}, DataOnly)),
- ?_assert(lists:member(#{value => 9}, DataOnly))
- ].
-
-test_integers_generator(DB) ->
- %% Integers are built-in
- {ok, IntegersHash} = operations:get_relation_hash(DB, integer),
- [Integers] = mnesia:dirty_read(relation, IntegersHash),
-
- %% Query with range constraint [-5, 5]
- Iterator = operations:get_tuples_iterator(DB, integer, #{value => {range, -5, 5}}),
- Tuples = operations:collect_all(Iterator),
- DataOnly = strip_meta(Tuples),
-
- %% Should get 11 tuples: {-5, -4, ..., 0, ..., 4, 5}
- [
- ?_assertEqual(aleph_zero, Integers#relation.cardinality),
- ?_assertEqual(11, length(Tuples)),
- ?_assert(lists:member(#{value => 0}, DataOnly)),
- ?_assert(lists:member(#{value => -5}, DataOnly)),
- ?_assert(lists:member(#{value => 5}, DataOnly))
- ].
-
-test_rationals_generator(DB) ->
- %% Rationals are built-in
- {ok, RationalsHash} = operations:get_relation_hash(DB, rational),
- [Rationals] = mnesia:dirty_read(relation, RationalsHash),
-
- %% Take first 10 rationals using constraints
- Iterator = operations:get_tuples_iterator(DB, rational, #{}),
-
- %% Just get a few tuples to verify generator works
- {ok, First} = operations:next_tuple(Iterator),
- {ok, Second} = operations:next_tuple(Iterator),
- operations:close_iterator(Iterator),
-
- [
- ?_assertEqual(aleph_zero, Rationals#relation.cardinality),
- ?_assert(is_map(First)),
- ?_assert(maps:is_key(numerator, First)),
- ?_assert(maps:is_key(denominator, First)),
- ?_assert(is_map(Second))
- ].
-
-test_take_operator(DB) ->
- %% Naturals are built-in, just use them
- %% Take 100 naturals
- {_DB2, Naturals100} = operations:take(DB, natural, 100),
-
- %% Verify result is finite
- [
- ?_assertEqual({finite, 100}, Naturals100#relation.cardinality),
- ?_assertEqual({take, natural, 100}, Naturals100#relation.generator)
- ].
-
-test_finite_relation_cardinality(DB) ->
- %% Create finite relation
- {DB1, _} = operations:create_relation(DB, users, #{name => string, age => integer}),
-
- %% Add tuple
- {_DB2, UpdatedRel} = operations:create_tuple(DB1, users, #{name => "Alice", age => 30}),
-
- %% Cardinality should be 1
- [
- ?_assertEqual({finite, 1}, UpdatedRel#relation.cardinality)
- ].