def test_compilePoints(self): compilePoints = lambda p: TupleVariation.compilePoints( set(p), numPointsInGlyph=999) self.assertEqual("00", hexencode(compilePoints( range(999)))) # all points in glyph self.assertEqual("01 00 07", hexencode(compilePoints([7]))) self.assertEqual("01 80 FF FF", hexencode(compilePoints([65535]))) self.assertEqual("02 01 09 06", hexencode(compilePoints([9, 15]))) self.assertEqual("06 05 07 01 F7 02 01 F2", hexencode(compilePoints([7, 8, 255, 257, 258, 500]))) self.assertEqual("03 01 07 01 80 01 EC", hexencode(compilePoints([7, 8, 500]))) self.assertEqual("04 01 07 01 81 BE E7 0C 0F", hexencode(compilePoints([7, 8, 0xBEEF, 0xCAFE]))) self.maxDiff = None self.assertEqual( "81 2C" + # 300 points (0x12c) in total " 7F 00" + (127 * " 01") + # first run, contains 128 points: [0 .. 127] " 7F" + (128 * " 01") + # second run, contains 128 points: [128 .. 255] " 2B" + (44 * " 01"), # third run, contains 44 points: [256 .. 299] hexencode(compilePoints(range(300)))) self.assertEqual( "81 8F" + # 399 points (0x18f) in total " 7F 00" + (127 * " 01") + # first run, contains 128 points: [0 .. 127] " 7F" + (128 * " 01") + # second run, contains 128 points: [128 .. 255] " 7F" + (128 * " 01") + # third run, contains 128 points: [256 .. 383] " 0E" + (15 * " 01"), # fourth run, contains 15 points: [384 .. 398] hexencode(compilePoints(range(399))))
def test_decompilePoints_roundTrip(self): numPointsInGlyph = 500 # greater than 255, so we also exercise code path for 16-bit encoding compile = lambda points: TupleVariation.compilePoints(points, numPointsInGlyph) decompile = lambda data: set(TupleVariation.decompilePoints_(numPointsInGlyph, data, 0, "gvar")[0]) for i in range(50): points = set(random.sample(range(numPointsInGlyph), 30)) self.assertSetEqual(points, decompile(compile(points)), "failed round-trip decompile/compilePoints; points=%s" % points) allPoints = set(range(numPointsInGlyph)) self.assertSetEqual(allPoints, decompile(compile(allPoints)))
def test_decompilePoints_roundTrip(self): numPointsInGlyph = 500 # greater than 255, so we also exercise code path for 16-bit encoding compile = lambda points: TupleVariation.compilePoints(points, numPointsInGlyph) decompile = lambda data: set(TupleVariation.decompilePoints_(numPointsInGlyph, data, 0, "gvar")[0]) for i in range(50): points = set(random.sample(range(numPointsInGlyph), 30)) self.assertSetEqual(points, decompile(compile(points)), "failed round-trip decompile/compilePoints; points=%s" % points) allPoints = set(range(numPointsInGlyph)) self.assertSetEqual(allPoints, decompile(compile(allPoints)))
def test_compilePoints(self): compilePoints = lambda p: TupleVariation.compilePoints(set(p), numPointsInGlyph=999) self.assertEqual("00", hexencode(compilePoints(range(999)))) # all points in glyph self.assertEqual("01 00 07", hexencode(compilePoints([7]))) self.assertEqual("01 80 FF FF", hexencode(compilePoints([65535]))) self.assertEqual("02 01 09 06", hexencode(compilePoints([9, 15]))) self.assertEqual("06 05 07 01 F7 02 01 F2", hexencode(compilePoints([7, 8, 255, 257, 258, 500]))) self.assertEqual("03 01 07 01 80 01 EC", hexencode(compilePoints([7, 8, 500]))) self.assertEqual("04 01 07 01 81 BE E7 0C 0F", hexencode(compilePoints([7, 8, 0xBEEF, 0xCAFE]))) self.maxDiff = None self.assertEqual("81 2C" + # 300 points (0x12c) in total " 7F 00" + (127 * " 01") + # first run, contains 128 points: [0 .. 127] " 7F" + (128 * " 01") + # second run, contains 128 points: [128 .. 255] " 2B" + (44 * " 01"), # third run, contains 44 points: [256 .. 299] hexencode(compilePoints(range(300)))) self.assertEqual("81 8F" + # 399 points (0x18f) in total " 7F 00" + (127 * " 01") + # first run, contains 128 points: [0 .. 127] " 7F" + (128 * " 01") + # second run, contains 128 points: [128 .. 255] " 7F" + (128 * " 01") + # third run, contains 128 points: [256 .. 383] " 0E" + (15 * " 01"), # fourth run, contains 15 points: [384 .. 398] hexencode(compilePoints(range(399))))