Exemple #1
0
        static Guid NewSession(Associative bindings)
        {
            var newGuid = Guid.NewGuid();

            _sessions.GetOrAdd(newGuid, bindings);
            return(newGuid);
        }
        public void AssociativeDotAssocWorks()
        {
            Dictionary <int, string> d = new Dictionary <int, string>();

            d[1] = "a";
            d[2] = "b";

            IPersistentMap m = PersistentArrayMap.create(d);
            Associative    a = (Associative)m;

            Associative a1 = a.assoc(3, "c");
            Associative a2 = a.assoc(2, "c");

            Expect(a.count(), EqualTo(2));
            Expect(a.valAt(1), EqualTo("a"));
            Expect(a.valAt(2), EqualTo("b"));
            Expect(a.containsKey(3), False);

            Expect(a1.count(), EqualTo(3));
            Expect(a1.valAt(1), EqualTo("a"));
            Expect(a1.valAt(2), EqualTo("b"));
            Expect(a1.valAt(3), EqualTo("c"));

            Expect(a2.count(), EqualTo(2));
            Expect(a2.valAt(1), EqualTo("a"));
            Expect(a2.valAt(2), EqualTo("c"));
            Expect(a2.containsKey(3), False);
        }
Exemple #3
0
 public Operator(char name, MathFunction func, int param, int precedence, Associative assoc)
 {
     Name        = name;
     Function    = func;
     Precevendce = precedence;
     Assoc       = assoc;
     Parameters  = param;
 }
        public void AssocWithNumericKeyInRangeChangesValue()
        {
            //This just checks that APersistentVector.assoc calls CPV.assocN
            CPV         v = new CPV(new object[] { 4, 5, 6 });
            Associative a = v.assoc(1, 10);

            Expect(a.valAt(0), EqualTo(4));
            Expect(a.valAt(1), EqualTo(10));
            Expect(a.valAt(2), EqualTo(6));
            Expect(a.count(), EqualTo(3));
        }
Exemple #5
0
        public void AssocWithNumericKeyOnePastEndAddValue()
        {
            //This just checks that APersistentVector.assoc calls CPV.assocN
            CPV         v = new CPV(new object[] { 4, 5, 6 });
            Associative a = v.assoc(3, 10);

            Expect(a.valAt(0)).To.Equal(4);
            Expect(a.valAt(1)).To.Equal(5);
            Expect(a.valAt(2)).To.Equal(6);
            Expect(a.valAt(3)).To.Equal(10);
            Expect(a.count()).To.Equal(4);
        }
Exemple #6
0
        /// <summary>
        /// Push a new frame of bindings onto the binding stack.
        /// </summary>
        /// <param name="bindings">The new bindings.</param>
        /// <remarks>Lowercase name for core.clj compatability.</remarks>
        public static void pushThreadBindings(Associative bindings)
        {
            Frame       f    = CurrentFrame;
            Associative bmap = f.Bindings;

            for (ISeq bs = bindings.seq(); bs != null; bs = bs.next())
            {
                IMapEntry e = (IMapEntry)bs.first();
                Var       v = (Var)e.key();
                v.Validate(e.val());
                v._count.incrementAndGet();
                bmap = bmap.assoc(v, new Box(e.val()));
            }
            CurrentFrame = new Frame(bindings, bmap, f);
        }
Exemple #7
0
        public static void pushThreadBindings(Associative bindings)
        {
            Frame       f    = CurrentFrame;
            Associative bmap = f.Bindings;

            for (ISeq bs = bindings.seq(); bs != null; bs = bs.next())
            {
                IMapEntry e = (IMapEntry)bs.first();
                Var       v = (Var)e.key();
                if (!v._dynamic)
                {
                    throw new InvalidOperationException(String.Format("Can't dynamically bind non-dynamic var: {0}/{1}", v.Namespace, v.Symbol));
                }
                v.Validate(e.val());
                v._threadBound.set(true);
                bmap = bmap.assoc(v, new TBox(Thread.CurrentThread, e.val()));
            }
            CurrentFrame = new Frame(bmap, f);
        }
 public void AssocWithNumericKeyOutOfRangeLowThrowsException()
 {
     //This just checks that APersistentVector.assoc calls CPV.assocN
     CPV         v = new CPV(new object[] { 4, 5, 6 });
     Associative a = v.assoc(-1, 10);
 }
 public void AssocWithNonNumericKeyThrowsException()
 {
     CPV         v = new CPV(new object[] { 4, 5, 6 });
     Associative a = v.assoc("a", 7);
 }
