tioga 1.4
Sign up to get free protection for your applications and to get access to all the features.
- data/Tioga_README +372 -0
- data/lgpl.txt +504 -0
- data/split/Dtable/defs.h +33 -0
- data/split/Dtable/dtable.c +1928 -0
- data/split/Dtable/dtable_intern.h +144 -0
- data/split/Dtable/dvector.h +61 -0
- data/split/Dtable/extconf.rb +4 -0
- data/split/Dtable/include/dtable.h +35 -0
- data/split/Dtable/lib/Dtable_extras.rb +90 -0
- data/split/Dtable/namespace.h +47 -0
- data/split/Dtable/safe_double.h +104 -0
- data/split/Dtable/symbols.c +92 -0
- data/split/Dtable/symbols.h +52 -0
- data/split/Dvector/defs.h +33 -0
- data/split/Dvector/dvector.c +5486 -0
- data/split/Dvector/dvector_intern.h +142 -0
- data/split/Dvector/extconf.rb +4 -0
- data/split/Dvector/include/dvector.h +61 -0
- data/split/Dvector/lib/Dvector_extras.rb +328 -0
- data/split/Dvector/lib/Numeric_extras.rb +134 -0
- data/split/Dvector/namespace.h +47 -0
- data/split/Dvector/safe_double.h +104 -0
- data/split/Dvector/symbols.c +92 -0
- data/split/Dvector/symbols.h +52 -0
- data/split/Flate/defs.h +33 -0
- data/split/Flate/extconf.rb +19 -0
- data/split/Flate/flate.c +156 -0
- data/split/Flate/flate_intern.h +97 -0
- data/split/Flate/include/flate.h +98 -0
- data/split/Flate/namespace.h +47 -0
- data/split/Flate/safe_double.h +104 -0
- data/split/Flate/symbols.c +92 -0
- data/split/Flate/symbols.h +52 -0
- data/split/Function/defs.h +33 -0
- data/split/Function/dvector.h +61 -0
- data/split/Function/extconf.rb +4 -0
- data/split/Function/function.c +988 -0
- data/split/Function/joint_qsort.c +258 -0
- data/split/Function/lib/Function_extras.rb +44 -0
- data/split/Function/namespace.h +47 -0
- data/split/Function/safe_double.h +104 -0
- data/split/Function/symbols.c +92 -0
- data/split/Function/symbols.h +52 -0
- data/split/Tioga/axes.c +774 -0
- data/split/Tioga/defs.h +33 -0
- data/split/Tioga/dtable.h +35 -0
- data/split/Tioga/dvector.h +61 -0
- data/split/Tioga/extconf.rb +4 -0
- data/split/Tioga/figures.c +672 -0
- data/split/Tioga/figures.h +855 -0
- data/split/Tioga/flate.h +98 -0
- data/split/Tioga/init.c +524 -0
- data/split/Tioga/lib/Arcs_and_Circles.rb +64 -0
- data/split/Tioga/lib/ColorConstants.rb +274 -0
- data/split/Tioga/lib/Colorbars.rb +10 -0
- data/split/Tioga/lib/Colormaps.rb +105 -0
- data/split/Tioga/lib/Coordinate_Conversions.rb +194 -0
- data/split/Tioga/lib/Creating_Paths.rb +94 -0
- data/split/Tioga/lib/Doc.rb +91 -0
- data/split/Tioga/lib/Executive.rb +515 -0
- data/split/Tioga/lib/FigMkr.rb +2224 -0
- data/split/Tioga/lib/FigureConstants.rb +125 -0
- data/split/Tioga/lib/Figures_and_Plots.rb +268 -0
- data/split/Tioga/lib/Images.rb +278 -0
- data/split/Tioga/lib/Legends.rb +190 -0
- data/split/Tioga/lib/MarkerConstants.rb +122 -0
- data/split/Tioga/lib/Markers.rb +129 -0
- data/split/Tioga/lib/Page_Frame_Bounds.rb +567 -0
- data/split/Tioga/lib/Rectangles.rb +94 -0
- data/split/Tioga/lib/Shading.rb +100 -0
- data/split/Tioga/lib/Special_Paths.rb +307 -0
- data/split/Tioga/lib/Strokes.rb +129 -0
- data/split/Tioga/lib/TeX_Text.rb +454 -0
- data/split/Tioga/lib/TexPreamble.rb +358 -0
- data/split/Tioga/lib/Titles_and_Labels.rb +306 -0
- data/split/Tioga/lib/Transparency.rb +89 -0
- data/split/Tioga/lib/Using_Paths.rb +164 -0
- data/split/Tioga/lib/Utils.rb +74 -0
- data/split/Tioga/lib/X_and_Y_Axes.rb +749 -0
- data/split/Tioga/lib/irb_tioga.rb +122 -0
- data/split/Tioga/lib/tioga.rb +1 -0
- data/split/Tioga/lib/tioga_ui.rb +5 -0
- data/split/Tioga/lib/tioga_ui_cmds.rb +793 -0
- data/split/Tioga/makers.c +989 -0
- data/split/Tioga/mk_tioga_sty.rb +53 -0
- data/split/Tioga/namespace.h +47 -0
- data/split/Tioga/pdf_font_dicts.c +18253 -0
- data/split/Tioga/pdfcolor.c +486 -0
- data/split/Tioga/pdfcoords.c +505 -0
- data/split/Tioga/pdffile.c +342 -0
- data/split/Tioga/pdfimage.c +536 -0
- data/split/Tioga/pdfpath.c +914 -0
- data/split/Tioga/pdfs.h +229 -0
- data/split/Tioga/pdftext.c +443 -0
- data/split/Tioga/safe_double.h +104 -0
- data/split/Tioga/symbols.c +92 -0
- data/split/Tioga/symbols.h +52 -0
- data/split/Tioga/texout.c +380 -0
- data/split/defs.h +33 -0
- data/split/extconf.rb +107 -0
- data/split/mkmf2.rb +1612 -0
- data/split/namespace.h +47 -0
- data/split/safe_double.h +104 -0
- data/split/scripts/tioga +4 -0
- data/split/symbols.c +92 -0
- data/split/symbols.h +52 -0
- data/tests/dtable_test.data +6 -0
- data/tests/dvector_read_test.data +1 -0
- data/tests/dvector_test.data +101 -0
- data/tests/tc_Dtable.rb +221 -0
- data/tests/tc_Dvector.rb +791 -0
- data/tests/tc_FMkr.rb +162 -0
- data/tests/tc_Flate.rb +45 -0
- data/tests/tc_Function.rb +111 -0
- data/tests/ts_Tioga.rb +38 -0
- metadata +163 -0
data/split/namespace.h
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
/* namespace.h: an attempt at rationalizing shared objects
|
2
|
+
namespace use.
|
3
|
+
|
4
|
+
Copyright (C) 2006 Vincent Fourmond
|
5
|
+
|
6
|
+
This program is free software; you can redistribute it and/or modify
|
7
|
+
it under the terms of the GNU General Library Public License as published
|
8
|
+
by the Free Software Foundation; either version 2 of the License, or
|
9
|
+
(at your option) any later version.
|
10
|
+
|
11
|
+
This program is distributed in the hope that it will be useful,
|
12
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
GNU Library General Public License for more details.
|
15
|
+
|
16
|
+
You should have received a copy of the GNU Library General Public License
|
17
|
+
along with this program; if not, write to the Free Software
|
18
|
+
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
19
|
+
*/
|
20
|
+
|
21
|
+
#ifndef _NAMESPACE_H
|
22
|
+
#define _NAMESPACE_H
|
23
|
+
|
24
|
+
/* This header file provides two OS-specific macros for the definition of
|
25
|
+
extern symbols:
|
26
|
+
|
27
|
+
* PUBLIC, which has to be used to mark objects that will be used
|
28
|
+
outside the module
|
29
|
+
|
30
|
+
* PRIVATE, for symbols which are "extern" but intern to the module
|
31
|
+
|
32
|
+
Please don't add "extern" after the PRIVATE or PUBLIC declaration
|
33
|
+
as this would break compilation on Darwin.
|
34
|
+
*/
|
35
|
+
|
36
|
+
#ifdef __APPLE__
|
37
|
+
# define PRIVATE __private_extern__
|
38
|
+
# define PUBLIC
|
39
|
+
#elif __GNUC__ >= 4 /* we have the visibility attribute */
|
40
|
+
# define PRIVATE __attribute__ ((visibility ("hidden")))
|
41
|
+
# define PUBLIC __attribute__ ((visibility ("default")))
|
42
|
+
#else /* not really good */
|
43
|
+
# define PRIVATE
|
44
|
+
# define PUBLIC
|
45
|
+
#endif /* __APPLE__ and __GNU_C_ >= 4*/
|
46
|
+
|
47
|
+
#endif
|
data/split/safe_double.h
ADDED
@@ -0,0 +1,104 @@
|
|
1
|
+
/**********************************************************************
|
2
|
+
|
3
|
+
safe_double.h: small abstraction for storing double without endianess
|
4
|
+
problems
|
5
|
+
|
6
|
+
Copyright (C) 2006 Vincent Fourmond
|
7
|
+
|
8
|
+
This program is free software; you can redistribute it and/or modify
|
9
|
+
it under the terms of the GNU General Library Public License as published
|
10
|
+
by the Free Software Foundation; either version 2 of the License, or
|
11
|
+
(at your option) any later version.
|
12
|
+
|
13
|
+
This program is distributed in the hope that it will be useful,
|
14
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
15
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
16
|
+
GNU Library General Public License for more details.
|
17
|
+
|
18
|
+
You should have received a copy of the GNU Library General Public License
|
19
|
+
along with this program; if not, write to the Free Software
|
20
|
+
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
21
|
+
|
22
|
+
**********************************************************************/
|
23
|
+
|
24
|
+
/* This file provides two functions: store_double and get_double, which
|
25
|
+
can be used in a 'safe' way to store doubles and retrive them
|
26
|
+
in a hopefully platform-independent form. However, it just
|
27
|
+
stores it without regards to that if ieee754.h isn't found...
|
28
|
+
*/
|
29
|
+
|
30
|
+
#ifndef _DOUBLE_H
|
31
|
+
#define _DOUBLE_H
|
32
|
+
|
33
|
+
#define STORE_LOWER_BYTE(a,p) do {\
|
34
|
+
*(p++) = (a) & 0xFF; (a) >>= 8; }\
|
35
|
+
while(0)
|
36
|
+
#define STORE_UNSIGNED(a,p) for(i = 0; i < 4; i++) STORE_LOWER_BYTE(a,p);
|
37
|
+
#define GET_UNSIGNED(a,p) do { a = 0; for(i = 0; i < 4; i++) \
|
38
|
+
(a) |= *(p++) << (i * 8); } while (0)
|
39
|
+
|
40
|
+
#ifdef HAVE_IEEE754_H
|
41
|
+
#include <ieee754.h>
|
42
|
+
|
43
|
+
|
44
|
+
static inline void store_double(double a, unsigned char * p)
|
45
|
+
{
|
46
|
+
unsigned int tmp;
|
47
|
+
int i;
|
48
|
+
union ieee754_double d;
|
49
|
+
d.d = a;
|
50
|
+
/* we store it with lower bytes firts */
|
51
|
+
tmp = d.ieee.mantissa1;
|
52
|
+
STORE_UNSIGNED(tmp, p);
|
53
|
+
tmp = d.ieee.negative << 31 |
|
54
|
+
d.ieee.exponent << 20 |
|
55
|
+
d.ieee.mantissa0;
|
56
|
+
STORE_UNSIGNED(tmp, p);
|
57
|
+
}
|
58
|
+
|
59
|
+
|
60
|
+
static inline double get_double(const unsigned char * p)
|
61
|
+
{
|
62
|
+
unsigned int tmp;
|
63
|
+
int i;
|
64
|
+
union ieee754_double d;
|
65
|
+
GET_UNSIGNED(tmp, p);
|
66
|
+
d.ieee.mantissa1 = tmp;
|
67
|
+
GET_UNSIGNED(tmp, p);
|
68
|
+
d.ieee.mantissa0 = tmp & 0xFFFFF;
|
69
|
+
d.ieee.exponent = (tmp >> 20) & 0x7FF;
|
70
|
+
d.ieee.negative = (tmp >> 31) & 0x1;
|
71
|
+
return d.d;
|
72
|
+
}
|
73
|
+
|
74
|
+
#else
|
75
|
+
|
76
|
+
union basic_double{
|
77
|
+
double d;
|
78
|
+
struct {
|
79
|
+
unsigned int a:32;
|
80
|
+
unsigned int b:32;
|
81
|
+
} i;
|
82
|
+
};
|
83
|
+
|
84
|
+
static inline void store_double(double a, unsigned char * p)
|
85
|
+
{
|
86
|
+
union basic_double d;
|
87
|
+
int i;
|
88
|
+
d.d = a;
|
89
|
+
STORE_UNSIGNED(d.i.a, p);
|
90
|
+
STORE_UNSIGNED(d.i.b, p);
|
91
|
+
}
|
92
|
+
|
93
|
+
static inline double get_double(const unsigned char * p)
|
94
|
+
{
|
95
|
+
union basic_double d;
|
96
|
+
int i;
|
97
|
+
GET_UNSIGNED(d.i.a, p);
|
98
|
+
GET_UNSIGNED(d.i.b, p);
|
99
|
+
return d.d;
|
100
|
+
}
|
101
|
+
|
102
|
+
#endif /* HAVE_IEEE754_H */
|
103
|
+
|
104
|
+
#endif /* _DOUBLE_H */
|
data/split/scripts/tioga
ADDED
data/split/symbols.c
ADDED
@@ -0,0 +1,92 @@
|
|
1
|
+
/*
|
2
|
+
Copyright (C) 2006 Vincent Fourmond
|
3
|
+
|
4
|
+
Symbols is free software; you can redistribute it and/or modify
|
5
|
+
it under the terms of the GNU General Library Public License as published
|
6
|
+
by the Free Software Foundation; either version 2 of the License, or
|
7
|
+
(at your option) any later version.
|
8
|
+
|
9
|
+
Symbols is distributed in the hope that it will be useful,
|
10
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
+
GNU Library General Public License for more details.
|
13
|
+
|
14
|
+
You should have received a copy of the GNU Library General Public License
|
15
|
+
along with Dvector; if not, write to the Free Software
|
16
|
+
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
17
|
+
*/
|
18
|
+
|
19
|
+
|
20
|
+
/* Simple code for sharing C symbols across different Ruby libraries */
|
21
|
+
|
22
|
+
#include <ruby.h>
|
23
|
+
#include <intern.h>
|
24
|
+
|
25
|
+
#include <namespace.h>
|
26
|
+
|
27
|
+
|
28
|
+
/* MV stands for Module Variable */
|
29
|
+
#define MV_SYMBOLS "@_exported_C_symbols"
|
30
|
+
/* modified to use instance variables instead of global class variables:
|
31
|
+
this way, children don't overwrite the parent's export table
|
32
|
+
*/
|
33
|
+
|
34
|
+
|
35
|
+
/* makes sure that the hash is registered for the given
|
36
|
+
module and returns it */
|
37
|
+
static VALUE get_symbol_hash(VALUE module)
|
38
|
+
{
|
39
|
+
VALUE hash;
|
40
|
+
ID mv_id = rb_intern(MV_SYMBOLS);
|
41
|
+
if(RTEST(rb_ivar_defined(module, mv_id)))
|
42
|
+
{
|
43
|
+
hash = rb_ivar_get(module, mv_id);
|
44
|
+
Check_Type(hash, T_HASH);
|
45
|
+
return hash;
|
46
|
+
}
|
47
|
+
else
|
48
|
+
{
|
49
|
+
/* module variable uninitialized, we need to make sure it's here */
|
50
|
+
hash = rb_hash_new();
|
51
|
+
rb_ivar_set(module, mv_id, hash);
|
52
|
+
return hash;
|
53
|
+
}
|
54
|
+
}
|
55
|
+
|
56
|
+
/* registers a symbol in the given module. This one is the internal
|
57
|
+
function */
|
58
|
+
PRIVATE void rb_export_symbol(VALUE module, const char * symbol_name,
|
59
|
+
void * symbol)
|
60
|
+
{
|
61
|
+
VALUE hash = get_symbol_hash(module);
|
62
|
+
rb_hash_aset(hash, rb_str_new2(symbol_name),LONG2NUM((long) symbol));
|
63
|
+
}
|
64
|
+
|
65
|
+
PRIVATE void * rb_import_symbol_no_raise(VALUE module,
|
66
|
+
const char * symbol_name)
|
67
|
+
{
|
68
|
+
VALUE hash = rb_iv_get(module, MV_SYMBOLS);
|
69
|
+
if(TYPE(hash) != T_HASH)
|
70
|
+
return NULL; /* doesn't fail, but the importing module
|
71
|
+
should definitely check the return value. Beware
|
72
|
+
of segfaults ! */
|
73
|
+
VALUE symbol = rb_hash_aref(hash, rb_str_new2(symbol_name));
|
74
|
+
|
75
|
+
if(TYPE(symbol) == T_FIXNUM || TYPE(symbol) == T_BIGNUM)
|
76
|
+
return (void *) NUM2LONG(symbol);
|
77
|
+
return NULL;
|
78
|
+
}
|
79
|
+
|
80
|
+
/* same as before, but raises something is the return value is NULL,
|
81
|
+
which is probably best as a default behavior*/
|
82
|
+
PRIVATE void * rb_import_symbol(VALUE module, const char * symbol_name)
|
83
|
+
{
|
84
|
+
void * symbol = rb_import_symbol_no_raise(module, symbol_name);
|
85
|
+
if(symbol)
|
86
|
+
return symbol;
|
87
|
+
/* we get the name of the module: */
|
88
|
+
VALUE module_name = rb_funcall(module, rb_intern("to_s"), 0);
|
89
|
+
rb_raise(rb_eRuntimeError, "The symbol %s was not found in "
|
90
|
+
"module %s", symbol_name,
|
91
|
+
rb_string_value_cstr(&module_name));
|
92
|
+
}
|
data/split/symbols.h
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
#ifndef _SYMBOLS_H
|
2
|
+
#define _SYMBOLS_H
|
3
|
+
|
4
|
+
#include <ruby.h>
|
5
|
+
/* A small layer for exporting and importing symbols from
|
6
|
+
a compiled module */
|
7
|
+
|
8
|
+
#include <namespace.h>
|
9
|
+
|
10
|
+
|
11
|
+
PRIVATE void rb_export_symbol(VALUE module, const char * symbol_name,
|
12
|
+
void * symbol);
|
13
|
+
PRIVATE void * rb_import_symbol(VALUE module, const char * symbol_name);
|
14
|
+
PRIVATE void * rb_import_symbol_no_raise(VALUE module,
|
15
|
+
const char * symbol_name);
|
16
|
+
|
17
|
+
/* a shortcut for exporting something with the same name */
|
18
|
+
#define RB_EXPORT_SYMBOL(module, name) \
|
19
|
+
rb_export_symbol(module, #name, name)
|
20
|
+
|
21
|
+
/* A shortcut for getting a symbol */
|
22
|
+
|
23
|
+
#define DECLARE_SYMBOL(ret_type,name,args) \
|
24
|
+
typedef ret_type (*rb_export_##name##_type) args;\
|
25
|
+
PRIVATE rb_export_##name##_type name
|
26
|
+
|
27
|
+
#define IMPLEMENT_SYMBOL(name)\
|
28
|
+
PRIVATE rb_export_##name##_type name = 0;
|
29
|
+
|
30
|
+
#define RB_IMPORT_SYMBOL(module, name) \
|
31
|
+
name = (rb_export_##name##_type) rb_import_symbol(module, #name)
|
32
|
+
|
33
|
+
|
34
|
+
/* These three macro enable a simple use of function declaration: this way,
|
35
|
+
you can type in a header file that is used by the importer:
|
36
|
+
|
37
|
+
DECLARE_SYMBOL(int, biniou, (int, int));
|
38
|
+
|
39
|
+
in one file of the importer code, you write
|
40
|
+
|
41
|
+
IMPLEMENT_SYMBOL(biniou);
|
42
|
+
|
43
|
+
and in the Init_... function, you write:
|
44
|
+
|
45
|
+
RB_IMPORT_SYMBOL(module, biniou);
|
46
|
+
|
47
|
+
and you can just use biniou as if it was a function declared as
|
48
|
+
usual in the header file
|
49
|
+
*/
|
50
|
+
#endif
|
51
|
+
|
52
|
+
|
@@ -0,0 +1 @@
|
|
1
|
+
0.10000000+001 -0.63188067-104 -0.20107803+002 1E0
|
@@ -0,0 +1,101 @@
|
|
1
|
+
23 3
|
2
|
+
0 0.286477 0.603729 -1.08582
|
3
|
+
0.0634665 0.290788 0.653458 -1.07284
|
4
|
+
0 -1.1 2.2 -3.3
|
5
|
+
0.126933 0.302696 0.700303 -1.03798
|
6
|
+
0.1904 0.322089 0.744037 -0.984045
|
7
|
+
0.253866 0.348769 0.784447 -0.914921
|
8
|
+
0.317333 0.382438 0.821343 -0.834875
|
9
|
+
0.380799 0.422669 0.85455 -0.747997
|
10
|
+
0.444266 0.468879 0.883916 -0.657877
|
11
|
+
0.507732 0.520296 0.90931 -0.567498
|
12
|
+
0.571199 0.575921 0.930622 -0.479272
|
13
|
+
0.634665 0.634495 0.947765 -0.395142
|
14
|
+
0.698132 0.694464 0.960675 -0.3167
|
15
|
+
0.761598 0.753955 0.969311 -0.245308
|
16
|
+
0.825065 0.810764 0.973655 -0.182211
|
17
|
+
0.888531 0.862358 0.973714 -0.128624
|
18
|
+
0.951998 0.905904 0.969515 -0.0858351
|
19
|
+
1.01546 0.938327 0.96111 -0.0552914
|
20
|
+
1.07893 0.956398 0.948574 -0.0387219
|
21
|
+
1.1424 0.956874 0.932001 -0.0382904
|
22
|
+
1.20586 0.936664 0.91151 -0.0568315
|
23
|
+
1.26933 0.893059 0.887236 -0.0982393
|
24
|
+
1.3328 0.823979 0.859336 -0.168167
|
25
|
+
1.39626 0.728269 0.827985 -0.275415
|
26
|
+
1.45973 0.605995 0.793372 -0.435061
|
27
|
+
1.5232 0.458732 0.755706 -0.676879
|
28
|
+
1.58666 0.289821 0.715206 -1.07574
|
29
|
+
1.65013 0.104532 0.672107 -1.96146
|
30
|
+
1.7136 -0.0898792 0.626654 -2.09263
|
31
|
+
1.77706 -0.284282 0.579102 -1.0925
|
32
|
+
1.84053 -0.467981 0.529712 -0.659541
|
33
|
+
1.904 -0.62926 0.478755 -0.402339
|
34
|
+
1.96746 -0.756151 0.426504 -0.242782
|
35
|
+
2.03093 -0.837439 0.373237 -0.154093
|
36
|
+
2.0944 -0.863825 0.319231 -0.127147
|
37
|
+
2.15786 -0.829179 0.264766 -0.162703
|
38
|
+
2.22133 -0.731738 0.210116 -0.271289
|
39
|
+
2.28479 -0.575102 0.155555 -0.480509
|
40
|
+
2.34826 -0.368835 0.101351 -0.866332
|
41
|
+
2.41173 -0.128489 0.0477643 -1.78224
|
42
|
+
2.47519 0.1251 -0.00495156 -1.80546
|
43
|
+
2.53866 0.367332 -0.0565527 -0.869878
|
44
|
+
2.60213 0.572175 -0.106806 -0.484941
|
45
|
+
2.66559 0.715158 -0.15549 -0.291195
|
46
|
+
2.72906 0.77675 -0.202396 -0.219436
|
47
|
+
2.79253 0.745684 -0.247329 -0.25489
|
48
|
+
2.85599 0.621689 -0.29011 -0.412853
|
49
|
+
2.91946 0.417058 -0.330574 -0.759605
|
50
|
+
2.98293 0.156524 -0.368572 -1.61082
|
51
|
+
3.04639 -0.124905 -0.403973 -1.80681
|
52
|
+
3.10986 -0.386187 -0.436663 -0.826402
|
53
|
+
3.17333 -0.586239 -0.466544 -0.46385
|
54
|
+
3.23679 -0.690906 -0.493537 -0.321162
|
55
|
+
3.30026 -0.679757 -0.517579 -0.335292
|
56
|
+
3.36373 -0.551336 -0.538628 -0.517167
|
57
|
+
3.42719 -0.325495 -0.556656 -0.974908
|
58
|
+
3.49066 -0.0417951 -0.571653 -2.7575
|
59
|
+
3.55413 0.246405 -0.583627 -1.21669
|
60
|
+
3.61759 0.481614 -0.592602 -0.6346
|
61
|
+
3.68106 0.614085 -0.598616 -0.423542
|
62
|
+
3.74452 0.613487 -0.601726 -0.424388
|
63
|
+
3.80799 0.47755 -0.601999 -0.64196
|
64
|
+
3.87146 0.235052 -0.599518 -1.25766
|
65
|
+
3.93492 -0.0584959 -0.59438 -2.46562
|
66
|
+
3.99839 -0.332444 -0.586691 -0.956558
|
67
|
+
4.06186 -0.517883 -0.576569 -0.571535
|
68
|
+
4.12532 -0.565922 -0.564143 -0.494486
|
69
|
+
4.18879 -0.462435 -0.54955 -0.669896
|
70
|
+
4.25226 -0.234505 -0.532934 -1.25969
|
71
|
+
4.31572 0.0544649 -0.514446 -2.52762
|
72
|
+
4.37919 0.32097 -0.494243 -0.987067
|
73
|
+
4.44266 0.485363 -0.472487 -0.627865
|
74
|
+
4.50612 0.496851 -0.449341 -0.607546
|
75
|
+
4.56959 0.351455 -0.424973 -0.908257
|
76
|
+
4.63306 0.0960696 -0.39955 -2.03478
|
77
|
+
4.69652 -0.184411 -0.37324 -1.46841
|
78
|
+
4.75999 -0.394267 -0.34621 -0.808416
|
79
|
+
4.82346 -0.460204 -0.318626 -0.674097
|
80
|
+
4.88692 -0.359033 -0.290649 -0.889728
|
81
|
+
4.95039 -0.128725 -0.262439 -1.78065
|
82
|
+
5.01385 0.143147 -0.234149 -1.68841
|
83
|
+
5.07732 0.351261 -0.205929 -0.908737
|
84
|
+
5.14079 0.41374 -0.17792 -0.766543
|
85
|
+
5.20425 0.306526 -0.150261 -1.02706
|
86
|
+
5.26772 0.0757187 -0.123078 -2.24152
|
87
|
+
5.33119 -0.179423 -0.096495 -1.49223
|
88
|
+
5.39465 -0.347867 -0.0706236 -0.91717
|
89
|
+
5.45812 -0.355939 -0.0455687 -0.897245
|
90
|
+
5.52159 -0.202159 -0.0214262 -1.38861
|
91
|
+
5.58505 0.0397937 0.00171714 -2.8001
|
92
|
+
5.64852 0.253889 0.0237839 -1.1907
|
93
|
+
5.71199 0.336949 0.0447058 -0.944868
|
94
|
+
5.77545 0.250192 0.0644241 -1.20345
|
95
|
+
5.83892 0.0405176 0.0828894 -2.78445
|
96
|
+
5.90239 -0.18169 0.100061 -1.48132
|
97
|
+
5.96585 -0.299364 0.115909 -1.0476
|
98
|
+
6.02932 -0.25159 0.13041 -1.19861
|
99
|
+
6.09279 -0.0681354 0.143551 -2.33316
|
100
|
+
6.15625 0.145564 0.155327 -1.67387
|
101
|
+
6.21972 0.267255 0.16574 -1.14614
|
data/tests/tc_Dtable.rb
ADDED
@@ -0,0 +1,221 @@
|
|
1
|
+
# tc_Dtable.rb
|
2
|
+
|
3
|
+
require 'Dobjects/Dtable'
|
4
|
+
require 'test/unit'
|
5
|
+
|
6
|
+
class TestDtable < Test::Unit::TestCase
|
7
|
+
|
8
|
+
include Dobjects
|
9
|
+
|
10
|
+
def read_data # do this first to read in the test.data array
|
11
|
+
return if @arr != nil
|
12
|
+
@num_cols = 4; @num_rows = 5
|
13
|
+
@arr = Dtable.new(@num_cols, @num_rows)
|
14
|
+
dir = File.dirname(__FILE__)
|
15
|
+
if dir.empty?
|
16
|
+
file = "dtable_test.data"
|
17
|
+
else
|
18
|
+
file = "#{dir}/dtable_test.data"
|
19
|
+
end
|
20
|
+
@arr.read(file, 1) # skip the first line
|
21
|
+
assert_equal(@num_cols, @arr.num_cols)
|
22
|
+
assert_equal(@num_rows, @arr.num_rows)
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_at
|
26
|
+
read_data
|
27
|
+
assert_equal(7, @arr.at(1,2))
|
28
|
+
assert_equal(0.1, @arr.at(2,0))
|
29
|
+
assert_equal(-1.1, @arr.at(2,1))
|
30
|
+
assert_equal(2.2, @arr[2,2])
|
31
|
+
assert_equal(-3.3, @arr[2,3])
|
32
|
+
tmp = @arr[3,2]
|
33
|
+
@arr[3,2] = 1e3
|
34
|
+
assert_equal(1e3, @arr[3,2])
|
35
|
+
@arr[3,2] = tmp
|
36
|
+
assert_equal(tmp, @arr[3,2])
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_array_ops
|
40
|
+
read_data
|
41
|
+
@ar2 = @arr.dup
|
42
|
+
@num_rows.times do |i|
|
43
|
+
@num_cols.times do |j|
|
44
|
+
assert_equal(@arr[i,j], @ar2[i,j])
|
45
|
+
end
|
46
|
+
end
|
47
|
+
assert_equal(@num_rows, @arr.num_rows)
|
48
|
+
@num_rows.times do |i|
|
49
|
+
@num_cols.times do |j|
|
50
|
+
assert_equal(@arr[i,j], @ar2[i,j])
|
51
|
+
end
|
52
|
+
end
|
53
|
+
last_row = @num_rows - 1
|
54
|
+
last_col = @num_cols - 1
|
55
|
+
@arr[0,0] = 0
|
56
|
+
@arr[0,last_col] = 1
|
57
|
+
@arr[last_row,0] = 2
|
58
|
+
@arr[last_row,last_col] = 3
|
59
|
+
@ar2 = @arr.transpose
|
60
|
+
assert_equal(@num_cols, @ar2.num_rows)
|
61
|
+
assert_equal(@num_rows, @ar2.num_cols)
|
62
|
+
assert_equal(@ar2[0,0], 0)
|
63
|
+
assert_equal(@ar2[last_col,0], 1)
|
64
|
+
assert_equal(@ar2[0,last_row], 2)
|
65
|
+
assert_equal(@ar2[last_col,last_row], 3)
|
66
|
+
@num_rows.times do |i|
|
67
|
+
@num_cols.times do |j|
|
68
|
+
assert_equal(@arr[i,j], @ar2[j,i])
|
69
|
+
end
|
70
|
+
end
|
71
|
+
@ar2 = @arr.reverse_rows
|
72
|
+
assert_equal(@num_cols, @ar2.num_cols)
|
73
|
+
assert_equal(@num_rows, @ar2.num_rows)
|
74
|
+
assert_equal(@ar2[0,0], 2)
|
75
|
+
assert_equal(@ar2[0,last_col], 3)
|
76
|
+
assert_equal(@ar2[last_row,0], 0)
|
77
|
+
assert_equal(@ar2[last_row,last_col], 1)
|
78
|
+
@num_rows.times do |i|
|
79
|
+
@num_cols.times do |j|
|
80
|
+
assert_equal(@arr[i,j], @ar2[last_row-i,j])
|
81
|
+
end
|
82
|
+
end
|
83
|
+
@ar2 = @arr.reverse_cols
|
84
|
+
assert_equal(@num_cols, @ar2.num_cols)
|
85
|
+
assert_equal(@num_rows, @ar2.num_rows)
|
86
|
+
assert_equal(@ar2[0,0], 1)
|
87
|
+
assert_equal(@ar2[0,last_col], 0)
|
88
|
+
assert_equal(@ar2[last_row,0], 3)
|
89
|
+
assert_equal(@ar2[last_row,last_col], 2)
|
90
|
+
@num_rows.times do |i|
|
91
|
+
@num_cols.times do |j|
|
92
|
+
assert_equal(@arr[i,j], @ar2[i,last_col-j])
|
93
|
+
end
|
94
|
+
end
|
95
|
+
@ar2 = @arr.rotate_ccw90
|
96
|
+
assert_equal(@num_cols, @ar2.num_rows)
|
97
|
+
assert_equal(@num_rows, @ar2.num_cols)
|
98
|
+
assert_equal(@ar2[0,0], 1)
|
99
|
+
assert_equal(@ar2[0,last_row], 3)
|
100
|
+
assert_equal(@ar2[last_col,0], 0)
|
101
|
+
assert_equal(@ar2[last_col,last_row], 2)
|
102
|
+
@ar2 = @arr.rotate_cw90
|
103
|
+
assert_equal(@num_cols, @ar2.num_rows)
|
104
|
+
assert_equal(@num_rows, @ar2.num_cols)
|
105
|
+
assert_equal(@ar2[0,0], 2)
|
106
|
+
assert_equal(@ar2[0,last_row], 0)
|
107
|
+
assert_equal(@ar2[last_col,0], 3)
|
108
|
+
assert_equal(@ar2[last_col,last_row], 1)
|
109
|
+
@ar2.set(-1)
|
110
|
+
@num_rows.times do |i|
|
111
|
+
@num_cols.times do |j|
|
112
|
+
assert_equal(-1, @ar2[j,i])
|
113
|
+
end
|
114
|
+
end
|
115
|
+
assert_equal(-9, @arr.min)
|
116
|
+
assert_equal(8, @arr.max)
|
117
|
+
assert_equal(2, @arr.min_gt(1))
|
118
|
+
assert_equal(7, @arr.max_lt(8))
|
119
|
+
end
|
120
|
+
|
121
|
+
def test_math_ops
|
122
|
+
read_data
|
123
|
+
@ar2 = @arr + 2
|
124
|
+
@num_rows.times do |i|
|
125
|
+
@num_cols.times do |j|
|
126
|
+
assert_equal(@arr[i,j]+2, @ar2[i,j])
|
127
|
+
end
|
128
|
+
end
|
129
|
+
@ar2 = 2 * @arr
|
130
|
+
@num_rows.times do |i|
|
131
|
+
@num_cols.times do |j|
|
132
|
+
assert_equal(2 * @arr[i,j], @ar2[i,j])
|
133
|
+
end
|
134
|
+
end
|
135
|
+
@ar2 = @arr.floor
|
136
|
+
@num_rows.times do |i|
|
137
|
+
@num_cols.times do |j|
|
138
|
+
assert_equal(@arr[i,j].floor, @ar2[i,j])
|
139
|
+
end
|
140
|
+
end
|
141
|
+
@ar2 = @arr.pow(3)
|
142
|
+
@num_rows.times do |i|
|
143
|
+
@num_cols.times do |j|
|
144
|
+
assert_equal(@arr[i,j].pow(3), @ar2[i,j])
|
145
|
+
end
|
146
|
+
end
|
147
|
+
@ar2 = @arr.safe_log10
|
148
|
+
@num_rows.times do |i|
|
149
|
+
@num_cols.times do |j|
|
150
|
+
assert_equal(@arr[i,j].safe_log10, @ar2[i,j])
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
def test_bang_ops
|
156
|
+
read_data
|
157
|
+
@ar2 = @arr.dup.abs!.safe_sqrt!
|
158
|
+
@num_rows.times do |i|
|
159
|
+
@num_cols.times do |j|
|
160
|
+
assert_equal(@arr[i,j].abs.safe_sqrt, @ar2[i,j])
|
161
|
+
end
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
def test_dvec_ops
|
166
|
+
read_data
|
167
|
+
@row1 = @arr.row(1)
|
168
|
+
assert_equal(@num_cols, @row1.size)
|
169
|
+
@num_cols.times do |j|
|
170
|
+
assert_equal(@arr[1,j], @row1[j])
|
171
|
+
end
|
172
|
+
@col1 = @arr.column(1)
|
173
|
+
assert_equal(@num_rows, @col1.size)
|
174
|
+
@num_rows.times do |i|
|
175
|
+
assert_equal(@arr[i,1], @col1[i])
|
176
|
+
end
|
177
|
+
@arr.set_row(2,@row1)
|
178
|
+
@num_cols.times do |j|
|
179
|
+
assert_equal(@arr[2,j], @row1[j])
|
180
|
+
end
|
181
|
+
@arr.set_column(2,@col1)
|
182
|
+
@num_rows.times do |i|
|
183
|
+
assert_equal(@arr[i,2], @col1[i])
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
187
|
+
def test_marshal
|
188
|
+
t = Dtable.new(3,4)
|
189
|
+
t[1,1] = 1.2
|
190
|
+
t[3,2] = 2.5
|
191
|
+
|
192
|
+
str = Marshal.dump(t)
|
193
|
+
tbis = Marshal.restore(str)
|
194
|
+
assert_equal(t.num_rows, tbis.num_rows)
|
195
|
+
i = 0
|
196
|
+
while i < t.num_rows
|
197
|
+
assert_equal(t.row(i), tbis.row(i))
|
198
|
+
i += 1
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
202
|
+
end
|
203
|
+
|
204
|
+
|
205
|
+
|
206
|
+
|
207
|
+
|
208
|
+
|
209
|
+
|
210
|
+
|
211
|
+
|
212
|
+
|
213
|
+
|
214
|
+
|
215
|
+
|
216
|
+
|
217
|
+
|
218
|
+
|
219
|
+
|
220
|
+
|
221
|
+
|