60 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
		
		
			
		
	
	
			60 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
| 
								 | 
							
								defmodule RunLengthEncoderTest do
							 | 
						||
| 
								 | 
							
								  use ExUnit.Case
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  test "encode empty string" do
							 | 
						||
| 
								 | 
							
								    assert RunLengthEncoder.encode("") === ""
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  test "encode single characters only are encoded without count" do
							 | 
						||
| 
								 | 
							
								    assert RunLengthEncoder.encode("XYZ") === "XYZ"
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  test "encode string with no single characters" do
							 | 
						||
| 
								 | 
							
								    assert RunLengthEncoder.encode("AABBBCCCC") == "2A3B4C"
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  test "encode single characters mixed with repeated characters" do
							 | 
						||
| 
								 | 
							
								    assert RunLengthEncoder.encode("WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWB") ===
							 | 
						||
| 
								 | 
							
								             "12WB12W3B24WB"
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  test "encode multiple whitespace mixed in string" do
							 | 
						||
| 
								 | 
							
								    assert RunLengthEncoder.encode("  hsqq qww  ") === "2 hs2q q2w2 "
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  test "encode lowercase characters" do
							 | 
						||
| 
								 | 
							
								    assert RunLengthEncoder.encode("aabbbcccc") === "2a3b4c"
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  test "decode empty string" do
							 | 
						||
| 
								 | 
							
								    assert RunLengthEncoder.decode("") === ""
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  test "decode single characters only" do
							 | 
						||
| 
								 | 
							
								    assert RunLengthEncoder.decode("XYZ") === "XYZ"
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  test "decode string with no single characters" do
							 | 
						||
| 
								 | 
							
								    assert RunLengthEncoder.decode("2A3B4C") == "AABBBCCCC"
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  test "decode single characters with repeated characters" do
							 | 
						||
| 
								 | 
							
								    assert RunLengthEncoder.decode("12WB12W3B24WB") ===
							 | 
						||
| 
								 | 
							
								             "WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWB"
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  test "decode multiple whitespace mixed in string" do
							 | 
						||
| 
								 | 
							
								    assert RunLengthEncoder.decode("2 hs2q q2w2 ") === "  hsqq qww  "
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  test "decode lower case string" do
							 | 
						||
| 
								 | 
							
								    assert RunLengthEncoder.decode("2a3b4c") === "aabbbcccc"
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  test "encode followed by decode gives original string" do
							 | 
						||
| 
								 | 
							
								    original = "zzz ZZ  zZ"
							 | 
						||
| 
								 | 
							
								    encoded = RunLengthEncoder.encode(original)
							 | 
						||
| 
								 | 
							
								    assert RunLengthEncoder.decode(encoded) === original
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								end
							 |