| import arrayref.*; | |
| public class arrayref_runme { | |
| static { | |
| try { | |
| System.loadLibrary("arrayref"); | |
| } catch (UnsatisfiedLinkError e) { | |
| System.err.println("Native code library failed to load. See the chapter on Dynamic Linking Problems in the SWIG Java documentation for help.\n" + e); | |
| System.exit(1); | |
| } | |
| } | |
| public static void main(String argv[]) | |
| { | |
| // Setting a reference to an array copies the elements into the array it refers to. | |
| check(10, arrayref.numbers_sum()); | |
| arrayref.setNumbers_ref(arrayref.others_address()); | |
| check(100, arrayref.numbers_sum()); | |
| // Setting a reference to an array of arrays copies every element. | |
| arrayref.setGrid_ref(arrayref.other_grid_address()); | |
| check(20, arrayref.grid_element(0, 1)); | |
| check(60, arrayref.grid_element(1, 2)); | |
| GridRefMember gridMember = new GridRefMember(); | |
| gridMember.setRows_ref(arrayref.other_grid_address()); | |
| check(20, gridMember.element(0, 1)); | |
| check(60, gridMember.element(1, 2)); | |
| // Setting a reference to an array of pointers copies the pointers. | |
| PointerRefArrayHolder pointerHolder = new PointerRefArrayHolder(); | |
| pointerHolder.setElements_ref(arrayref.pointers_address()); | |
| if (!arrayref.holds_pointers(pointerHolder)) | |
| throw new RuntimeException("pointers not copied"); | |
| ArrayRefMember member = new ArrayRefMember(); | |
| check(10, member.sum()); | |
| member.setMember_ref(arrayref.others_address()); | |
| check(100, member.sum()); | |
| // An array of char is a string here, and so is a reference to one. | |
| check("abc", arrayref.getLetters()); | |
| check("abc", arrayref.getLetters_ref()); | |
| arrayref.setLetters_ref("xy"); | |
| check("xy", arrayref.letters_are()); | |
| check("xyz", arrayref.getFrozen_ref()); | |
| // A reference to an array of char cannot be null. | |
| check(3, arrayref.length_of("abc")); | |
| check(2, arrayref.length_of_writable("xy")); | |
| try { | |
| arrayref.length_of(null); | |
| throw new RuntimeException("length_of(null) did not throw"); | |
| } catch (NullPointerException e) { | |
| } | |
| try { | |
| arrayref.length_of_writable(null); | |
| throw new RuntimeException("length_of_writable(null) did not throw"); | |
| } catch (NullPointerException e) { | |
| } | |
| try { | |
| arrayref.length_of_writable("01234567"); | |
| throw new RuntimeException("length_of_writable overlong string did not throw"); | |
| } catch (IllegalArgumentException e) { | |
| } | |
| check("hi", member.getText_ref()); | |
| member.setText_ref("bye"); | |
| check("bye", member.text_is()); | |
| } | |
| static void check(int expected, int actual) { | |
| if (expected != actual) | |
| throw new RuntimeException("expected " + expected + " but got " + actual); | |
| } | |
| static void check(String expected, String actual) { | |
| if (!expected.equals(actual)) | |
| throw new RuntimeException("expected " + expected + " but got " + actual); | |
| } | |
| } |