package nars.core; import java.util.List; import nars.storage.Memory; import nars.NAR; import nars.config.Plugins; import nars.language.Interval; import nars.language.Interval.AtomicDuration; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import org.junit.Test; /** * * @author me */ public class IntervalTest { @Test public void testInterval() { AtomicDuration dur5 = new AtomicDuration(5); assertTrue(dur5.getSubDurationLog() == Math.log(5/2f)); assertTrue(dur5.get() == 5); Interval i1 = Interval.interval(1, dur5); assertTrue(i1.magnitude == 0); assertTrue(i1.name().toString().equals("+1")); assertTrue(i1.getTime(dur5) == 1); //testing 2 = floor(dur5/2) Interval i2 = Interval.interval(2, dur5); assertEquals(1, i2.magnitude); assertTrue(i2.name().toString().equals("+2")); assertEquals(3, i2.getTime(dur5)); ////testing 2 = floor(dur5/2) Interval i3 = Interval.interval(3, dur5); assertEquals(1, i3.magnitude); assertTrue(i3.name().toString().equals("+2")); assertEquals(3, i3.getTime(dur5)); Interval i5 = Interval.interval(5, dur5); assertEquals(2, i5.magnitude); assertTrue(i5.name().toString().equals("+3")); assertEquals(6, i5.getTime(dur5)); /*for (int i = 0; i < 100; i++) { System.out.println(i + " " + Interval.intervalTime(i, dur5)); }*/ } @Test public void testIntervalSequence() { NAR n = new NAR(new Plugins()); Memory m = n.memory; List<Interval> a11 = Interval.intervalTimeSequence(1, 1, m); assertEquals(1, a11.size()); assertEquals(Interval.interval(1, m), a11.get(0)); assertEquals(Interval.interval(0), a11.get(0)); List<Interval> a12 = Interval.intervalTimeSequence(1, 2, m); assertEquals(a11, a12); { //half duration = magnitude 1 ("+2") long halfDuration = (n.param).duration.get()/2; List<Interval> ad1 = Interval.intervalTimeSequence(halfDuration, 1, m); assertEquals(1, ad1.size()); assertEquals(Interval.interval(1), ad1.get(0)); assertEquals(halfDuration+1, Interval.intervalSequenceTime(ad1, m)); //unused extra term because time period was exactly reached List<Interval> ad2 = Interval.intervalTimeSequence(halfDuration, 2, m); assertEquals(2, ad2.size()); assertEquals(halfDuration, Interval.intervalSequenceTime(ad2, m)); } { //test ability to represent a range of time periods precisely with up to N terms long duration = (n.param).duration.get(); int numTerms = 6; for (int t = 1; t < duration * duration * duration; t++) { List<Interval> ad1 = Interval.intervalTimeSequence(t, numTerms, m); /*Interval approx = Interval.intervalTime(t, m); System.out.println(t + " = " + ad1 + "; ~= " + approx + " (error=" + (approx.getTime(m) - t) + ")");*/ assertEquals(t, Interval.intervalSequenceTime(ad1, m)); } } } }