Add tests and build scripts.
[string-lerp.git] / tests / string-lerp.js
1 var JS = this.JS || require('jstest');
2 var m = require('../string-lerp');
3
4 JS.Test.describe('fast lerp', function () { with (this) {
5 var lerp = m.fastLerp;
6 var A = "Do you like green eggs and ham?";
7 var B = "I do not like them, Sam-I-am.";
8
9 it("handles empty strings", function () { with (this) {
10 assertEqual("", lerp("", "", -1));
11 assertEqual("", lerp("", "", 0));
12 assertEqual("", lerp("", "", 0.5));
13 assertEqual("", lerp("", "", 1));
14 assertEqual("", lerp("", "", 2));
15 }});
16
17 it("maintains identity", function () { with (this) {
18 for (var i = -1; i < 2; i += 1/1024) {
19 assertEqual(A, lerp(A, A, i));
20 assertEqual(B, lerp(B, B, i));
21 }
22 }});
23
24 it("handles lows", function () { with (this) {
25 assertEqual(A, lerp(A, B, -Infinity));
26 assertEqual(A, lerp(A, B, -1));
27 assertEqual(A, lerp(A, B, 0));
28 }});
29
30 it("handles highs", function () { with (this) {
31 assertEqual(B, lerp(A, B, 1));
32 assertEqual(B, lerp(A, B, 2));
33 assertEqual(B, lerp(A, B, Infinity));
34 }});
35
36 it("crams strings together", function () { with (this) {
37 assertEqual("I do not ke green eggs and ham?", lerp(A, B, 0.3));
38 assertEqual("I do not like tn eggs and ham?", lerp(A, B, 0.5));
39 assertEqual("I do not like them, Sam-I-am?", lerp(A, B, 0.98));
40 }});
41 }});
42
43 JS.Test.describe('diff lerp', function () { with (this) {
44 var lerp = m.diffLerp;
45 var A = "Do you like green eggs and ham?";
46 var B = "I do not like them, Sam-I-am.";
47
48 it("handles empty strings", function () { with (this) {
49 assertEqual("", lerp("", "", -1));
50 assertEqual("", lerp("", "", 0));
51 assertEqual("", lerp("", "", 0.5));
52 assertEqual("", lerp("", "", 1));
53 assertEqual("", lerp("", "", 2));
54 }});
55
56 it("maintains identity", function () { with (this) {
57 for (var i = -1; i < 2; i += 1/1024) {
58 assertEqual(A, lerp(A, A, i));
59 assertEqual(B, lerp(B, B, i));
60 }
61 }});
62
63 it("handles lows", function () { with (this) {
64 assertEqual(A, lerp(A, B, -Infinity));
65 assertEqual(A, lerp(A, B, -1));
66 assertEqual(A, lerp(A, B, 0));
67 }});
68
69 it("handles highs", function () { with (this) {
70 assertEqual(B, lerp(A, B, 1));
71 assertEqual(B, lerp(A, B, 2));
72 assertEqual(B, lerp(A, B, Infinity));
73 }});
74
75 it("edits strings", function () { with (this) {
76 assertEqual("Do you like green eggsSam-I-am.", lerp(A, B, 0.3));
77 assertEqual("Do you like green Sam-I-am.", lerp(A, B, 0.5));
78 assertEqual("do not like them, Sam-I-am.", lerp(A, B, 0.9));
79 }});
80 }});
81
82 JS.Test.describe('numeric lerp', function () { with (this) {
83 var lerp = m.numericLerp;
84
85 it("handles empty strings", function () { with (this) {
86 assertEqual("", lerp("", "", -1));
87 assertEqual("", lerp("", "", 0));
88 assertEqual("", lerp("", "", 0.5));
89 assertEqual("", lerp("", "", 1));
90 assertEqual("", lerp("", "", 2));
91 }});
92
93 it("handles single numbers", function () { with (this) {
94 assertEqual("0", lerp("0", "100", 0));
95 assertEqual("50", lerp("0", "100", 0.5));
96 assertEqual("100", lerp("0", "100", 1.0));
97 assertEqual("150", lerp("0", "100", 1.5));
98 }});
99
100 it("rounds integers", function () { with (this) {
101 assertEqual("12", lerp("0", "100", 0.123));
102 assertEqual("12.3", lerp("0", "100.0", 0.123));
103 assertEqual("12.3", lerp("0.0", "100", 0.123));
104 assertEqual("12.3", lerp("0.0", "100.0", 0.123));
105 }});
106
107 it("computes parameters outside [0, 1]", function () { with (this) {
108 assertEqual("Giving 110%", lerp("Giving 0%", "Giving 100%", 1.1));
109 }});
110
111 it("handles multiple numbers", function () { with (this) {
112 var A = "Chapter 0. The sky was rgb(0, 0, 0)."
113 var B = "Chapter 10. The sky was rgb(0, 0, 255)."
114 assertEqual(A, lerp(A, B, 0));
115 assertEqual(B, lerp(A, B, 1));
116 assertEqual("Chapter 5. The sky was rgb(0, 0, 128).", lerp(A, B, 0.5));
117 }});
118 }});