From 67f56f0795ac0214f9828c42f8face229e204c1d Mon Sep 17 00:00:00 2001 From: David Miller Date: Sat, 21 Feb 2009 06:55:20 +0000 Subject: ClojureCLR: added ClojureCLR project to repo. --- .../LibTests/LazilyPersistentVectorTests.cs | 220 +++++++++++++++++++++ 1 file changed, 220 insertions(+) create mode 100644 ClojureCLR/Clojure/Clojure.Tests/LibTests/LazilyPersistentVectorTests.cs (limited to 'ClojureCLR/Clojure/Clojure.Tests/LibTests/LazilyPersistentVectorTests.cs') diff --git a/ClojureCLR/Clojure/Clojure.Tests/LibTests/LazilyPersistentVectorTests.cs b/ClojureCLR/Clojure/Clojure.Tests/LibTests/LazilyPersistentVectorTests.cs new file mode 100644 index 00000000..e5549288 --- /dev/null +++ b/ClojureCLR/Clojure/Clojure.Tests/LibTests/LazilyPersistentVectorTests.cs @@ -0,0 +1,220 @@ +/** + * Copyright (c) David Miller. All rights reserved. + * The use and distribution terms for this software are covered by the + * Eclipse Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php) + * which can be found in the file epl-v10.html at the root of this distribution. + * By using this software in any fashion, you are agreeing to be bound by + * the terms of this license. + * You must not remove this notice, or any other, from this software. + **/ + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +using NUnit.Framework; +using Rhino.Mocks; + +using clojure.lang; + +using RMExpect = Rhino.Mocks.Expect; + + +namespace Clojure.Tests.LibTests +{ + [TestFixture] + public class LazilyPersistentVectorTests : AssertionHelper + { + #region C-tor tests + + [Test] + public void CreateOwningOnNoParamsReturnsEmptyVector() + { + IPersistentVector v = LazilyPersistentVector.createOwning(); + Expect(v.count(),EqualTo(0)); + } + + [Test] + public void CreatingOwningOnParamsReturnsVector() + { + IPersistentVector v = LazilyPersistentVector.createOwning(1, 2, 3); + Expect(v.count(), EqualTo(3)); + Expect(v.nth(0), EqualTo(1)); + Expect(v.nth(1), EqualTo(2)); + Expect(v.nth(2), EqualTo(3)); + } + + [Test] + public void CreateOnEmptySeqReturnsEmptyVector() + { + IPersistentVector v = LazilyPersistentVector.create(new object[] {}); + Expect(v.count(), EqualTo(0)); + } + + [Test] + public void CreateOnNonEmptyCollectionReturnsVector() + { + IPersistentVector v = LazilyPersistentVector.createOwning(new object[] {1, 2, 3}); + Expect(v.count(), EqualTo(3)); + Expect(v.nth(0), EqualTo(1)); + Expect(v.nth(1), EqualTo(2)); + Expect(v.nth(2), EqualTo(3)); + } + + + #endregion + + #region IPersistentVector tests + + [Test] + public void NthInRangeWorks() + { + IPersistentVector v = LazilyPersistentVector.createOwning(1, 2, 3); + + Expect(v.count(), EqualTo(3)); + Expect(v.nth(0), EqualTo(1)); + Expect(v.nth(1), EqualTo(2)); + Expect(v.nth(2), EqualTo(3)); + } + + [Test] + [ExpectedException(typeof(IndexOutOfRangeException))] + public void NthOutOfRangeLowFails() + { + IPersistentVector v = LazilyPersistentVector.createOwning(1, 2, 3); + + Expect(v.nth(-4), EqualTo(1)); + } + + [Test] + [ExpectedException(typeof(IndexOutOfRangeException))] + public void NthOutOfRangeHighFails() + { + IPersistentVector v = LazilyPersistentVector.createOwning(1, 2, 3); + + Expect(v.nth(4), EqualTo(1)); + } + + [Test] + public void AssocnInRangeModifies() + { + IPersistentVector v = LazilyPersistentVector.createOwning(1, 2, 3); + IPersistentVector v2 = v.assocN(1, 4); + + Expect(v.count(), EqualTo(3)); + Expect(v.nth(0), EqualTo(1)); + Expect(v.nth(1), EqualTo(2)); + Expect(v.nth(2), EqualTo(3)); + + Expect(v2.count(), EqualTo(3)); + Expect(v2.nth(0), EqualTo(1)); + Expect(v2.nth(1), EqualTo(4)); + Expect(v2.nth(2), EqualTo(3)); + } + + [Test] + public void AssocnAtEndModifies() + { + IPersistentVector v = LazilyPersistentVector.createOwning(1, 2, 3); + IPersistentVector v2 = v.assocN(3, 4); + + Expect(v.count(), EqualTo(3)); + Expect(v.nth(0), EqualTo(1)); + Expect(v.nth(1), EqualTo(2)); + Expect(v.nth(2), EqualTo(3)); + + Expect(v2.count(), EqualTo(4)); + Expect(v2.nth(0), EqualTo(1)); + Expect(v2.nth(1), EqualTo(2)); + Expect(v2.nth(2), EqualTo(3)); + Expect(v2.nth(3), EqualTo(4)); + } + + [Test] + [ExpectedException(typeof(IndexOutOfRangeException))] + public void AssocNOutOfRangeLowFails() + { + IPersistentVector v = LazilyPersistentVector.createOwning(1, 2, 3); + IPersistentVector v2 = v.assocN(-4, 4); + } + + [Test] + [ExpectedException(typeof(IndexOutOfRangeException))] + public void AssocNOutOfRangeHighFails() + { + IPersistentVector v = LazilyPersistentVector.createOwning(1, 2, 3); + IPersistentVector v2 = v.assocN(4, 4); + } + + + [Test] + public void ConsAddsAtEnd() + { + IPersistentVector v = LazilyPersistentVector.createOwning(1, 2, 3); + IPersistentVector v2 = v.cons(4); + + Expect(v.count(), EqualTo(3)); + Expect(v.nth(0), EqualTo(1)); + Expect(v.nth(1), EqualTo(2)); + Expect(v.nth(2), EqualTo(3)); + + Expect(v2.count(), EqualTo(4)); + Expect(v2.nth(0), EqualTo(1)); + Expect(v2.nth(1), EqualTo(2)); + Expect(v2.nth(2), EqualTo(3)); + Expect(v2.nth(3), EqualTo(4)); + } + + [Test] + public void LengthWorks() + { + IPersistentVector v = LazilyPersistentVector.createOwning(1, 2, 3); + + Expect(v.length(), EqualTo(3)); + } + + #endregion + + #region IPersistentStack tests + + [Test] + public void PopOnNonEmptyWorks() + { + IPersistentVector v = LazilyPersistentVector.createOwning(1, 2, 3); + IPersistentVector v2 = (IPersistentVector)((IPersistentStack)v).pop(); + + Expect(v.count(), EqualTo(3)); + Expect(v.nth(0), EqualTo(1)); + Expect(v.nth(1), EqualTo(2)); + Expect(v.nth(2), EqualTo(3)); + + Expect(v2.count(), EqualTo(2)); + Expect(v2.nth(0), EqualTo(1)); + Expect(v2.nth(1), EqualTo(2)); + } + + [Test] + [ExpectedException(typeof(InvalidOperationException))] + public void PopOnEmptyFails() + { + IPersistentVector v = LazilyPersistentVector.createOwning(); + IPersistentStack v2 = ((IPersistentStack)v).pop(); + } + + #endregion + } + + [TestFixture] + public class LazilyPersistentVector_IObj_Tests : IObjTests + { + [SetUp] + public void Setup() + { + IPersistentVector v = LazilyPersistentVector.createOwning(1, 2, 3); + + _obj = _objWithNullMeta = (IObj)v; + _expectedType = typeof(LazilyPersistentVector); + } + } +} -- cgit v1.2.3-18-g5258