// Path: src/ftc/electronvolts/util/DigitalInputEdgeDetector.java
// public class DigitalInputEdgeDetector implements InputExtractor<Boolean> {
// 	private Boolean currentValue = null;
// 	private Boolean previousValue = null;
// 	private InputExtractor<Boolean> extractor;
// 	private final AlivenessTester at;
// 
// 	/**
// 	 * @param extractor the InputExtractor to do edge detection on
// 	 */
// 	public DigitalInputEdgeDetector(InputExtractor<Boolean> extractor) {
// 		this(extractor, AlivenessTester.ALWAYS);
// 	}
// 
// 	/**
// 	 * @param extractor the InputExtractor to do edge detection on
// 	 */
// 	public DigitalInputEdgeDetector(InputExtractor<Boolean> extractor, AlivenessTester at) {
// 		this.extractor = extractor;
// 		this.at = at;
// 	}
// 
// 	/**
// 	 * update the current and previous value of the input
// 	 *
// 	 * @return the current value of the input
// 	 */
// 	public boolean update() {
// 		// if this is the first call to update()
// 		if (at.isAlive()) {
// 			if (currentValue == null) {
// 				// set currentValue and previousValue to the reading so no edges are
// 				// triggered
// 				currentValue = extractor.getValue();
// 				previousValue = currentValue;
// 			} else {
// 				previousValue = currentValue;
// 				currentValue = extractor.getValue();
// 			}
// 		}
// 		return currentValue;
// 	}
// 
// 	/**
// 	 * @return whether or not the input is true right now
// 	 */
// 	@Override
// 	public Boolean getValue() {
// 		return currentValue;
// 	}
// 
// 	/**
// 	 * @return whether or not the input is true right now
// 	 */
// 	public boolean isPressed() {
// 		return currentValue;
// 	}
// 
// 	/**
// 	 * @return if the input just turned from false to true
// 	 */
// 	public boolean justPressed() {
// 		return currentValue && !previousValue;
// 	}
// 
// 	/**
// 	 * @return if the input just turned from true to false
// 	 */
// 	public boolean justReleased() {
// 		return !currentValue && previousValue;
// 	}
// }
// 
// Path: src/ftc/electronvolts/util/InputExtractor.java
// public interface InputExtractor<Type> {
//     /**
//      * @return the value from wherever the InputExtractor got it
//      */
//     Type getValue();
// }


import static org.junit.Assert.*;
import org.junit.Test;
import ftc.electronvolts.util.DigitalInputEdgeDetector;
import ftc.electronvolts.util.InputExtractor;
    @Test
    public void testGetValue() {
        DigitalInputEdgeDetector d;

        d = new DigitalInputEdgeDetector(trueIE);
        d.update();
        assertEquals(true, d.getValue());

        d = new DigitalInputEdgeDetector(falseIE);
        d.update();
        assertEquals(false, d.getValue());

        d = new DigitalInputEdgeDetector(flipFlopIE(false));
        d.update();
        assertEquals(false, d.getValue());
        d.update();
        assertEquals(true, d.getValue());

        d = new DigitalInputEdgeDetector(flipFlopIE(true));
        d.update();
        assertEquals(true, d.getValue());
        d.update();
        assertEquals(false, d.getValue());
    }

    @Test
    public void testIsPressed() {
        DigitalInputEdgeDetector d;

        d = new DigitalInputEdgeDetector(trueIE);
// Path: src/ftc/electronvolts/util/DigitalInputEdgeDetector.java
// public class DigitalInputEdgeDetector implements InputExtractor<Boolean> {
// 	private Boolean currentValue = null;
// 	private Boolean previousValue = null;
// 	private InputExtractor<Boolean> extractor;
// 	private final AlivenessTester at;
// 
// 	/**
// 	 * @param extractor the InputExtractor to do edge detection on
// 	 */
// 	public DigitalInputEdgeDetector(InputExtractor<Boolean> extractor) {
// 		this(extractor, AlivenessTester.ALWAYS);
// 	}
// 
// 	/**
// 	 * @param extractor the InputExtractor to do edge detection on
// 	 */
// 	public DigitalInputEdgeDetector(InputExtractor<Boolean> extractor, AlivenessTester at) {
// 		this.extractor = extractor;
// 		this.at = at;
// 	}
// 
// 	/**
// 	 * update the current and previous value of the input
// 	 *
// 	 * @return the current value of the input
// 	 */
// 	public boolean update() {
// 		// if this is the first call to update()
// 		if (at.isAlive()) {
// 			if (currentValue == null) {
// 				// set currentValue and previousValue to the reading so no edges are
// 				// triggered
// 				currentValue = extractor.getValue();
// 				previousValue = currentValue;
// 			} else {
// 				previousValue = currentValue;
// 				currentValue = extractor.getValue();
// 			}
// 		}
// 		return currentValue;
// 	}
// 
// 	/**
// 	 * @return whether or not the input is true right now
// 	 */
// 	@Override
// 	public Boolean getValue() {
// 		return currentValue;
// 	}
// 
// 	/**
// 	 * @return whether or not the input is true right now
// 	 */
// 	public boolean isPressed() {
// 		return currentValue;
// 	}
// 
// 	/**
// 	 * @return if the input just turned from false to true
// 	 */
// 	public boolean justPressed() {
// 		return currentValue && !previousValue;
// 	}
// 
// 	/**
// 	 * @return if the input just turned from true to false
// 	 */
// 	public boolean justReleased() {
// 		return !currentValue && previousValue;
// 	}
// }
// 
// Path: src/ftc/electronvolts/util/InputExtractor.java
// public interface InputExtractor<Type> {
//     /**
//      * @return the value from wherever the InputExtractor got it
//      */
//     Type getValue();
// }


// Path: src/ftc/electronvolts/test/util/DigitalInputEdgeDetectorTest.java
import static org.junit.Assert.*;
import org.junit.Test;
import ftc.electronvolts.util.DigitalInputEdgeDetector;
import ftc.electronvolts.util.InputExtractor;

    @Test
    public void testGetValue() {
        DigitalInputEdgeDetector d;

        d = new DigitalInputEdgeDetector(trueIE);
        d.update();
        assertEquals(true, d.getValue());

        d = new DigitalInputEdgeDetector(falseIE);
        d.update();
        assertEquals(false, d.getValue());

        d = new DigitalInputEdgeDetector(flipFlopIE(false));
        d.update();
        assertEquals(false, d.getValue());
        d.update();
        assertEquals(true, d.getValue());

        d = new DigitalInputEdgeDetector(flipFlopIE(true));
        d.update();
        assertEquals(true, d.getValue());
        d.update();
        assertEquals(false, d.getValue());
    }

    @Test
    public void testIsPressed() {
        DigitalInputEdgeDetector d;

        d = new DigitalInputEdgeDetector(trueIE);
        d.update();