Exemple #10
0
 static Associative UpdateSession(Guid session, Associative newBindings)
 {
     return(_sessions.AddOrUpdate(session, newBindings, (guid, associative) => newBindings));
 }
Exemple #11
0
 /// <summary>
 /// Construct a frame on the stack.
 /// </summary>
 /// <param name="frameBindings">The bindings for this frame only.</param>
 /// <param name="bindings">Bindings all the way down the stack.</param>
 /// <param name="prev">The previous frame.</param>
 public Frame(Associative bindings, Frame prev)
 {
     //_frameBindings = frameBindings;
     _bindings = bindings;
     _prev     = prev;
 }
Exemple #12
0
 /// <summary>
 /// Push a new frame of bindings onto the binding stack.
 /// </summary>
 /// <param name="bindings">The new bindings.</param>
 /// <remarks>Lowercase name for core.clj compatability.</remarks>
 public static void pushThreadBindings(Associative bindings)
 {
     Frame f = CurrentFrame;
     Associative bmap = f.Bindings;
     for (ISeq bs = bindings.seq(); bs != null; bs = bs.next())
     {
         IMapEntry e = (IMapEntry)bs.first();
         Var v = (Var)e.key();
         v.Validate(e.val());
         v._count.incrementAndGet();
         bmap = bmap.assoc(v, new Box(e.val()));
     }
     CurrentFrame = new Frame(bindings, bmap, f);
 }
Exemple #13
0
 /// <summary>
 ///  Adds a math operator to the evaluation engine.
 /// </summary>
 /// <param name="op">Operator Name. Case insensitiv</param>
 /// <param name="func">Function that returns a double and take a List&lt;double&gt; as input</param>
 /// <param name="func">Precedence (2 = +-, 3 = */%, 4 = ^)</param>
 /// <param name="func">Associative, Left or Right</param>
 public void AddOperator(char op, MathFunction func, int Parameters = 2, int Precedence = 2, Associative associative = Associative.LEFT)
 {
     if (TokenTypes().ContainsKey(op))
     {
         throw new MathOperatorException("Unable to add operators named '(', ')' or ','");
     }
     MathOperators.AddOperator(char.ToLower(op), func, Parameters, Precedence, associative);
 }
Exemple #14
0
 public void AddOperator(char name, MathFunction func, int parameters = 2, int precedence = 2, Associative assoc = Associative.LEFT)
 {
     Operator op = new Operator(name, func, parameters, precedence, assoc);
     operators.Add(name, op);
 }
Exemple #15
0
 public Operator(char name, MathFunction func, int param, int precedence, Associative assoc)
 {
     Name = name;
     Function = func;
     Precevendce = precedence;
     Assoc = assoc;
     Parameters = param;
 }
Exemple #16
0
 /// <summary>
 /// Construct a frame on the stack.
 /// </summary>
 /// <param name="frameBindings">The bindings for this frame only.</param>
 /// <param name="bindings">Bindings all the way down the stack.</param>
 /// <param name="prev">The previous frame.</param>
 public Frame( Associative bindings, Frame prev)
 {
     //_frameBindings = frameBindings;
     _bindings = bindings;
     _prev = prev;
 }
Exemple #17
0
 public static void pushThreadBindings(Associative bindings)
 {
     Frame f = CurrentFrame;
     Associative bmap = f.Bindings;
     for (ISeq bs = bindings.seq(); bs != null; bs = bs.next())
     {
         IMapEntry e = (IMapEntry)bs.first();
         Var v = (Var)e.key();
         if (!v._dynamic)
             throw new InvalidOperationException(String.Format("Can't dynamically bind non-dynamic var: {0}/{1}", v.Namespace, v.Symbol));
         v.Validate(e.val());
         v._threadBound.set(true);
         bmap = bmap.assoc(v, new TBox(Thread.CurrentThread,e.val()));
     }
     CurrentFrame = new Frame(bmap, f);
 }
Exemple #18
0
        public void AddOperator(char name, MathFunction func, int parameters = 2, int precedence = 2, Associative assoc = Associative.Left)
        {
            if (new[] { '(', ')', ',' }.Contains(name))
            {
                throw new MathOperatorException("Unable to add operators named '(', ')' or ','");
            }

            var op = new Operator(name, func, parameters, precedence, assoc);

            Operators.Add(name, op);
        }