76 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
		
		
			
		
	
	
			76 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
|  | defmodule DNATest do | ||
|  |   use ExUnit.Case | ||
|  | 
 | ||
|  |   describe "encode to 4-bit encoding" do | ||
|  |     @tag task_id: 1 | ||
|  |     test "?\\s to 0b0000", do: assert(DNA.encode_nucleotide(?\s) == 0b0000) | ||
|  |     @tag task_id: 1 | ||
|  |     test "?A to 0b0001", do: assert(DNA.encode_nucleotide(?A) == 0b0001) | ||
|  |     @tag task_id: 1 | ||
|  |     test "?C to 0b0010", do: assert(DNA.encode_nucleotide(?C) == 0b0010) | ||
|  |     @tag task_id: 1 | ||
|  |     test "?G to 0b0100", do: assert(DNA.encode_nucleotide(?G) == 0b0100) | ||
|  |     @tag task_id: 1 | ||
|  |     test "?T to 0b1000", do: assert(DNA.encode_nucleotide(?T) == 0b1000) | ||
|  |   end | ||
|  | 
 | ||
|  |   describe "decode to code point" do | ||
|  |     @tag task_id: 2 | ||
|  |     test "0b0000 to ?\\s", do: assert(DNA.decode_nucleotide(0b0000) == ?\s) | ||
|  |     @tag task_id: 2 | ||
|  |     test "0b0001 to ?A", do: assert(DNA.decode_nucleotide(0b0001) == ?A) | ||
|  |     @tag task_id: 2 | ||
|  |     test "0b0010 to ?C", do: assert(DNA.decode_nucleotide(0b0010) == ?C) | ||
|  |     @tag task_id: 2 | ||
|  |     test "0b0100 to ?G", do: assert(DNA.decode_nucleotide(0b0100) == ?G) | ||
|  |     @tag task_id: 2 | ||
|  |     test "0b1000 to ?T", do: assert(DNA.decode_nucleotide(0b1000) == ?T) | ||
|  |   end | ||
|  | 
 | ||
|  |   describe "encoding" do | ||
|  |     @tag task_id: 3 | ||
|  |     test "' '", do: assert(DNA.encode(~c" ") == <<0b0000::4>>) | ||
|  |     @tag task_id: 3 | ||
|  |     test "'A'", do: assert(DNA.encode(~c"A") == <<0b0001::4>>) | ||
|  |     @tag task_id: 3 | ||
|  |     test "'C'", do: assert(DNA.encode(~c"C") == <<0b0010::4>>) | ||
|  |     @tag task_id: 3 | ||
|  |     test "'G'", do: assert(DNA.encode(~c"G") == <<0b0100::4>>) | ||
|  |     @tag task_id: 3 | ||
|  |     test "'T'", do: assert(DNA.encode(~c"T") == <<0b1000::4>>) | ||
|  | 
 | ||
|  |     @tag task_id: 3 | ||
|  |     test "' ACGT'", | ||
|  |       do: | ||
|  |         assert(DNA.encode(~c" ACGT") == <<0b0000::4, 0b0001::4, 0b0010::4, 0b0100::4, 0b1000::4>>) | ||
|  | 
 | ||
|  |     @tag task_id: 3 | ||
|  |     test "'TGCA '", | ||
|  |       do: | ||
|  |         assert(DNA.encode(~c"TGCA ") == <<0b1000::4, 0b0100::4, 0b0010::4, 0b0001::4, 0b0000::4>>) | ||
|  |   end | ||
|  | 
 | ||
|  |   describe "decoding" do | ||
|  |     @tag task_id: 4 | ||
|  |     test "' '", do: assert(DNA.decode(<<0b0000::4>>) == ~c" ") | ||
|  |     @tag task_id: 4 | ||
|  |     test "'A'", do: assert(DNA.decode(<<0b0001::4>>) == ~c"A") | ||
|  |     @tag task_id: 4 | ||
|  |     test "'C'", do: assert(DNA.decode(<<0b0010::4>>) == ~c"C") | ||
|  |     @tag task_id: 4 | ||
|  |     test "'G'", do: assert(DNA.decode(<<0b0100::4>>) == ~c"G") | ||
|  |     @tag task_id: 4 | ||
|  |     test "'T'", do: assert(DNA.decode(<<0b1000::4>>) == ~c"T") | ||
|  | 
 | ||
|  |     @tag task_id: 4 | ||
|  |     test "' ACGT'", | ||
|  |       do: | ||
|  |         assert(DNA.decode(<<0b0000::4, 0b0001::4, 0b0010::4, 0b0100::4, 0b1000::4>>) == ~c" ACGT") | ||
|  | 
 | ||
|  |     @tag task_id: 4 | ||
|  |     test "'TGCA '", | ||
|  |       do: | ||
|  |         assert(DNA.decode(<<0b1000::4, 0b0100::4, 0b0010::4, 0b0001::4, 0b0000::4>>) == ~c"TGCA ") | ||
|  |   end | ||
|  | end |