class PROTEIN_FOLDING_TEST_SET
Protein folding test set
note
	description: "Protein folding test set"
	author: "Finnian Reilly"
	copyright: "Copyright (C) 2016-2017  Gerrit Leder, Finnian Reilly"
	contact: "finnian at eiffel hyphen loop dot com; gerrit.leder@gmail.com"
	license: "[https://www.gnu.org/licenses/gpl-3.0.en.html GNU General Public License]"
	date: "2024-01-11 15:25:08 GMT (Thursday 11th January 2024)"
	revision: "9"
		
		class
	PROTEIN_FOLDING_TEST_SET
inherit
	EL_COPIED_FILE_DATA_TEST_SET
		undefine
			new_lio
		end
	EL_CRC_32_TESTABLE
	EL_COMMAND_CLIENT undefine default_create end
	EL_MODULE_EIFFEL
create
	make
feature {NONE} -- Initialization
	make
		-- initialize `test_table'
		do
			make_named (<<
				["multi_core_2_1_with_grid_2_5",	agent test_multi_core_2_1_with_grid_2_5],
				["one_core_1_0",						agent test_one_core_1_0],
				["one_core_2_0_with_grid_2_2",	agent test_one_core_2_0_with_grid_2_2],
				["one_core_2_0_with_grid_2_3",	agent test_one_core_2_0_with_grid_2_3],
				["one_core_2_0_with_grid_2_4",	agent test_one_core_2_0_with_grid_2_4],
				["one_core_2_0_with_grid_2_5",	agent test_one_core_2_0_with_grid_2_5],
				["one_core_2_0_with_grid_2_6",	agent test_one_core_2_0_with_grid_2_6],
				["one_core_2_0_with_grid_2_7",	agent test_one_core_2_0_with_grid_2_7]
			>>)
		end
feature -- Tests
	test_multi_core_2_1_with_grid_2_5
		do
			do_test ("solve_for_each_file", 2021610886, agent solve_for_each_file, [{MULTI_CORE_PF_COMMAND_2_1 [GRID_2_5]}])
		end
	test_one_core_1_0
		do
			do_test ("solve_for_each_file", 0, agent solve_for_each_file, [{PF_COMMAND_1_0}])
		end
	test_one_core_2_0_with_grid_2_2
		do
			do_test ("solve_for_each_file", 0, agent solve_for_each_file, [{PF_COMMAND_2_0 [GRID_2_2]}])
		end
	test_one_core_2_0_with_grid_2_3
		do
			do_test ("solve_for_each_file", 0, agent solve_for_each_file, [{PF_COMMAND_2_0 [GRID_2_3]}])
		end
	test_one_core_2_0_with_grid_2_4
		do
			do_test ("solve_for_each_file", 0, agent solve_for_each_file, [{PF_COMMAND_2_0 [GRID_2_4]}])
		end
	test_one_core_2_0_with_grid_2_5
		-- PROTEIN_FOLDING_TEST_SET.test_one_core_2_0_with_grid_2_5
		do
			do_test ("solve_for_each_file", 493908621, agent solve_for_each_file, [{PF_COMMAND_2_0 [GRID_2_5]}])
		end
	test_one_core_2_0_with_grid_2_6
		do
			do_test ("solve_for_each_file", 0, agent solve_for_each_file, [{PF_COMMAND_2_0 [GRID_2_6]}])
		end
	test_one_core_2_0_with_grid_2_7
		do
			do_test ("solve_for_each_file", 0, agent solve_for_each_file, [{PF_COMMAND_2_0 [GRID_2_7]}])
		end
feature {NONE} -- Implementation
	input_sequence (result_path: FILE_PATH): STRING
		do
			Result := result_path.base_name
		end
	output_path (result_path: FILE_PATH): FILE_PATH
		do
			Result := Work_area_dir + (Folds_prefix + result_path.base)
		end
	solve_for_each_file (command_type: TYPE [PROTEIN_FOLDING_COMMAND])
		-- solve and compare with 5 precomputed result files named by input sequence
		local
			result_path: FILE_PATH; result_digest: STRING
		do
			across file_list as list loop
				result_path := list.item
				if attached {PROTEIN_FOLDING_COMMAND} Eiffel.new_object (command_type) as command then
					if attached {MULTI_CORE_PF_COMMAND [ANY]} command as multicore then
						multicore.make (input_sequence (result_path), output_path (result_path), 50)
					else
						command.make (input_sequence (result_path), output_path (result_path))
					end
					command.execute
					result_digest := Digest.md5_plain_text (result_path).to_base_64_string
					assert_same_digest (Plain_text, command.output_path, result_digest)
				end
			end
		end
	source_file_list: EL_FILE_PATH_LIST
		do
			Result := OS.file_list (Data_dir, "*.txt")
		end
feature {NONE} -- Constants
	Data_dir: DIR_PATH
		once
			Result := "test-data/pf_hp"
		end
	Folds_prefix: ZSTRING
		once
			Result := "folds-"
		end
end