001 // Copyright 2007 Waterken Inc. under the terms of the MIT X license
002 // found at http://www.opensource.org/licenses/mit-license.html
003 package org.waterken.factorial;
004
005 import static org.ref_send.test.Logic.was;
006
007 import org.ref_send.list.List;
008 import org.ref_send.promise.Eventual;
009 import org.ref_send.promise.Promise;
010
011 /**
012 * Eventual invocation tests.
013 */
014 public final class
015 FactorialN {
016 private FactorialN() {}
017
018 /**
019 * Runs a unit test.
020 * @param _ eventual operator
021 * @param n number to compute factorial of
022 */
023 static public Promise<?>
024 make(final Eventual _, final int n) {
025 int r = 1;
026 for (int i = n; i > 0; --i) {
027 r *= i;
028 }
029 return _.when(Factorial.make(_, n), was(r));
030 }
031
032 // Command line interface
033
034 /**
035 * Executes the test.
036 * @param args ignored
037 * @throws Exception test failed
038 */
039 static public void
040 main(final String[] args) throws Exception {
041 final int n = args.length > 0 ? Integer.parseInt(args[0]) : 4;
042
043 final List<Promise<?>> work = List.list();
044 final Promise<?> result = make(new Eventual(work.appender()), n);
045 while (!work.isEmpty()) { work.pop().call(); }
046 result.call();
047 }
048 }