/* * Copyright 2006-2012 ICEsoft Technologies Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the * License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an "AS * IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language * governing permissions and limitations under the License. */ package org.icepdf.core.pobjects.functions.postscript; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; /** * Simple type 4 function tests. * * @author ICEsoft Technologies Inc. * @since 4.2 */ public class LexerText { public static final String TEST_1 = "{1.000000 3 1 roll 1.000000 3 1 roll 1.000000 3 1 roll 5 -1 roll \n" + "2 index -0.874500 mul 1.000000 add mul 1 index -0.098000 mul 1.000000 add mul 5 \n" + "1 roll 4 -1 roll 2 index -0.796100 mul 1.000000 add mul 1 index -0.247100 \n" + "mul 1.000000 add mul 4 1 roll 3 -1 roll 2 index -0.647100 mul 1.000000 \n" + "add mul 1 index -0.878400 mul 1.000000 add mul 3 1 roll pop pop }"; public static final String TEST_2 = "{1.000000 2 1 roll 1.000000 2 1 roll 1.000000 2 1 roll 0 index 1.000000 \n" + "cvr exch sub 2 1 roll 5 -1 roll 1.000000 cvr exch sub 5 1 \n" + "roll 4 -1 roll 1.000000 cvr exch sub 4 1 roll 3 -1 roll 1.000000 \n" + "cvr exch sub 3 1 roll 2 -1 roll 1.000000 cvr exch sub 2 1 \n" + "roll pop }"; public static final String TEST_3 = "{0 0 0 0 5 4 roll 0 index 3 -1 roll add 2 1 roll pop dup 1 gt {pop 1} if " + "4 1 roll dup 1 gt {pop 1} if 4 1 roll dup 1 gt {pop 1} if 4 1 roll dup 1 gt {pop 1} if 4 1 roll}"; public static void main(String[] args) { try { // new LexerText().test5(); new LexerText().test8(); } catch (IOException e) { e.printStackTrace(); } } public void test1() throws IOException { String test = "{1.000000 3 1 roll 1.000000 3 1 roll 1.000000 3 1 roll 5 -1 roll \n" + "2 index -0.874500 mul 1.000000 add mul 1 index -0.098000 mul 1.000000 add mul 5 \n" + "1 roll 4 -1 roll 2 index -0.796100 mul 1.000000 add mul 1 index -0.247100 \n" + "mul 1.000000 add mul 4 1 roll 3 -1 roll 2 index -0.647100 mul 1.000000 \n" + "add mul 1 index -0.878400 mul 1.000000 add mul 3 1 roll pop pop }"; ; InputStream function_4 = new ByteArrayInputStream(test.getBytes()); Lexer lex = new Lexer(); lex.setInputStream(function_4); lex.parse(new float[]{1.0f, 1.0f}); System.out.println("result: " + lex.getStack().toString()); } public void test2() throws IOException { String test = "{2 index 1.000000 cvr exch sub 4 1 roll 1 index 1.000000 cvr exch sub \n" + "4 1 roll 0 index 1.000000 cvr exch sub 4 1 roll 1.000000 4 1 \n" + "roll 7 -1 roll 1.000000 cvr exch sub 7 1 roll 6 -1 roll 1.000000 \n" + "cvr exch sub 6 1 roll 5 -1 roll 1.000000 cvr exch sub 5 1 \n" + "roll 4 -1 roll 1.000000 cvr exch sub 4 1 roll pop pop pop }"; InputStream function_4 = new ByteArrayInputStream(test.getBytes()); Lexer lex = new Lexer(); lex.setInputStream(function_4); lex.parse(new float[]{0.360779f, 0.094238274f, 0.00392151f}); System.out.println("result: " + lex.getStack().toString()); } // ficha--3--para+impresion.pdf page 1 - function CORRECT public void test5() throws IOException { String test = "{2 index 1.000000 cvr exch sub 4 1 roll 1 index 1.000000 cvr exch sub \n" + "4 1 roll 0 index 1.000000 cvr exch sub 4 1 roll 1.000000 4 1 \n" + "roll 7 -1 roll 1.000000 cvr exch sub 7 1 roll 6 -1 roll 1.000000 \n" + "cvr exch sub 6 1 roll 5 -1 roll 1.000000 cvr exch sub 5 1 \n" + "roll 4 -1 roll 1.000000 cvr exch sub 4 1 roll pop pop pop }"; InputStream function_4 = new ByteArrayInputStream(test.getBytes()); Lexer lex = new Lexer(); lex.setInputStream(function_4); lex.parse(new float[]{0.360779f, 0.094238274f, 0.00392151f}); System.out.println("result: " + lex.getStack().toString()); } // ficha--3--para+impresion.pdf page 2 - function 1 NOT CORRECT? public void test6() throws IOException { String test = "{1.000000 2 1 roll 1.000000 2 1 roll 1.000000 2 1 roll 0 index 1.000000 \n" + "cvr exch sub 2 1 roll 5 -1 roll 1.000000 cvr exch sub 5 1 \n" + "roll 4 -1 roll 1.000000 cvr exch sub 4 1 roll 3 -1 roll 1.000000 \n" + "cvr exch sub 3 1 roll 2 -1 roll 1.000000 cvr exch sub 2 1 \n" + "roll pop }"; InputStream function_4 = new ByteArrayInputStream(test.getBytes()); Lexer lex = new Lexer(); lex.setInputStream(function_4); lex.parse(new float[]{0.300003f}); System.out.println("result: " + lex.getStack().toString()); // length of output array int n = 4; float[] range = new float[]{0, 1, 0, 1, 0, 1, 0, 1}; // ready output array float y[] = new float[n]; System.out.println(); float value; for (int i = 0; i < n; i++) { value = (Float) lex.getStack().elementAt(i); y[i] = Math.min(Math.max(value, range[2 * i]), range[2 * i + 1]); System.out.print(y[i] + ", "); } System.out.println(); } // 9560_test.pdf page 2 - function 1 NOT CORRECT? public void test7() throws IOException { String test = "{0 0 0 0 5 4 roll 0 index 3 -1 roll add 2 1 roll pop dup 1 gt " + "{pop 1} if 4 1 roll dup 1 gt {pop 1} if 4 1 roll dup 1 gt " + "{pop 1} if 4 1 roll dup 1 gt {pop 1} if 4 1 roll}"; InputStream function_4 = new ByteArrayInputStream(test.getBytes()); Lexer lex = new Lexer(); lex.setInputStream(function_4); lex.parse(new float[]{1f}); System.out.println("result: " + lex.getStack().toString()); // length of output array int n = 4; float[] range = new float[]{0, 1, 0, 1, 0, 1, 0, 1}; // ready output array float y[] = new float[n]; System.out.println(); float value; for (int i = 0; i < n; i++) { value = (Float) lex.getStack().elementAt(i); y[i] = Math.min(Math.max(value, range[2 * i]), range[2 * i + 1]); System.out.print(y[i] + ", "); } System.out.println(); } public void test8() throws IOException { String test = "{3 copy pop 0 exch pop exch pop 4 1 roll 3 copy exch pop exch " + "pop 5 1 roll 3 copy pop 0 exch 2 copy lt {exch} if pop exch pop 6 1 roll " + "pop 0 exch pop exch 2 copy lt {exch} if pop 4 1 roll}"; InputStream function_4 = new ByteArrayInputStream(test.getBytes()); Lexer lex = new Lexer(); lex.setInputStream(function_4); lex.parse(new float[]{0.86f, 0.07999998f, 0.0f}); System.out.println("result: " + lex.getStack().toString()); // length of output array int n = 4; float[] range = new float[]{0,1,0,1,0,1,0,1}; // ready output array float y[] = new float[n]; // domain = 0, 1, 0, 1, 0, 1 System.out.println(); float value; for (int i = 0; i < n; i++) { value = (Float) lex.getStack().elementAt(i); y[i] = Math.min(Math.max(value, range[2 * i]), range[2 * i + 1]); System.out.print(y[i] + ", "); } System.out.println(); } }