package com.levelup.java.guava;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;

import java.util.List;

import org.junit.Test;

import com.google.common.collect.Lists;
import com.google.common.primitives.Booleans;

/**
 * This example demostrates uses of Google guavas Booleans, static utility
 * methods pertaining to boolean primitives that are not found in Boolean or Arrays.
 * 
 * @author Justin Musgrove
 * @see <a href='http://www.leveluplunch.com/java/examples/guava-booleans-utility-example/'>Booleans utility example</a>
 */
public class BooleansExample {
	
	
	@Test
	public void count_total_number_of_booleans () {
		
		boolean [] values = {true, true, false, true, false};
		
		int count = Booleans.countTrue(values);
		
		assertEquals(3, count);
	}
	
	@Test
	public void convert_boolean_array_to_Boolean_list () {

		boolean[] booleanArray = {true, false, true, false};
		
		List<Boolean> booleans = Booleans.asList(booleanArray);
		
		assertEquals(4, booleans.size());
	}
	
	@Test
	public void concat_boolean_arrays () {

		boolean[] booleanArray1 = {true, false};
		boolean[] booleanArray2 = {true, false};

		boolean[] concatedArray = Booleans.concat(booleanArray1, booleanArray2);
		
		assertEquals(4, concatedArray.length);
	}
	
	@Test
	public void boolean_array_contains () {
		
		boolean[] booleanArray = {true, false, true, false};

		boolean arrayContains = Booleans.contains(booleanArray, true);
		
		assertTrue(arrayContains);
	}
	
	@Test
	public void boolean_array_index () {

		boolean[] booleanArray = {true, false, true, false};

		int index = Booleans.indexOf(booleanArray, false);
		
		assertEquals(1, index);
	}
	
	@Test
	public void join_elements_of_boolean_array () {

		boolean[] booleanArray = {true, false, true, false};

		String joinedElements = Booleans.join("-", booleanArray);
		
		assertEquals("true-false-true-false", joinedElements);
	}
	
	@Test
	public void convert_Boolean_to_primitive () {

		List<Boolean> booleans = Lists.newArrayList(
				Boolean.TRUE, Boolean.FALSE, Boolean.TRUE, Boolean.FALSE);
		
		boolean[] primitiveArray = Booleans.toArray(booleans);
		
		assertEquals(4, primitiveArray.length);
	}		

}