/* -*- c-basic-offset: 2; -*- */ import java.util.List; import freedots.math.Fraction; import freedots.music.AugmentedPowerOfTwo; public class TestAugmentedFraction extends junit.framework.TestCase { public void testDotInference() { AugmentedPowerOfTwo af; Fraction f; f = new Fraction(2, 1); af = AugmentedPowerOfTwo.valueOf(f); assertEquals("numerator of "+f, af.numerator(), 2); assertEquals("denominator of "+f, af.denominator(), 1); assertEquals("dots of "+f, af.dots(), 0); f = new Fraction(3, 1); af = AugmentedPowerOfTwo.valueOf(f); assertEquals("power of "+f, af.getPower(), 1); assertEquals("dots of "+f, af.dots(), 1); f = new Fraction(7, 2); af = AugmentedPowerOfTwo.valueOf(f); assertEquals("power of "+f, af.getPower(), 1); assertEquals("dots of "+f, af.dots(), 2); f = new Fraction(15, 4); af = AugmentedPowerOfTwo.valueOf(new Fraction(15, 4)); assertEquals("power of "+f, af.getPower(), 1); assertEquals("dots of "+f, af.dots(), 3); f = new Fraction(31, 8); af = AugmentedPowerOfTwo.valueOf(f); assertEquals("power of "+f, af.getPower(), 1); assertEquals("dots of "+f, af.dots(), 4); f = new Fraction(1, 1); af = AugmentedPowerOfTwo.valueOf(f); assertEquals("power of "+f, af.getPower(), 0); assertEquals("dots of "+f, af.dots(), 0); f = new Fraction(3, 2); af = AugmentedPowerOfTwo.valueOf(f); assertEquals("power of "+f, af.getPower(), 0); assertEquals("dots of "+f, af.dots(), 1); f = new Fraction(7, 4); af = AugmentedPowerOfTwo.valueOf(f); assertEquals("power of "+f, af.getPower(), 0); assertEquals("dots of "+f, af.dots(), 2); f = new Fraction(15, 8); af = AugmentedPowerOfTwo.valueOf(f); assertEquals("numerator of "+f, af.getPower(), 0); assertEquals("dots of "+f, af.dots(), 3); f = new Fraction(31, 16); af = AugmentedPowerOfTwo.valueOf(f); assertEquals("power of "+f, af.getPower(), 0); assertEquals("dots of "+f, af.dots(), 4); f = new Fraction(1, 2); af = AugmentedPowerOfTwo.valueOf(f); assertEquals("power of "+f, af.getPower(), -1); assertEquals("dots of "+f, af.dots(), 0); f = new Fraction(3, 4); af = AugmentedPowerOfTwo.valueOf(f); assertEquals("power of "+f, af.getPower(), -1); assertEquals("dots of "+f, af.dots(), 1); f = new Fraction(7, 8); af = AugmentedPowerOfTwo.valueOf(f); assertEquals("power of "+f, af.getPower(), -1); assertEquals("dots of "+f, af.dots(), 2); f = new Fraction(15, 16); af = AugmentedPowerOfTwo.valueOf(f); assertEquals("numerator of "+f, af.getPower(), -1); assertEquals("dots of "+f, af.dots(), 3); f = new Fraction(31, 32); af = AugmentedPowerOfTwo.valueOf(f); assertEquals("power of "+f, af.getPower(), -1); assertEquals("dots of "+f, af.dots(), 4); f = new Fraction(1, 4); af = new AugmentedPowerOfTwo(AugmentedPowerOfTwo.CROTCHET, 1); assertFalse("1/4 != 1/4.", f.equals(af)); f = new Fraction(1, 24); af = new AugmentedPowerOfTwo(AugmentedPowerOfTwo.SEMIQUAVER, 0, 4, 6); assertTrue("1/16 (6 in 4) == 1/24", f.equals(af)); af = new AugmentedPowerOfTwo(AugmentedPowerOfTwo.QUAVER, 1); assertEquals("1/8. log == 5", af.getPower(), -3); } public void testList() { for (int n = 1; n <= 128; n++) for (int d = 1; d <= 32; d = d<<1) { Fraction f = new Fraction(n, d).simplify(); List<AugmentedPowerOfTwo> l = AugmentedPowerOfTwo.decompose(f, AugmentedPowerOfTwo.LONGA); assertEquals(f.toString()+" = "+l.toString(), f, sum(l)); } } private Fraction sum(List<AugmentedPowerOfTwo> list) { Fraction result = Fraction.ZERO; for (AugmentedPowerOfTwo af: list) result = result.add(af); return result; } }