%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% /* Nan.Numerics.Prime A simple prime number library Copyright 2016 Julio P. Di Egidio This file is part of Nan.Numerics.Prime. Nan.Numerics.Prime is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Nan.Numerics.Prime is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Nan.Numerics.Prime. If not, see . */ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (SWI-Prolog 7.3.25) /* A simple prime number library :: memoization @author Julio P. Di Egidio @version 1.2.5-beta @copyright 2016 Julio P. Di Egidio @license GNU GPLv3 */ :- use_module(library(plunit)). :- ensure_loaded(module_inc). :- module_inc('nan_numerics_prime_mem.pl'). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% :- begin_tests('prime_mem:table_'). test(table_get__0, [ fail ]) :- prime_mem:clearall_, prime_mem:table_get_(_, _). test(table_get__1, [ true((T1, T2) == (2, 3)) ]) :- prime_mem:clearall_, prime_mem:table_add_(2, 3), prime_mem:table_get_(T1, T2). test(table_get__1_s, [ true((2, T2) == (2, 3)) ]) :- prime_mem:clearall_, prime_mem:table_add_(2, 3), prime_mem:table_get_(2, T2). test(table_get__1_f, [ fail ]) :- prime_mem:clearall_, prime_mem:table_add_(2, 3), prime_mem:table_get_(3, _). test(table_get__1_ss, [ true ]) :- prime_mem:clearall_, prime_mem:table_add_(2, 3), prime_mem:table_get_(2, 3). test(table_get__1_sf, [ fail ]) :- prime_mem:clearall_, prime_mem:table_add_(2, 3), prime_mem:table_get_(2, 5). test(table_get__1_fs, [ fail ]) :- prime_mem:clearall_, prime_mem:table_add_(2, 3), prime_mem:table_get_(3, 3). test(table_get__1_ff, [ fail ]) :- prime_mem:clearall_, prime_mem:table_add_(2, 3), prime_mem:table_get_(3, 5). test(table_get__3, [ true((T1, T2) == (2, 3)) ]) :- prime_mem:clearall_, prime_mem:table_add_(2, 3), prime_mem:table_add_(3, 5), prime_mem:table_add_(5, 7), prime_mem:table_get_(T1, T2). test(table_get__3_ord, [ true((T1, T2) == (5, 7)) ]) :- prime_mem:clearall_, prime_mem:table_add_(5, 7), prime_mem:table_add_(2, 3), prime_mem:table_add_(3, 5), prime_mem:table_get_(T1, T2). test(table_get__3_1, [ true((2, T2) == (2, 3)) ]) :- prime_mem:clearall_, prime_mem:table_add_(2, 3), prime_mem:table_add_(3, 5), prime_mem:table_add_(5, 7), prime_mem:table_get_(2, T2). test(table_get__3_2, [ true((3, T2) == (3, 5)) ]) :- prime_mem:clearall_, prime_mem:table_add_(2, 3), prime_mem:table_add_(3, 5), prime_mem:table_add_(5, 7), prime_mem:table_get_(3, T2). test(table_get__3_f, [ fail ]) :- prime_mem:clearall_, prime_mem:table_add_(2, 3), prime_mem:table_add_(3, 5), prime_mem:table_add_(5, 7), prime_mem:table_get_(7, _). :- end_tests('prime_mem:table_'). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% :- begin_tests('prime_mem:flags_'). test(flag_get__0, [ true(Val == 0) ]) :- prime_mem:clearall_, prime_mem:flag_get_(f_a, Val). test(flag_get__10, [ true((Old, Val) == (0, 0)) ]) :- prime_mem:clearall_, prime_mem:flag_set_(f_a, Old, Old), prime_mem:flag_get_(f_a, Val). test(flag_get__10s, [ true(Val == 0) ]) :- prime_mem:clearall_, prime_mem:flag_set_(f_a, 0), prime_mem:flag_get_(f_a, Val). test(flag_get__10s_s, [ true ]) :- prime_mem:clearall_, prime_mem:flag_set_(f_a, 0), prime_mem:flag_get_(f_a, 0). test(flag_get__10s_f, [ fail ]) :- prime_mem:clearall_, prime_mem:flag_set_(f_a, 0), prime_mem:flag_get_(f_a, 1). test(flag_get__11, [ true(Val == 1) ]) :- prime_mem:clearall_, prime_mem:flag_set_(f_a, Old, Old+1), prime_mem:flag_get_(f_a, Val). test(flag_get__11s, [ true(Val == 1) ]) :- prime_mem:clearall_, prime_mem:flag_set_(f_a, 1), prime_mem:flag_get_(f_a, Val). test(flag_get__3_a, [ true(Val == 1) ]) :- prime_mem:clearall_, prime_mem:flag_set_(f_a, Old, Old+1), prime_mem:flag_set_(f_b, _, Old+2), prime_mem:flag_set_(f_c, _, Old+3), prime_mem:flag_get_(f_a, Val). test(flag_get__3_b, [ true(Val == 2) ]) :- prime_mem:clearall_, prime_mem:flag_set_(f_a, Old, Old+1), prime_mem:flag_set_(f_b, _, Old+2), prime_mem:flag_set_(f_c, _, Old+3), prime_mem:flag_get_(f_b, Val). test(flag_get__3_b_ord, [ true(Val == 2) ]) :- prime_mem:clearall_, prime_mem:flag_set_(f_c, Old, Old+3), prime_mem:flag_set_(f_a, _, Old+1), prime_mem:flag_set_(f_b, _, Old+2), prime_mem:flag_get_(f_b, Val). :- end_tests('prime_mem:flags_'). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% :- begin_tests('prime_mem:get_1_'). test(get_1__0, [ true(P == 2) ]) :- prime_mem:clear_, prime_mem:get_(P). test(get_1__1, [ true(P == 2) ]) :- prime_mem:clear_, prime_mem:add_(2, 3), prime_mem:get_(P). test(get_1__1_s, [ true ]) :- prime_mem:clear_, prime_mem:add_(2, 3), prime_mem:get_(3). test(get_1__1_f, [ fail ]) :- prime_mem:clear_, prime_mem:add_(2, 3), prime_mem:get_(5). test(get_1__2, [ true(P == 2) ]) :- prime_mem:clear_, prime_mem:add_(2, 3), prime_mem:add_(3, 5), prime_mem:get_(P). test(get_1__3, [ true(P == 2) ]) :- prime_mem:clear_, prime_mem:add_(2, 3), prime_mem:add_(3, 5), prime_mem:add_(5, 7), prime_mem:get_(P). test(get_1__3_ord, [ true(P == 2) ]) :- prime_mem:clear_, prime_mem:add_(5, 7), prime_mem:add_(2, 3), prime_mem:add_(3, 5), prime_mem:get_(P). :- end_tests('prime_mem:get_1_'). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% :- begin_tests('prime_mem:get_2_'). test(get_2__0, [ fail ]) :- prime_mem:clear_, prime_mem:get_(_, _). test(get_2__1, [ true((P1, P2) == (2, 3)) ]) :- prime_mem:clear_, prime_mem:add_(2, 3), prime_mem:get_(P1, P2). test(get_2__1_s, [ true ]) :- prime_mem:clear_, prime_mem:add_(2, 3), prime_mem:get_(2, 3). test(get_2__1_f, [ fail ]) :- prime_mem:clear_, prime_mem:add_(2, 3), prime_mem:get_(3, 5). test(get_2__2, [ true((P1, P2) == (2, 3)) ]) :- prime_mem:clear_, prime_mem:add_(2, 3), prime_mem:add_(3, 5), prime_mem:get_(P1, P2). test(get_2__3, [ true((P1, P2) == (2, 3)) ]) :- prime_mem:clear_, prime_mem:add_(2, 3), prime_mem:add_(3, 5), prime_mem:add_(5, 7), prime_mem:get_(P1, P2). test(get_2__3_ord, [ true((P1, P2) == (5, 7)) ]) :- prime_mem:clear_, prime_mem:add_(5, 7), prime_mem:add_(2, 3), prime_mem:add_(3, 5), prime_mem:get_(P1, P2). :- end_tests('prime_mem:get_2_'). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% :- begin_tests('prime_mem:count_'). test(count__0, [ true(C == 0) ]) :- prime_mem:clear_, prime_mem:count_(C). test(count__1, [ true(C == 1) ]) :- prime_mem:clear_, prime_mem:add_(2, 3), prime_mem:count_(C). test(count__2, [ true(C == 2) ]) :- prime_mem:clear_, prime_mem:add_(2, 3), prime_mem:add_(3, 5), prime_mem:count_(C). test(count__3, [ true(C == 3) ]) :- prime_mem:clear_, prime_mem:add_(2, 3), prime_mem:add_(3, 5), prime_mem:add_(5, 7), prime_mem:count_(C). test(count__3_ord, [ true(C == 3) ]) :- prime_mem:clear_, prime_mem:add_(5, 7), prime_mem:add_(2, 3), prime_mem:add_(3, 5), prime_mem:count_(C). :- end_tests('prime_mem:count_'). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% :- begin_tests('prime_mem:max_'). test(max__0, [ true(P == 2) ]) :- prime_mem:clear_, prime_mem:max_(P). test(max__1, [ true(P == 3) ]) :- prime_mem:clear_, prime_mem:add_(2, 3), prime_mem:max_(P). test(max__2, [ true(P == 5) ]) :- prime_mem:clear_, prime_mem:add_(2, 3), prime_mem:add_(3, 5), prime_mem:max_(P). test(max__3, [ true(P == 7) ]) :- prime_mem:clear_, prime_mem:add_(2, 3), prime_mem:add_(3, 5), prime_mem:add_(5, 7), prime_mem:max_(P). test(max__3_ord, [ true(P == 7) ]) :- prime_mem:clear_, prime_mem:add_(5, 7), prime_mem:add_(2, 3), prime_mem:add_(3, 5), prime_mem:max_(P). :- end_tests('prime_mem:max_'). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%