1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
common = require('./common.js');
var assert_eq = common.assert_eq;
var types = require('../types.js');
var core = require('../core.js');
var env = require('../env.js');
var symbol = types._symbol,
hash_map = core.ns['hash-map'],
hash_map_Q = core.ns['map?'],
assoc = core.ns['assoc'],
dissoc = core.ns['dissoc'],
get = core.ns['get'],
contains_Q = core.ns['contains?'],
count = core.ns['count'],
equal_Q = core.ns['='];
console.log("Testing hash_maps");
X = hash_map();
assert_eq(true, hash_map_Q(X));
assert_eq(null, get(X,'a'));
assert_eq(false, contains_Q(X, 'a'));
X1 = assoc(X, 'a', "value of X a");
assert_eq(null, get(X,'a'));
assert_eq(false, contains_Q(X, 'a'));
assert_eq("value of X a", get(X1, 'a'));
assert_eq(true, contains_Q(X1, 'a'));
Y = hash_map();
assert_eq(0, count(Y));
Y1 = assoc(Y, 'a', "value of Y a");
assert_eq(1, count(Y1));
Y2 = assoc(Y1, 'b', "value of Y b");
assert_eq(2, count(Y2));
assert_eq("value of Y a", get(Y2, 'a'));
assert_eq("value of Y b", get(Y2, 'b'));
X2 = assoc(X1, 'b', Y2);
assert_eq(2, count(Y2));
assert_eq(true, hash_map_Q(get(X2,'b')));
assert_eq('value of Y a', get(get(X2,'b'),'a'));
assert_eq('value of Y b', get(get(X2,'b'),'b'));
Y3 = dissoc(Y2, 'a');
assert_eq(2, count(Y2));
assert_eq(1, count(Y3));
assert_eq(null, get(Y3, 'a'));
Y4 = dissoc(Y3, 'b');
assert_eq(0, count(Y4));
assert_eq(null, get(Y4, 'b'));
console.log("Testing equal? function");
assert_eq(true, equal_Q(2,2));
assert_eq(false, equal_Q(2,3));
assert_eq(false, equal_Q(2,3));
assert_eq(true, equal_Q("abc","abc"));
assert_eq(false, equal_Q("abc","abz"));
assert_eq(false, equal_Q("zbc","abc"));
assert_eq(true, equal_Q(symbol("abc"),symbol("abc")));
assert_eq(false, equal_Q(symbol("abc"),symbol("abz")));
assert_eq(false, equal_Q(symbol("zbc"),symbol("abc")));
L6 = [1, 2, 3];
L7 = [1, 2, 3];
L8 = [1, 2, "Z"];
L9 = ["Z", 2, 3];
L10 = [1, 2];
assert_eq(true, equal_Q(L6, L7));
assert_eq(false, equal_Q(L6, L8));
assert_eq(false, equal_Q(L6, L9));
assert_eq(false, equal_Q(L6, L10));
assert_eq(false, equal_Q(L10, L6));
console.log("Testing ENV (1 level)")
env1 = new env.Env();
assert_eq('val_a',env1.set('a','val_a'));
assert_eq('val_b',env1.set('b','val_b'));
assert_eq('val_eq',env1.set('=','val_eq'));
assert_eq('val_a',env1.get('a'));
assert_eq('val_b',env1.get('b'));
assert_eq('val_eq',env1.get('='));
console.log("Testing ENV (2 levels)");
env2 = new env.Env(env1);
assert_eq('val_b2',env2.set('b','val_b2'));
assert_eq('val_c',env2.set('c','val_c'));
assert_eq(env1,env2.find('a'));
assert_eq(env2,env2.find('b'));
assert_eq(env2,env2.find('c'));
assert_eq('val_a', env2.get('a'));
assert_eq('val_b2',env2.get('b'));
assert_eq('val_c', env2.get('c'));
|